[pso] [Tema2][Linux] Problema la receptia unui caracter in handler
Mihnea Donciu
mihnea.donciu at gmail.com
Wed Apr 21 23:34:45 EEST 2010
Intr-adevar, am eliminat liniile in care puneam 0 in LCR si acum primesc
ceea ce trebuie.
Multumesc Andrei!
Mihnea
On 4/21/2010 11:23 PM, Andrei Voinescu wrote:
> Pentru cei care ar putea întâmpina o situație similară, problema era
> de la setarea DLAB pe 0, care era făcută cu outb(0x00, base+3),
> practic seta numărul de biți de payload la 5. Corect ar fi să citiți
> LCR înainte de a seta noua valoare, sau să lăsați DLAB0 de la început
> (de când apelați macro-ul).
>
> Andrei
>
> 2010/4/21 Andrei Voinescu<voinescu.andrei at gmail.com>:
>
>> 2010/4/21 Andrei Voinescu<voinescu.andrei at gmail.com>:
>>
>>> 2010/4/21 Andrei Voinescu<voinescu.andrei at gmail.com>:
>>>
>>>> 2010/4/21 Mihnea Donciu<mihnea.donciu at gmail.com>:
>>>>
>>>>> On 4/21/2010 12:10 AM, Andrei Voinescu wrote:
>>>>>
>>>>>> În LCR configurezi trimiterea a câte 8 biți?
>>>>>>
>>>>>>
>>>>> Folosesc macrou-ul SET_LINE definit in laborator :
>>>>> SET_LINE(UART16550_BAUD_9600,UART16550_LEN_8,UART16550_STOP_1,
>>>>> UART16550_PAR_NONE,port); //setez parametrii de comunicatie
>>>>>
>>>>>> Ce se întâmplă când trimiți 0xff la un capăt?
>>>>>>
>>>>>> echo -ne '\xff' | od -x => pentru verificare
>>>>>> echo -ne '\xff'> /dev/com1
>>>>>>
>>>>>> Andrei
>>>>>>
>>>>>>
>>>>> com1: Inregistrat ÿ in buffer, fill = 1
>>>>> com1: IIR c2 LSR 60 MSR bb
>>>>> com1: fill = 1
>>>>> com1: T 255 (60) // trimit caracterul 255 ascii
>>>>> com1: IIR c2 LSR 60 MSR b0
>>>>> com1: fill = 0
>>>>> com2: IIR cc LSR 61 MSR b0
>>>>> com2: R 31 (61) // primesc caracterul 31 ascii
>>>>>
>>>> Ok. E destul de clar acum că îți trimite doar ultimii 5 biți. Verifică
>>>>
>>> *4*
>>>
>> *5*. Sorry, too early in the morning :D
>>
>>>> contextul folosirii macro-ului (la tine în modul).
>>>> Verifică să ai DLAB=0 când citești din registru (deși nu acesta ar fi
>>>> comportamentul).
>>>> outb-ul de test din init este înainte sau după setarea parametrilor
>>>> liniei de comunicație?
>>>>
>>>>
>>>> Andrei
>>>>
>>>>>> 2010/4/20 Mihnea Donciu<mihnea.donciu at gmail.com>:
>>>>>>
>>>>>>
>>>>>>> Salut!
>>>>>>>
>>>>>>> Am o problema cand citesc la receptor in handler caracterul primit pe
>>>>>>> port
>>>>>>> (ch = inb(data->base)), dupa ce il trimit tot in handler la transmitator
>>>>>>> (outb(ch, data->base)).
>>>>>>> De exemplu, daca trimit catre dispozitiv un sir prin echo -n "mama1234">>
>>>>>>> /dev/com1, pe com2 voi primi asa:
>>>>>>> com2: (IIR = cc) (LSR = 61) (MSR = b0) // registrele de stare
>>>>>>> com2: R 13 (61) // 13 in ascii pt m, cand m e 109 in ascii
>>>>>>> com2: R 1 (61) // 1 in ascii pt a, cand a e 97 in ascii
>>>>>>> com2: R 13 (61) // la fel pt m
>>>>>>> com2: R 1 (61) // la fel pt a
>>>>>>> com2: R 17 (61) // 17 in ascii pt 1, cand 1 in ascii e 49
>>>>>>> com2: R 18 (61) // 18 in ascii pt 2, cand 2 in ascii e 50
>>>>>>> com2: R 19 (61) // 19 in ascii pt 3, cand 3 in ascii e 51
>>>>>>> com2: R 20 (61) // 20 in ascii pt 4, cand 4 in ascii e 52
>>>>>>>
>>>>>>> Deci pentru litere primesc un caracter aflat la un decalaj de 96 de
>>>>>>> unitati,
>>>>>>> iar pentru cifre rezulta un decalaj de 32.
>>>>>>> Ma poate ajuta cineva cu un sfat?
>>>>>>> Multumesc.
>>>>>>>
>>>>>>> Mihnea
>>>>>>> _______________________________________________
>>>>>>> pso mailing list
>>>>>>> pso at cursuri.cs.pub.ro
>>>>>>> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> _______________________________________________
>>>>>> pso mailing list
>>>>>> pso at cursuri.cs.pub.ro
>>>>>> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>>>>>>
>>>>>>
>>>>> _______________________________________________
>>>>> pso mailing list
>>>>> pso at cursuri.cs.pub.ro
>>>>> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>>>>>
>>>>>
>>>>
>>>
>>
> _______________________________________________
> 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