[so2] [SO2][Tema2] Comportament COM-uri

Alexandru Juncu alexj at rosedu.org
Fri Apr 5 12:14:46 EEST 2013


2013/4/5 Alexandru Juncu <alexj at rosedu.org>:
> 2013/4/5 Liviu Chircu <liviu.chircu at gmail.com>:
>> Salut,
>>
>> Dacă presupunem că întreruperea RDAI e activată pe ambele COM-uri pe care
>> modulul meu le-a deschis și scriu un octet în COM1, ar trebui să se genereze
>> două intreruperi de RDAI (COM1 și COM2) sau una singură (pe COM2) ? Din câte
>> am văzut, e vorba de a 2-a variantă... dar normal mi s-ar părea să fie
>> prima.
>
> Salut!
>
> În primul rând nu știu la ce te referi cu "întreruperea RDAI". "RDAI"
> sună a adresă de IO port...  Receive Data Available Interrupt.
> Fiecare "COM" are întreruperea sa
> #define COM1_IRQ»       4
> #define COM2_IRQ»       3
>
> Dar tu folosești io porturile, prin registre gen RDAI, să zici
> controller-ului când să trimită întreruperi. RDAI parcă zicea
> controller-ului să trimită întrerupere nubcleului (adică să apeleze
> funcția handler) atunci când există date în bufferul hardware.

Corecție: RDAI este doar un bit în registru (în cazul acesta, resgistru IER).

Și cred că am găsit de unde vine confuzia: în lab zice "se activează
întreruperea dorită (RDAI - Receive Data Available Interrupt, THREI -
Transmit Holding Register Empty Interrupt) prin setarea bitului
corespunzător în registrul IER.". Poate formularea este puțin confuză.
Întreruperea e una (per port/COM). Doar că atunci când vine, s-ar
putea să însemne lucruri diferite, în funcție de registrele setate din
porturile IO.

Sper că are mai mult sens acum.

>
> Porturile, la fel ce întreruperile (în cazul temei), sunt per dispozitiv.


More information about the so2 mailing list