Autor: Michal Schulz (szuler_at_venus.wmid.amu.edu.pl)
Data: Wed 20 Dec 2000 - 12:56:23 MET
On Wed, 20 Dec 2000, MariuszC wrote:
> Witam
>
> czy udalo sie komus obsluzyc 2 porty szeregowe (np COM1 i COM3) ktore
> wywoluja
> jedno przerwanie (standardowo IRQ4) w DOSie. Oczywiscie chodzi mi o
> calkowita
> kontrole nad tym, tzn oba UARTy sa obslugiwane w jednym programie, a
> jedna
> funkcja obslugi przerwania wywoluje konkretne funkcje odczytu z bufora
> UARTa.
> W wielu artykulach czytalem ze potrzebna jest specjalna wieloportowa
> karta I/O
> w ktorej istnieje dodatkowy rejestr z ktorego odczytuje sie, ktory port
> wymaga obslugi.
> Ale dorwalem tej jeden ktory stwierdza, ze da sie obsluzyc wiele portow
> na jednym
> IRQ, ale wlasnie jedynie gdy zajmuje sie tym jeden program. Tyle ze mi
> jakos to nie
> dziala. Ok, jeden port chodzi, ale jak otworze drugi - to ani jeden ani
> drugi nie odbiera
> wszystkich wyslanych danych.
> Jednak ciekawi mnie fakt, ze Windowsy radza sobie z tym problemem i sa w
> stanie
> obsluzyc tez dodatkowo inne urzadzenia pod jednym IRQ. A przeciez nie
> zmieniam
> nic w Sprzecie przy przechodzeniu do DOSa.
Jest taki rejestr w kazdym UAR'cie, nazywa sie IIR (interrupt id register)
i z niego nalezy korzystac. Mowi on co bylo zrodlem przerwania (lub zero
jesli ten uart nie generowal zadnego). Kawalek kodu (z mojego drivera)
wyglada tak:
void serial_int_13(HIDDT_IRQ_Handler *irq, HIDDT_IRQ_HwInfo *hw)
{
UBYTE code;
code = 1;
if (csd->units[0])
code = serial_inp(csd->units[0], UART_IIR) & 0x07;
switch (code)
{
case UART_IIR_RLSI:
(void)serial_inp(csd->units[0], UART_LSR);
break;
case UART_IIR_RDI:
if (csd->units[0]) cos_co_odczyta_bajt(csd->units[0])
break;
case UART_IIR_MSI:
(void)serial_inp(csd->units[0], UART_MSR);
break;
}
code = 1;
if (csd->units[2])
code = serial_inp(csd->units[2], UART_IIR) & 0x07;
switch (code)
... itd....
Nie zauwazylem jak narazie zeby nie dzialalo.
Jak chcesz wiedziec wiecej to info znajdziesz albo w zrodlach aros'a
(ftp.aros.org o ile sie nic nie zmienilo) albo linuxa.
Swoja droga smieszne ze winda jednak sobie z tym nie radzi :))))
pozdrowienia,
-- Michal Schulz szuler_at_venus.wmid.amu.edu.pl
To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 21:03:54 MET DST