44,7 → 44,7 |
|
struct SCom_Access_Type SCom_Access; |
|
unsigned SCom_Error; |
unsigned SCom_Error[4]; |
|
struct TX_data_t{ |
int ptr; |
52,7 → 52,7 |
BYTE buf[100]; |
}; |
|
static struct TX_data_t SCom_TX_data; |
static struct TX_data_t SCom_TX_data[4]; |
|
/***************************** |
* Functions |
143,7 → 143,7 |
|
f = kern_fsave(); |
|
SCom_Error = 0; |
SCom_Error[port] = 0; |
handler_set(com_irq[port], com_irq_sel, NIL, TRUE); |
com_irq_disable(port, ALL_IRQ); /* Disable interrupts */ |
|
172,11 → 172,11 |
f = kern_fsave(); |
|
/* Transmit first byte of message */ |
SCom_TX_data.ptr = 0; |
SCom_TX_data.len = len; |
SCom_TX_data[port].ptr = 0; |
SCom_TX_data[port].len = len; |
if (len < 100) { |
memcpy(SCom_TX_data.buf, m, len); |
com_write(port, THR, SCom_TX_data.buf[SCom_TX_data.ptr++]); |
memcpy(SCom_TX_data[port].buf, m, len); |
com_write(port, THR, SCom_TX_data[port].buf[SCom_TX_data[port].ptr++]); |
com_irq_enable(port, THRE_IRQ); |
} |
|
192,8 → 192,8 |
|
void THRE_handler (unsigned port) /* Transmit Data Register Ready for next byte */ |
{ |
if (SCom_TX_data.ptr < SCom_TX_data.len) |
com_write(port, THR, SCom_TX_data.buf[SCom_TX_data.ptr++]); |
if (SCom_TX_data[port].ptr < SCom_TX_data[port].len) |
com_write(port, THR, SCom_TX_data[port].buf[SCom_TX_data[port].ptr++]); |
else |
{ |
com_irq_disable(port, THRE_IRQ); |
209,7 → 209,7 |
|
void LSR_handler (unsigned port) /* break = 8, frame = 4, parity = 2, RBR overrun = 1*/ |
{ |
SCom_Error = (com_read(port, LSR) & (bit4|bit3|bit2|bit1) ) >> 1; |
SCom_Error[port] = (com_read(port, LSR) & (bit4|bit3|bit2|bit1) ) >> 1; |
com_irq_disable(port, ALL_IRQ); /* Disable all interrupts */ |
SCom_Access.confirm(port, COM_ERROR); |
} |