[elektro] GPIO AF valtas / spike
uprogc .
uprogc at gmail.com
Thu Aug 18 09:06:12 CEST 2016
Szia,
A korabbi kodomnal egyertelmuen latszott a register hatasa.
Erdekes hogy nem sok kodban latni (register ), valoszinuleg legtobb esetben
nincs is ra szukseg.
Koszi a valaszt.
2016-08-17 21:43 GMT+03:00 hg12345 <hg12345 at freemail.hu>:
> Hi,
> érdemes meglesni ilyen esetekben az asm listát, sokat segít, de ovatosan
> kell nézni, mert minden -o??? esetén másképp generálódik, ill a ha
> változtatsz a rutinban ez is változhat.
>
> Ilyen esetekre vannak még kód fixáló utasítás, hogy az optimalizáció ne
> keverje össze végrehajtási sort.
> ha esetleg érdekes lehet :
> https://developer.arm.com/docs/dui0774/latest/compiler-specific-intrinsics
>
>
> "uprogc ." <uprogc at gmail.com> írta:
> >Tomoritettem a kodot es idaig meg nem lattam spikeot, valoszinuleg mar
> >nincs is ahogy legyen.
> >
> >Eddig valamiert nem esett le nekem hogy hogyan is irhatnam csak egyszer az
> >AFR-t ;)
> >
> >Koszi.
> >
> >2016-08-17 15:10 GMT+03:00 uprogc . <uprogc at gmail.com>:
> >
> >> Mennyire segit a *register* uint32_t *ize ARM eseten ?
> >>
> >> Ezzel jobb eredmenyt kaptam mint volatile-al.
> >>
> >> 2016-08-17 15:07 GMT+03:00 uprogc . <uprogc at gmail.com>:
> >>
> >>> Koszi kiprobalom.
> >>> Volatile nem kerdes, de azert koszi.
> >>>
> >>> Eredetileg igy volt megirva :
> >>>
> >>> Uart3McuInit()
> >>> {
> >>> ....
> >>> GpioInit( &obj->Tx, tx, PIN_ALTERNATE_FCT, PIN_PUSH_PULL,
> >>> PIN_PULL_UP, 0 );
> >>> GpioInit( &obj->Rx, rx, PIN_ALTERNATE_FCT, PIN_PUSH_PULL,
> >>> PIN_PULL_UP, 0 );
> >>>
> >>> GPIO_PinAFConfig( obj->Tx.port, ( obj->Tx.pin & 0x0F ),
> >>> GPIO_AF_USART3 ); //--> glitch
> >>> GPIO_PinAFConfig( obj->Rx.port, ( obj->Rx.pin & 0x0F ),
> >>> GPIO_AF_USART3 );
> >>> }
> >>>
> >>> Igy sokkal rosszabb volt, minden alkalommal tuske.
> >>>
> >>> Aztan a PULL_UP-okat kicsereltem PULL_DOWN-ra. Igy a USART huzza fel a
> >>> kimenetet H szintre.
> >>>
> >>> Igy jobb lett + a kod optimalizalassal, de veletlenszeruen igy is
> >>> elofordul tuske. Nem ertem miert csak veletlenszeruen...
> >>>
> >>>
> >>> 2016-08-17 14:53 GMT+03:00 hg12345 <hg12345 at freemail.hu>:
> >>>
> >>>> Hi, szerintem az ST ARM-okban van ilyen funkció az UART/USART-ban.
> >>>> ha csak egyszer akarod írni a AFR regiszterek, akkor
> >>>>
> >>>> volatile register tmp;
> >>>> tmp = (AFR & mask) | new;
> >>>> AFR = tmp;
> >>>>
> >>>> a "volatile", ha nem így csinálod kioptimalizálja,
> >>>>
> >>>> amúgy megpróbálható egy sorba leírva, ezt áltálaban jó optimalizálja,
> >>>>
> >>>> AFR = (AFR & mask) | new; (az AFR gyárilag "volatile")
> >>>> ez biztos beolvassa a belső regiszterbe az AFR értéket elvégzi a
> >>>> műveletet és és kiírja.
> >>>>
> >>>> Sokat segíthet, ha átállítás előtt úgy állítod a GPIO lábat, hogy a
> >>>> TX-nek megfelelő állapotú legyen, esetleg még segíthet az is ha mindig
> >>>> felhúzó ellenállást állítasz kimenetre, mert amikor átkapcsol ez
> mindig
> >>>> felhúz, még ha egy pillanatra bemenet lenne....
> >>>>
> >>>>
> >>>> "uprogc ." <uprogc at gmail.com> írta:
> >>>> >Jobban orulnek ha mar nem kellene a HW-t bonyolitani.
> >>>> >
> >>>> >2016-08-17 14:21 GMT+03:00 Pipi <lista at puzsar.hu>:
> >>>> >
> >>>> >> nem tudsz még egy lábat elhasználni?
> >>>> >> pici soros ellenállás a tx-el, erre megy a másik gpio láb, ami vagy
> >>>> >> kimenet, vagy ts/bemenet, ezzel adod a break-ot
> >>>> >>
> >>>> >> Idézet ("uprogc ." <uprogc at gmail.com>):
> >>>> >>
> >>>> >> Sziasztok,
> >>>> >>>
> >>>> >>> Break conditiont kell generalnom a usart-on.
> >>>> >>> Ugy oldottam meg hogy atvaltok gpio-ra es lehuzom a tx labat t
> idore,
> >>>> >>> aztan
> >>>> >>> visszavaltok usart-ra es kuldom amit kell.
> >>>> >>>
> >>>> >>> Amikor kapcsolok vissza usart-ra ( gpio / AF valtas ) akkor van
> egy
> >>>> tuske
> >>>> >>> a
> >>>> >>> tx es rx pin-en.
> >>>> >>> A tusket konkretan az AFR ketszeri irasa okozza a fv. vegen.
> >>>> >>>
> >>>> >>> Optimalizaltam ezt:
> >>>> >>> void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t
> GPIO_PinSource,
> >>>> >>> uint8_t
> >>>> >>> GPIO_AF)
> >>>> >>>
> >>>> >>> ugy hogy a fv. vegen csak ennyi maradt:
> >>>> >>> *afr = temp_2;
> >>>> >>> *afr |= temp;
> >>>> >>>
> >>>> >>> Az afr egy mutato , erteke :
> >>>> >>> afr = &GPIOx->AFR[indx];
> >>>> >>>
> >>>> >>> Igy eltunt a tuske, viszont nem teljesen, veletlenszeruen
> megjelenik.
> >>>> >>>
> >>>> >>> Hogy tudnam meg jobban optimalizalni a gpio / af atvaltast ?
> >>>> >>>
> >>>> >>> Udv.
> >>>> >>> Szabi
> >>>> >>> -----------------------------------------
> >>>> >>> elektro[-flame|-etc]
> >>>> >>>
> >>>> >>
> >>>> >>
> >>>> >> -----------------------------------------
> >>>> >> elektro[-flame|-etc]
> >>>> >-----------------------------------------
> >>>> > elektro[-flame|-etc]
> >>>>
> >>>> -----------------------------------------
> >>>> elektro[-flame|-etc]
> >>>>
> >>>
> >>>
> >>
> >-----------------------------------------
> > elektro[-flame|-etc]
>
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list