UART flush

programski jeziki in programiranje

Moderator: tilz0R

UART flush

OdgovorNapisal/-a zanka » 19 Jul 2021, 19:55

Čisto tako ... imam MCU, ki po serijskem (dejansko gre za CDC ACM) vrne nazaj vse, kar dobi. Aplikacija na računalniku meri prepustnost in zato pošilja in preverja, če dobi, kar je poslala. Sedaj aplikacijo prekinem in jo ponovno zaženem, vendar javi napako, saj sprejeti podatki niso pravi. (Končna uporaba ni taka, ampak to je preverjanje, če deluje "loopback".)

Ugotovil sem, da je RX pomnilnik za UART na MCU neprazen in se ne more sprazniti ... če ročno postavim zastavico, ki jo postavi IRQ, kadar se proži in je USB_ISTR_EP_ID enak številki končne točke (endpoint) za RX. Čeprav opažam, da je endpoint za RX v stanju VALID, torej bi moral program pomnilnik vendarle prebrati. Vendar opažam, da je problem v ukazu __WFI(); ki postavi MCU v spanje dokler ne pride IRQ, saj je narava programa takšna, da jo premikajo naprej prekinitve.

Če odstranim spanje, potem loopback test ne deluje. Sedaj sem dodal proženje IRQ na USB_CNTR_SOFM, kar je neumnost, ampak deluje.
Kakšne boljše ideje?
Uporabniški avatar
zanka
 
Prispevkov: 3178
Pridružen: 17 Mar 2016, 01:16
Kraj: SI-8000
Zahvalil se je: 120 krat
Prejel zahvalo: 368 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 73

Re: UART flush

OdgovorNapisal/-a zanka » 20 Jul 2021, 06:34

Trditev "če ročno postavim zastavico" in se potem vse nadaljuje prav, je napačna. Dejansko sproži prekinitev moja prekinitev preko SWD, ko gledam stanje spremenljivk.
Uporabniški avatar
zanka
 
Prispevkov: 3178
Pridružen: 17 Mar 2016, 01:16
Kraj: SI-8000
Zahvalil se je: 120 krat
Prejel zahvalo: 368 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 73

Re: UART flush

OdgovorNapisal/-a tilz0R » 21 Jul 2021, 12:46

Moral boš podati več info preden lahko dobiš koristno pomoč.

Kakšen MCU imaš in ali si napisal svoj sw? To, da se ne more sprazniti je zelo čudno.
Še bolj čudno je, da je če NI __WFI, potem ne dela, drugače pa dela na interrupt.

Imaš kakšne preemption nastavitve za IRQ narobe vklopljene?
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1947
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 236 krat
Prejel zahvalo: 563 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 119

Re: UART flush

OdgovorNapisal/-a zanka » 21 Jul 2021, 13:03

Sem zamenjal vrstni red. Bistvena sprememba je branje sprejetih podatkov takoj, ko so ti na voljo in ne šele v naslednjem poizkusu.
Sedaj dobim 40 % večjo prepustnost oziroma 60 %, če preskočim še spanje __WFI.

Moram še ugotoviti, kako narediti examine pomnilniške lokacije, saj je dostop do (določenih mest) pomnilnika kvečjemu half-word.
Uporabniški avatar
zanka
 
Prispevkov: 3178
Pridružen: 17 Mar 2016, 01:16
Kraj: SI-8000
Zahvalil se je: 120 krat
Prejel zahvalo: 368 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 73


Vrni se na Software

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost