[274fa77] | 1 | /**************************************************************************** |
---|
| 2 | * File: sci.h |
---|
| 3 | * |
---|
| 4 | * Desc: This is the include file for the serial communications interface. |
---|
| 5 | * |
---|
| 6 | * Note: See bsp.h,confdefs.h,system.h for installing drivers into RTEMS. |
---|
| 7 | * |
---|
| 8 | ****************************************************************************/ |
---|
| 9 | |
---|
| 10 | #ifndef _sci_h_ |
---|
| 11 | #define _sci_h_ |
---|
| 12 | |
---|
| 13 | /******************************************************************************* |
---|
| 14 | IOCTL commands for the sci driver. |
---|
| 15 | I'm still working on these... |
---|
| 16 | *******************************************************************************/ |
---|
| 17 | |
---|
[da2fc6c0] | 18 | #define SCI_IOCTL_PARITY_NONE 0x00 /* no parity bit after the data bits */ |
---|
| 19 | #define SCI_IOCTL_PARITY_ODD 0x01 /* parity bit added after data bits */ |
---|
| 20 | #define SCI_IOCTL_PARITY_EVEN 0x02 /* parity bit added after data bits */ |
---|
| 21 | #define SCI_IOCTL_PARITY_MARK 0x03 /* parity bit is lo, -12 volts, logical 1 */ |
---|
| 22 | #define SCI_IOCTL_PARITY_SPACE 0x04 /* parity bit is hi, +12 volts, logical 0 */ |
---|
| 23 | #define SCI_IOCTL_PARITY_FORCED_ON 0x03 /* parity bit is forced hi or lo */ |
---|
| 24 | #define SCI_IOCTL_PARITY_FORCED_OFF 0x04 /* parity bit is forced hi or lo */ |
---|
[274fa77] | 25 | |
---|
[da2fc6c0] | 26 | #define SCI_IOCTL_BAUD_RATE 0x20 /* set the baud rate, arg is baud */ |
---|
[274fa77] | 27 | |
---|
[da2fc6c0] | 28 | #define SCI_IOCTL_DATA_BITS 0x30 /* set the data bits, arg is # bits */ |
---|
[274fa77] | 29 | |
---|
[da2fc6c0] | 30 | #define SCI_IOCTL_STOP_BITS_1 0x40 /* 1 stop bit after char frame */ |
---|
| 31 | #define SCI_IOCTL_STOP_BITS_2 0x41 /* 2 stop bit after char frame */ |
---|
[274fa77] | 32 | |
---|
[da2fc6c0] | 33 | #define SCI_IOCTL_MODE_NORMAL 0x50 /* normal operating mode */ |
---|
| 34 | #define SCI_IOCTL_MODE_LOOP 0x51 /* internal loopback mode */ |
---|
[274fa77] | 35 | |
---|
[da2fc6c0] | 36 | #define SCI_IOCTL_FLOW_NONE 0x60 /* no flow control */ |
---|
| 37 | #define SCI_IOCTL_FLOW_RTS_CTS 0x61 /* hardware flow control */ |
---|
[274fa77] | 38 | |
---|
[da2fc6c0] | 39 | #define SCI_IOCTL_SEND_BREAK 0x70 /* send an rs-232 break */ |
---|
[274fa77] | 40 | |
---|
[da2fc6c0] | 41 | #define SCI_IOCTL_MODE_1200 0x80 /* 1200,n,8,1 download mode */ |
---|
| 42 | #define SCI_IOCTL_MODE_9600 0x81 /* 9600,n,8,1 download mode */ |
---|
| 43 | #define SCI_IOCTL_MODE_9_BIT 0x82 /* 9600,forced,8,1 command mode */ |
---|
[d4b4664b] | 44 | |
---|
[274fa77] | 45 | |
---|
| 46 | /******************************************************************************* |
---|
| 47 | SCI Registers |
---|
| 48 | *******************************************************************************/ |
---|
| 49 | |
---|
[da2fc6c0] | 50 | /* SCI Control Register 0 (SCCR0) $FFFC08 |
---|
| 51 | |
---|
| 52 | 8 4 2 1 - 8 4 2 1 - 8 4 2 1 - 8 4 2 1 |
---|
| 53 | ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ |
---|
| 54 | | | | | | | | | | | | | | | | | |
---|
| 55 | | | | | | | | | | | | | | | | +----- 0 baud rate divisor |
---|
| 56 | | | | | | | | | | | | | | | +------- 1 baud rate divisor |
---|
| 57 | | | | | | | | | | | | | | +--------- 2 baud rate divisor |
---|
| 58 | | | | | | | | | | | | | +----------- 3 baud rate divisor |
---|
| 59 | | | | | | | | | | | | | |
---|
| 60 | | | | | | | | | | | | +--------------- 4 baud rate divisor |
---|
| 61 | | | | | | | | | | | +----------------- 5 baud rate divisor |
---|
| 62 | | | | | | | | | | +------------------- 6 baud rate divisor |
---|
| 63 | | | | | | | | | +--------------------- 7 baud rate divisor |
---|
| 64 | | | | | | | | | |
---|
| 65 | | | | | | | | +------------------------- 8 baud rate divisor |
---|
| 66 | | | | | | | +--------------------------- 9 baud rate divisor |
---|
| 67 | | | | | | +----------------------------- 10 baud rate divisor |
---|
| 68 | | | | | +------------------------------- 11 baud rate divisor |
---|
| 69 | | | | | |
---|
| 70 | | | | +----------------------------------- 12 baud rate divisor |
---|
| 71 | | | +------------------------------------- 13 unused |
---|
| 72 | | +--------------------------------------- 14 unused |
---|
| 73 | +----------------------------------------- 15 unused |
---|
| 74 | |
---|
| 75 | 0 0 0 0 - 0 0 0 0 - 0 0 0 0 - 0 1 0 0 reset value - (64k baud?) |
---|
| 76 | */ |
---|
[274fa77] | 77 | |
---|
| 78 | #define SCI_BAUD_57_6K 9 |
---|
| 79 | #define SCI_BAUD_38_4K 14 |
---|
| 80 | #define SCI_BAUD_19_2K 27 |
---|
| 81 | #define SCI_BAUD_9600 55 |
---|
| 82 | #define SCI_BAUD_4800 109 |
---|
| 83 | #define SCI_BAUD_2400 218 |
---|
| 84 | #define SCI_BAUD_1200 437 |
---|
[d4b4664b] | 85 | |
---|
[274fa77] | 86 | |
---|
[da2fc6c0] | 87 | /* SCI Control Register 1 (SCCR1) $FFFC0A |
---|
| 88 | |
---|
| 89 | 8 4 2 1 - 8 4 2 1 - 8 4 2 1 - 8 4 2 1 |
---|
| 90 | ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ |
---|
| 91 | | | | | | | | | | | | | | | | | |
---|
| 92 | | | | | | | | | | | | | | | | +----- 0 send a break |
---|
| 93 | | | | | | | | | | | | | | | +------- 1 rcvr wakeup mode |
---|
| 94 | | | | | | | | | | | | | | +--------- 2 rcvr enable |
---|
| 95 | | | | | | | | | | | | | +----------- 3 xmtr enable |
---|
| 96 | | | | | | | | | | | | | |
---|
| 97 | | | | | | | | | | | | +--------------- 4 idle line intr enable |
---|
| 98 | | | | | | | | | | | +----------------- 5 rcvr intr enable |
---|
| 99 | | | | | | | | | | +------------------- 6 xmit complete intr enable |
---|
| 100 | | | | | | | | | +--------------------- 7 xmtr intr enable |
---|
| 101 | | | | | | | | | |
---|
| 102 | | | | | | | | +------------------------- 8 wakeup on address mark |
---|
| 103 | | | | | | | +--------------------------- 9 mode 1=9 bits, 0=8 bits |
---|
| 104 | | | | | | +----------------------------- 10 parity enable 1=on, 0=off |
---|
| 105 | | | | | +------------------------------- 11 parity type 1=odd, 0=even |
---|
| 106 | | | | | |
---|
| 107 | | | | +----------------------------------- 12 idle line select |
---|
| 108 | | | +------------------------------------- 13 wired-or mode |
---|
| 109 | | +--------------------------------------- 14 loop mode |
---|
| 110 | +----------------------------------------- 15 unused |
---|
[d4b4664b] | 111 | |
---|
[da2fc6c0] | 112 | 0 0 0 0 - 0 0 0 0 - 0 0 0 0 - 0 0 0 0 reset value |
---|
| 113 | */ |
---|
| 114 | |
---|
| 115 | #define SCI_SEND_BREAK 0x0001 /* 0000-0000-0000-0001 */ |
---|
| 116 | #define SCI_RCVR_WAKEUP 0x0002 /* 0000-0000-0000-0010 */ |
---|
| 117 | #define SCI_ENABLE_RCVR 0x0004 /* 0000-0000-0000-0100 */ |
---|
| 118 | #define SCI_ENABLE_XMTR 0x0008 /* 0000-0000-0000-1000 */ |
---|
| 119 | |
---|
| 120 | #define SCI_DISABLE_RCVR 0xFFFB /* 1111-1111-1111-1011 */ |
---|
| 121 | #define SCI_DISABLE_XMTR 0xFFF7 /* 1111-1111-1111-0111 */ |
---|
| 122 | |
---|
| 123 | #define SCI_ENABLE_INT_IDLE 0x0010 /* 0000-0000-0001-0000 */ |
---|
| 124 | #define SCI_ENABLE_INT_RX 0x0020 /* 0000-0000-0010-0000 */ |
---|
| 125 | #define SCI_ENABLE_INT_TX_DONE 0x0040 /* 0000-0000-0100-0000 */ |
---|
| 126 | #define SCI_ENABLE_INT_TX 0x0080 /* 0000-0000-1000-0000 */ |
---|
| 127 | |
---|
| 128 | #define SCI_DISABLE_INT_ALL 0xFF00 /* 1111-1111-0000-0000 ??? */ |
---|
| 129 | |
---|
| 130 | #define SCI_DISABLE_INT_RX 0xFFDF /* 1111-1111-1101-1111 */ |
---|
| 131 | #define SCI_CLEAR_RX_INT 0xFFBF /* 1111-1111-1011-1111 */ |
---|
| 132 | #define SCI_DISABLE_INT_TX 0xFF7F /* 1111-1111-0111-1111 */ |
---|
| 133 | #define SCI_CLEAR_TDRE 0xFEFF /* 1111-1110-1111-1111 */ |
---|
| 134 | |
---|
| 135 | #define SCI_RCVR_WAKE_ON_MARK 0x0100 /* 0000-0001-0000-0000 */ |
---|
| 136 | #define SCI_9_DATA_BITS 0x0200 /* 0000-0010-0000-0000 */ |
---|
| 137 | #define SCI_PARITY_ENABLE 0x0400 /* 0000-0100-0000-0000 */ |
---|
| 138 | #define SCI_PARITY_ODD 0x0800 /* 0000-1000-0000-0000 */ |
---|
| 139 | |
---|
| 140 | #define SCI_RCVR_WAKE_ON_IDLE 0xFEFF /* 1111-1110-1111-1111 */ |
---|
| 141 | #define SCI_8_DATA_BITS 0xFDFF /* 1111-1101-1111-1111 */ |
---|
| 142 | #define SCI_PARITY_DISABLE 0xFBFF /* 1111-1011-1111-1111 */ |
---|
| 143 | #define SCI_PARITY_EVEN 0xF7FF /* 1111-0111-1111-1111 */ |
---|
| 144 | |
---|
| 145 | #define SCI_PARITY_NONE 0xF3FF /* 1111-0011-1111-1111 */ |
---|
| 146 | |
---|
| 147 | #define SCI_IDLE_LINE_LONG 0x1000 /* 0001-0000-0000-0000 */ |
---|
| 148 | #define SCI_TXD_OPEN_DRAIN 0x2000 /* 0010-0000-0000-0000 */ |
---|
| 149 | #define SCI_LOOPBACK_MODE 0x4000 /* 0100-0000-0000-0000 */ |
---|
| 150 | #define SCI_SCCR1_UNUSED 0x8000 /* 1000-0000-0000-0000 */ |
---|
[d4b4664b] | 151 | |
---|
[274fa77] | 152 | |
---|
[da2fc6c0] | 153 | /* SCI Status Register (SCSR) $FFFC0C |
---|
| 154 | |
---|
| 155 | 8 4 2 1 - 8 4 2 1 - 8 4 2 1 - 8 4 2 1 |
---|
| 156 | ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ |
---|
| 157 | | | | | | | | | | | | | | | | | |
---|
| 158 | | | | | | | | | | | | | | | | +----- 0 PF - parity error |
---|
| 159 | | | | | | | | | | | | | | | +------- 1 FE - framing error |
---|
| 160 | | | | | | | | | | | | | | +--------- 2 NF - noise flag |
---|
| 161 | | | | | | | | | | | | | +----------- 3 OR - overrun flag |
---|
| 162 | | | | | | | | | | | | | |
---|
| 163 | | | | | | | | | | | | +--------------- 4 IDLE - idle line detected |
---|
| 164 | | | | | | | | | | | +----------------- 5 RAF - rcvr active flag |
---|
| 165 | | | | | | | | | | +------------------- 6 RDRF - rcv data reg full |
---|
| 166 | | | | | | | | | +--------------------- 7 TC - xmt complete flag |
---|
| 167 | | | | | | | | | |
---|
| 168 | | | | | | | | +------------------------- 8 TDRE - xmt data reg empty |
---|
| 169 | | | | | | | +--------------------------- 9 always zero |
---|
| 170 | | | | | | +----------------------------- 10 always zero |
---|
| 171 | | | | | +------------------------------- 11 always zero |
---|
| 172 | | | | | |
---|
| 173 | | | | +----------------------------------- 12 always zero |
---|
| 174 | | | +------------------------------------- 13 always zero |
---|
| 175 | | +--------------------------------------- 14 always zero |
---|
| 176 | +----------------------------------------- 15 always zero |
---|
[d4b4664b] | 177 | |
---|
[da2fc6c0] | 178 | 0 0 0 0 - 0 0 0 1 - 1 0 0 0 - 0 0 0 0 reset value |
---|
| 179 | */ |
---|
| 180 | |
---|
| 181 | #define SCI_ERROR_PARITY 0x0001 /* 0000-0000-0000-0001 */ |
---|
| 182 | #define SCI_ERROR_FRAMING 0x0002 /* 0000-0000-0000-0010 */ |
---|
| 183 | #define SCI_ERROR_NOISE 0x0004 /* 0000-0000-0000-0100 */ |
---|
| 184 | #define SCI_ERROR_OVERRUN 0x0008 /* 0000-0000-0000-1000 */ |
---|
| 185 | |
---|
| 186 | #define SCI_IDLE_LINE 0x0010 /* 0000-0000-0001-0000 */ |
---|
| 187 | #define SCI_RCVR_ACTIVE 0x0020 /* 0000-0000-0010-0000 */ |
---|
| 188 | #define SCI_RCVR_READY 0x0040 /* 0000-0000-0100-0000 */ |
---|
| 189 | #define SCI_XMTR_IDLE 0x0080 /* 0000-0000-1000-0000 */ |
---|
| 190 | |
---|
| 191 | #define SCI_CLEAR_RX_INT 0xFFBF /* 1111-1111-1011-1111 */ |
---|
| 192 | |
---|
| 193 | #define SCI_XMTR_READY 0x0100 /* 0000-0001-0000-0000 */ |
---|
| 194 | |
---|
| 195 | #define SCI_CLEAR_TDRE 0xFEFF /* 1111-1110-1111-1111 */ |
---|
| 196 | |
---|
| 197 | #define SCI_XMTR_AVAILABLE 0x0180 /* 0000-0001-1000-0000 */ |
---|
[274fa77] | 198 | |
---|
[d4b4664b] | 199 | |
---|
[274fa77] | 200 | |
---|
| 201 | /******************************************************************************* |
---|
| 202 | Function prototypes |
---|
| 203 | *******************************************************************************/ |
---|
| 204 | |
---|
| 205 | #ifdef __cplusplus |
---|
| 206 | extern "C" { |
---|
| 207 | #endif |
---|
| 208 | |
---|
[da2fc6c0] | 209 | /* look at console_open to see how this is called */ |
---|
[274fa77] | 210 | |
---|
[f74d9f1f] | 211 | const rtems_termios_callbacks * SciGetTermiosHandlers( int32_t polled ); |
---|
[274fa77] | 212 | |
---|
| 213 | /* SCI interrupt */ |
---|
| 214 | |
---|
[da2fc6c0] | 215 | /*rtems_isr SciIsr( rtems_vector_number vector ); */ |
---|
[274fa77] | 216 | |
---|
[da2fc6c0] | 217 | /*int32_t SciOpenPolled ( int32_t major, int32_t minor, void *arg ); */ |
---|
| 218 | /*int32_t SciOpenInterrupt ( int32_t major, int32_t minor, void *arg ); */ |
---|
[274fa77] | 219 | |
---|
[da2fc6c0] | 220 | /*int32_t SciClose ( int32_t major, int32_t minor, void *arg ); */ |
---|
[274fa77] | 221 | |
---|
[da2fc6c0] | 222 | /*int32_t SciWritePolled ( int32_t minor, const char *buf, int32_t len ); */ |
---|
| 223 | /*int32_t SciWriteInterrupt( int32_t minor, const char *buf, int32_t len ); */ |
---|
[274fa77] | 224 | |
---|
[da2fc6c0] | 225 | /*int32_t SciReadPolled ( int32_t minor ); */ |
---|
[274fa77] | 226 | |
---|
[da2fc6c0] | 227 | /*int32_t SciSetAttributes ( int32_t minor, const struct termios *t ); */ |
---|
[274fa77] | 228 | |
---|
| 229 | #ifdef __cplusplus |
---|
| 230 | } |
---|
| 231 | #endif |
---|
| 232 | |
---|
[da2fc6c0] | 233 | #endif /* _sci_h_ */ |
---|