[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