1 #include "u.h" 2 #include "lib.h" 3 #include "mem.h" 4 #include "dat.h" 5 #include "fns.h" 6 #include "io.h" 7 8 enum 9 { 10 /* ctl[0] bits */ 11 Parity= 1<<0, 12 Even= 1<<1, 13 Stop2= 1<<2, 14 Bits8= 1<<3, 15 SCE= 1<<4, /* synchronous clock enable */ 16 RCE= 1<<5, /* rx on falling edge of clock */ 17 TCE= 1<<6, /* tx on falling edge of clock */ 18 19 /* ctl[3] bits */ 20 Rena= 1<<0, /* receiver enable */ 21 Tena= 1<<1, /* transmitter enable */ 22 Break= 1<<2, /* force TXD3 low */ 23 Rintena= 1<<3, /* enable receive interrupt */ 24 Tintena= 1<<4, /* enable transmitter interrupt */ 25 Loopback= 1<<5, /* loop back data */ 26 27 /* data bits */ 28 DEparity= 1<<8, /* parity error */ 29 DEframe= 1<<9, /* framing error */ 30 DEoverrun= 1<<10, /* overrun error */ 31 32 /* status[0] bits */ 33 Tint= 1<<0, /* transmit fifo half full interrupt */ 34 Rint0= 1<<1, /* receiver fifo 1/3-2/3 full */ 35 Rint1= 1<<2, /* receiver fifo not empty and receiver idle */ 36 Breakstart= 1<<3, 37 Breakend= 1<<4, 38 Fifoerror= 1<<5, /* fifo error */ 39 40 /* status[1] bits */ 41 Tbusy= 1<<0, /* transmitting */ 42 Rnotempty= 1<<1, /* receive fifo not empty */ 43 Tnotfull= 1<<2, /* transmit fifo not full */ 44 ParityError= 1<<3, 45 FrameError= 1<<4, 46 Overrun= 1<<5, 47 }; 48 49 Uartregs *uart3regs = (Uartregs*)UART3REGS; 50 51 52 /* 53 * for iprint, just write it 54 */ 55 void 56 serialputs(char *str, int n) 57 { 58 Uartregs *ur; 59 60 ur = uart3regs; 61 while(n-- > 0){ 62 /* wait for output ready */ 63 while((ur->status[1] & Tnotfull) == 0) 64 ; 65 ur->data = *str++; 66 } 67 while((ur->status[1] & Tbusy)) 68 ; 69 } 70