Daniel Gutson
2014-10-21 17:32:13 UTC
Hi,
in the writing interrupt mode (ns16550_write_support_int), we have
for (i = 0; i < out; ++i) {
set( port, NS16550_TRANSMIT_BUFFER, buf [i]);
}
Shouldn't we check, before writing to the register for the iterations
after the first one,
whether the character entered in the FIFO? (otherwise I think the
'for' loop could iterate
so fast that the device had no time to process the character)
In such a case, something like
for (i = 0; i < out; ++i) {
/* Wait for transmitter holding register to be empty */
do {
status = get( port, NS16550_LINE_STATUS);
} while ((status & SP_LSR_THOLD) == 0);
set( port, NS16550_TRANSMIT_BUFFER, buf [i]);
}
would be better?
Thanks,
Daniel.
--
Daniel F. Gutson
Chief Engineering Officer, SPD
San Lorenzo 47, 3rd Floor, Office 5
Córdoba, Argentina
Phone: +54 351 4217888 / +54 351 4218211
Skype: dgutson
in the writing interrupt mode (ns16550_write_support_int), we have
for (i = 0; i < out; ++i) {
set( port, NS16550_TRANSMIT_BUFFER, buf [i]);
}
Shouldn't we check, before writing to the register for the iterations
after the first one,
whether the character entered in the FIFO? (otherwise I think the
'for' loop could iterate
so fast that the device had no time to process the character)
In such a case, something like
for (i = 0; i < out; ++i) {
/* Wait for transmitter holding register to be empty */
do {
status = get( port, NS16550_LINE_STATUS);
} while ((status & SP_LSR_THOLD) == 0);
set( port, NS16550_TRANSMIT_BUFFER, buf [i]);
}
would be better?
Thanks,
Daniel.
--
Daniel F. Gutson
Chief Engineering Officer, SPD
San Lorenzo 47, 3rd Floor, Office 5
Córdoba, Argentina
Phone: +54 351 4217888 / +54 351 4218211
Skype: dgutson