[pso] [Tema2][Linux]Problema enunt si implementare

Bogdan Nitu nitubogdan_cc at yahoo.com
Thu Apr 8 19:42:03 EEST 2010


In urma acestei modificari, a trebuit pe sender sa nu mai citesc iir
(ca sa nu se mai regenereze intreruperea)
Scriu cat pot (bine la 200 ma opresc).
Eu am printat mereu LSR ->   T 60. LSR este mereu 60 asadar mereu
bitul 5 setat  (asta spuneam eu mai devreme, bitul 0 imi functioneaza, 
dar 5 si 6 nu, mereu 1 si 0, atata stiu).

fifo asa il am in init:

outb(0xc7,(COM1_BASE)+FCR);
outb(0xc7,(COM2_BASE)+FCR);

Bitii 0 1 2 6 7 

0    Enable FIFO's
1    Clear receive FIFO
2    Clear transmit FIFO
6,7    1    1    14 bytes




HANDLERUL:

unsigned char iir, ch = 0,lsr;         // daca este THREI setat
int sender = is_EnableTransmitterHoldingRegisterEmptyInterrupt(data->base); 
lsr = inb((data->base)+5);
    if (sender)   {    // daca sunt sender

        while (lsr & (1<<5))   {

            outb(bufferTransmitator[cursorTransmitator], data->base);
            printk(LOG_LEVEL "T %x\n",lsr);
            cursorTransmitator++;
            if(cursorTransmitator == 200)  {cursorTransmitator = 0; break;}
        }
    }
    else
    {
        iir = inb((data->base)+2);
        ch = inb(data->base);
        printk(LOG_LEVEL "R %x ::: %c (%x)\n",lsr,ch,ch);
    }
    return IRQ_HANDLED;


echo -n "a" > /dev/com1 asta imi da

(RDAI decat odata apare si gata)  (se depaseste dimensinea fifo 14)

T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
R 61 ::: Z (5a)
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
T 60
COM1 closed

--- On Thu, 4/8/10, Razvan Deaconescu <razvan.deaconescu at cs.pub.ro> wrote:

From: Razvan Deaconescu <razvan.deaconescu at cs.pub.ro>
Subject: Re: [pso] [Tema2][Linux]Problema enunt si implementare
To: "Proiectarea Sistemelor de Operare" <pso at cursuri.cs.pub.ro>
Date: Thursday, April 8, 2010, 7:07 PM

On Thu, 2010-04-08 at 08:12 -0700, Bogdan Nitu wrote:
> Daca buffer-ul celui care trimite are 14 octeti de scris (atata are la
> mine FIFO) 
> si la  fiecare intrerupere THREI scriu un octet, de cele mai multe ori
> mi se 
> genereaza cele 14 consecutiv THREI si abia apoi cele 14 RDAI, rareori
> mi se mai intampla sa am 14 THREI cu un RDAI intercalat.

Nu trebuie sa scrii cate un octet la fiecare intrerupere. Trebuie sa
scrii cat timp _poti_ scrie; adica atata timp cat bitul "Empty
Transmitter Holding Register" din LSR[1], adica al cincilea bit este
activat.

Razvan

[1] http://www.beyondlogic.org/serial/serial.htm#20

_______________________________________________
pso mailing list
pso at cursuri.cs.pub.ro
http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso



      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/lurker/list/pso.html/attachments/20100408/2ab298dd/attachment.htm>


More information about the pso mailing list