[pso] [Tema2][Linux]Problema reactivare intreruperi pe receiver.
Andrei Voinescu
voinescu.andrei at gmail.com
Thu Apr 8 00:31:50 EEST 2010
2010/4/7 Bogdan Nitu <nitubogdan_cc at yahoo.com>
>
>
> Salut!
>
> Am urmatoarea problema:
> La sfarsitul operatiei de scriere (pentru COM1 este exemplul), reactivez intreruperile:
> - COM1 sender -> cu DLAB=0 set BIT 1 din IER -- Enable Transmitter Holding Register Empty Interrupt
> - COM2 receiver -> cu DLAB=0 set BIT 0 din IER -- Enable Received Data Available Interrupt
>
> Sa zicem ca in bufferul senderului sunt 10 caractere.
> Problema: Pana mi se goleste bufferul mi se genereaza intreruperea de 10 ori consecutiv, mi se apeleaza handlerul pe COM1 (transmitatorul), si d-abia apoi de 10 ori consecutiv handlerul pentru COM2.
>
> Intreruperea pentru COM2 se genereaza abia dupa ce s-au generat toate cele 10 intreruperi de pe COM1 (au fost in buffer 10 caractere). De ce nu vine intretesut? Am fifo de 14, daca bufferul are mai mult de 14 caractere, trebuie sa ma opresc, ca sa se poata genera intrerupere si pentru receptor.
Dacă ai activat FIFO-ul pe transmit, atunci biții nu se vor pune
imediat pe fir, ci în buffer-ul de FIFO (care se golește la un timeout
sau când e full).
http://tldp.org/HOWTO/Serial-HOWTO-19.html
>
> iir pe com1 sender are bitii 2 si 1: 0 1 (Transmitter holding register empty)
> iir pe com2 receiver are bitii 2 si 1: 1 si 0 (Received Data Available)
>
> In mod normal la sfarsitul lui write ar trebui sa reactivez doar intreruperile
> pentru Sender (sunt pe COM1, nu am acces la COM2 care se presupune a fi
> pe alta masina).
>
> Apoi intreruperile de tip Received Data Available au prioritate mai mare
> decat cele Transmiter holding register empty.
>
> Cand primesc data pe COM2 (eveniment: Received Data Available) ar trebuie
> sa se genereze imediat intrerupere, nu sa se genereze mai intai numai
> pentru sender de 10 ori.
>
>
> se intra in handle: com1
> se intra in handle: com1
> ..... de 10 ori
> se intra in handle: com1
> se intra in handle: com2 s-a primit caracterul 'a'
> se intra in handle: com2 s-a primit caracterul 'b'
> se intra in handle: com2 s-a primit caracterul 'c'
> se intra in handle: com2 s-a primit caracterul 'd'
> ... iar de 10 ori
>
> Am tot cautat pe net, iar pe forumurile din 2008, 2007 .... vad ca este alt uart, parca 8250. Nu-i dau de cap, daca ma poate ajuta cineva!
8250First UART in this series. It contains no scratch register. The
8250A was an improved version of the 8250 which operates faster on the
bus side.
16550This was the first generation of buffered UART. It has a 16 byte
buffer, however it doesn't work and is replaced with the 16550A.
16550AIs the most common UART use for high speed communications eg
14.4K & 28.8K Modems. They made sure the FIFO buffers worked on this
UART.
>
> Multumesc frumos!
>
>
>
>
>
>
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
Andrei
>
More information about the pso
mailing list