[elektro] GPIO AF valtas / spike

uprogc . uprogc at gmail.com
Thu Aug 18 09:25:41 CEST 2016


ui:

ASM listat CooCoxban sajnos nem tudok generalni, mert a Misc Controls-ba
beirt kapcsolokat idezojelben adja at a gcc-nek, annak meg nem tetszik,...

2016-08-18 10:06 GMT+03:00 uprogc . <uprogc at gmail.com>:

> 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-speci
>> fic-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