UDI/16c550 - Init, not tested yet
[tpg/acess2.git] / UDI / drivers / uart_16c550 / uart16c550_pio.h
index 7a4e227..dc3f307 100644 (file)
@@ -1,5 +1,7 @@
 #define PIO_op_RI(op, reg, sz, val)    {UDI_PIO_##op+UDI_PIO_DIRECT+UDI_PIO_##reg, UDI_PIO_##sz##BYTE, val}
-#define PIO_MOV_RI1(reg, val)  PIO_op_RI(LOAD_IMM, reg, 2, val)
+#define PIO_MOV_RI2(reg, val)  PIO_op_RI(LOAD_IMM, reg, 2, val)
+#define PIO_ADD_RI2(reg, val)  PIO_op_RI(ADD, reg, 2, val)
+#define PIO_SUB_RI2(reg, val)  PIO_op_RI(SUB, reg, 2, val)
 #define PIO_OUT_RI1(reg, ofs)  PIO_op_RI(OUT, reg, 1, ofs)
 #define PIO_IN_RI1(reg, ofs)   PIO_op_RI(IN, reg, 1, ofs)
 
@@ -7,18 +9,41 @@
 // Reset
 // 
 udi_pio_trans_t        uart_pio_reset[] = {
+       // TODO: Programmable baud rate
+       //PIO_MOV_RI2(R0, 0x3F8),       // TODO: programmable port number
+       PIO_ADD_RI2(R0, 1),
+       PIO_OUT_RI1(R0, 0x00),  // +1 = 0x00 - Disable interrupts
+       PIO_ADD_RI2(R0, 2),
+       PIO_OUT_RI1(R0, 0x80),  // +3 = 0x80 - Enable DLAB
+       PIO_SUB_RI2(R0, 3),
+       PIO_OUT_RI1(R0, 0x01),  // +0 = 0x01 - Divisor low      (115200 baud)
+       PIO_ADD_RI2(R0, 1),
+       PIO_OUT_RI1(R0, 0x00),  // +1 = 0x00 - Divisor high
+       PIO_ADD_RI2(R0, 2),
+       PIO_OUT_RI1(R0, 0x03),  // +3 = 0x03 - 8n1
+       PIO_SUB_RI2(R0, 1),
+       PIO_OUT_RI1(R0, 0xC7),  // +2 = 0xC7 - Clear FIFO, 14-byte threshold
+       PIO_ADD_RI2(R0, 2),
+       PIO_OUT_RI1(R0, 0x0B),  // +4 = 0x0B - IRQs enabled, RTS/DSR set
+       PIO_SUB_RI2(R0, 3),
+       PIO_OUT_RI1(R0, 0x0B),  // +1 = 0x05 - Enable ERBFI (Rx Full), ELSI (Line Status)
        {UDI_PIO_END, UDI_PIO_2BYTE, 0}
 };
 //
 // Transmit
 //
 udi_pio_trans_t        uart_pio_tx[] = {
+       // while( (inb(SERIAL_PORT + 5) & 0x20) == 0 );
+       // outb(SERIAL_PORT, ch);
        {UDI_PIO_END, UDI_PIO_2BYTE, 0}
 };
 //
 // Recieve (interrupt)
 //
 udi_pio_trans_t        uart_pio_rx[] = {
+       // if( (inb(SERIAL_PORT+5) & 0x01) == 0 )
+       //      return -1;
+       // return inb(SERIAL_PORT); 
        {UDI_PIO_END, UDI_PIO_2BYTE, 0}
 };
 

UCC git Repository :: git.ucc.asn.au