Ako zistit stav signalu TXRDY - XR16M654IV64

Jan Waclawek konfera na efton.sk
Pondělí Květen 2 22:01:44 CEST 2016


>Bohuzial pomocou ISR registra to nieje tak jednoduche. 

Pisal som nieco o tom, ze to je jednoduche? ;-)

Tx FIFO ma N poloziek a prah na M polozkach (to sa u tohto UARTu da
nastavit v 4 stupnoch, FCR[5:4]). Ak nastane prerusenie (alebo periodicky
v hlavnej slucke) treba citat ISR register a na zaklade vrateneho stavu
treba vykonat akciu, ktoru ten stav vyzaduje, tak, aby sa stav prerusenia
pre ten stav vynuloval. Take neexistuje, ze stav nie je mozne osetrit,
kazdy stav je mozne osetrit.

Jeden z tych stavov je, ze Tx FIFO prekrocilo M zhora nadol, alebo je
prazdny. Toto prerusenie sa automaticky nuluje citanim ISR, takze v
okamihu rozhodovania je uz zrusene. Rozlisit tie dva stavy sa daju citanim
LSR, prazdne FIFO indikuje bit 5. Takze postup je nasledovny:
- zavediete si premennu TxFifoLevel, na zaciatku ju vynulujete
- pri zapise polozky do Tx FIFO inkrementujete tuto premennu, ak dosiahne
N, tak je FIFO plne a viac sa nemoze do neho zapisovat
- pri preruseni citate register ISR, musite ho pochopitelne plne rozparsovat
  - ak sa jedna o prerusenie typu TXRDY, precitate LSR register
    - ak je LSR.5=1, FIFO je prazdne, vynulujete TxFifoLevel
    - ak nie, nastavite TxFifoLevel na M-1

Pri pouziti skutocneho prerusenia pochopitelne treba dbat na atomicitu
premennej TxFifoLevel.

wek



Další informace o konferenci Hw-list