[pso] [Tema2][Linux][Activare intreruperi]

Andrei Voinescu voinescu.andrei at gmail.com
Tue Apr 6 16:15:40 EEST 2010


2010/4/5 Bogdan Nitu <nitubogdan_cc at yahoo.com>
>
> Daca poate sa ma ajute cineva, mie tot nu imi intra in handler, desi:
>
> 1)
> outb(0x00,(COM1_BASE)+3);   // fortez 0 pe tot LCR si astfel si pe bitul 7 (DLAB) - nu stiu cum sa fortez doar un bit dintr-un registru

Macro-ul SET_LINE setează (printre altele) DLAB 0 (pentru că pune
DLAB1 pentru baudrate, apoi îl pune pe 0).
Metoda corectă de a seta un bit ar fi un inb, urmat de un outb cu o
valoare modificată.

unsigned char c = inb(COM1_BASE+3);
outb(c | 0x80, COM1_BASE+3);

exact ca la PM.

>
> outb(0x00,(COM1_BASE)+2);   // dezactivare fifo
> outb(0x08,(COM1_BASE)+4);   // setare Bit 3 - MCR  - Aux Output 2
> outb(0x0F,(COM1_BASE)+1);   // setare Bit 0, 1, 2, 3 - IER - activarea tuturor intreruperilor (DLAB este deja 0)

Nu știu ce faci cu primele două întreruperi...
>
> SET_LINE(UART16550_BAUD_9600,UART16550_LEN_8,UART16550_STOP_1,UART16550_PAR_NONE,COM1_BASE); //macroul din laboratorul de anul trecut
>
> si scriu outb('w', COM1_BASE); si nu intra in handler desi acesta este inregistrat pe liniile 4 si 3 pentru cele doua comm-uri
> cat /proc/interrupts
> 3:          0   IO-APIC-edge      so2_com2
> 4:          0   IO-APIC-edge      so2_com1

Verifică să ai COM-urile conectate în mașina virtuală VM->Removable
Devices->Serial Port-> Settings (să apară amândouă ca fiind
conectate).
>
> 2)
> Un lucru pe care nu il inteleg deloc este operatia de citire (de ce nu functioneaza?):
> Cand citesc din LSR (Line Status Register)  stare = inb((COM1_BASE)+5) imi returneaza ff.

Ție îți trebuie doar un bit din registrul de stare.
Datele efective se găsesc în alt registru.

> Citesc din orice registru imi da ff desi in request_region am cerut 8 porturi:
> if(request_region(COM1_BASE, 8, COM1_NAME) == NULL) {  };

Request_region nu are nicio legătură cu buna funcționare a inb/outb. Check lxr.
>
> 3)
> O alta intrebare, pe masina virtuala ati dat jos vre-un modul?
> Mie nu imi mergea request_region (error - no such device) si a trebuit rmmod 8250_pnp.

Ai ultima mașină virtuală? Pe cea veche trebuia scos driver-ul
"serial", dar acela era built-in, nu modul.
>
> Multumesc frumos!
>
> Bogdan.
>
>
>


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


More information about the pso mailing list