00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #include <cfg/os.h>
00041 #include <cfg/clock.h>
00042 #include <cfg/arch.h>
00043 #include <cfg/uart.h>
00044 #include <cfg/arch/gpio.h>
00045
00046 #include <string.h>
00047
00048 #include <sys/atom.h>
00049 #include <sys/event.h>
00050 #include <sys/timer.h>
00051
00052 #include <dev/irqreg.h>
00053 #include <dev/usartat91.h>
00054
00055 #ifndef NUT_CPU_FREQ
00056 #ifdef NUT_PLL_CPUCLK
00057 #include <dev/cy2239x.h>
00058 #else
00059 #define NUT_CPU_FREQ 73728000UL
00060 #endif
00061 #endif
00062
00063
00064
00065
00066 static uint32_t At91UsartGetSpeed(void);
00067 static int At91UsartSetSpeed(uint32_t rate);
00068 static uint8_t At91UsartGetDataBits(void);
00069 static int At91UsartSetDataBits(uint8_t bits);
00070 static uint8_t At91UsartGetParity(void);
00071 static int At91UsartSetParity(uint8_t mode);
00072 static uint8_t At91UsartGetStopBits(void);
00073 static int At91UsartSetStopBits(uint8_t bits);
00074 static uint32_t At91UsartGetFlowControl(void);
00075 static int At91UsartSetFlowControl(uint32_t flags);
00076 static uint32_t At91UsartGetStatus(void);
00077 static int At91UsartSetStatus(uint32_t flags);
00078 static uint8_t At91UsartGetClockMode(void);
00079 static int At91UsartSetClockMode(uint8_t mode);
00080 static void At91UsartTxStart(void);
00081 static void At91UsartRxStart(void);
00082 static int At91UsartInit(void);
00083 static int At91UsartDeinit(void);
00084
00089
00093 static USARTDCB dcb_usart1 = {
00094 0,
00095 0,
00096 0,
00097 0,
00098 {0, 0, 0, 0, 0, 0, 0, 0},
00099 {0, 0, 0, 0, 0, 0, 0, 0},
00100 0,
00101 At91UsartInit,
00102 At91UsartDeinit,
00103 At91UsartTxStart,
00104 At91UsartRxStart,
00105 At91UsartSetFlowControl,
00106 At91UsartGetFlowControl,
00107 At91UsartSetSpeed,
00108 At91UsartGetSpeed,
00109 At91UsartSetDataBits,
00110 At91UsartGetDataBits,
00111 At91UsartSetParity,
00112 At91UsartGetParity,
00113 At91UsartSetStopBits,
00114 At91UsartGetStopBits,
00115 At91UsartSetStatus,
00116 At91UsartGetStatus,
00117 At91UsartSetClockMode,
00118 At91UsartGetClockMode,
00119 };
00120
00136 NUTDEVICE devUsartAt911 = {
00137 0,
00138 {'u', 'a', 'r', 't', '1', 0, 0, 0, 0},
00139 IFTYP_CHAR,
00140 1,
00141 0,
00142 0,
00143 &dcb_usart1,
00144 UsartInit,
00145 UsartIOCtl,
00146 UsartRead,
00147 UsartWrite,
00148 UsartOpen,
00149 UsartClose,
00150 UsartSize
00151 };
00152
00156
00157
00158 #if defined(UART1_MODEM_CONTROL)
00159 #define UART_MODEM_CONTROL
00160 #define UART_HARDWARE_HANDSHAKE
00161 #elif defined(UART1_HARDWARE_HANDSHAKE)
00162 #define UART_HARDWARE_HANDSHAKE
00163 #endif
00164
00165
00166
00167
00168 #if defined(MCU_AT91SAM9260) || defined(MCU_AT91SAM9XE)
00169
00170 #define UART_RXTX_PINS (_BV(PB7_RXD1_A) | _BV(PB6_TXD1_A))
00171 #define UART_HDX_PIN _BV(PB28_RTS1_A)
00172 #define UART_RTS_PIN _BV(PB28_RTS1_A)
00173 #define UART_CTS_PIN _BV(PB29_CTS1_A)
00174
00175 #define UART_RXTX_PINS_ENABLE() outr(PIOB_ASR, UART_RXTX_PINS); \
00176 outr(PIOB_PDR, UART_RXTX_PINS)
00177
00178 #if defined(UART_HARDWARE_HANDSHAKE)
00179 #define UART_HDX_PIN_ENABLE() outr(PIOB_ASR, UART_HDX_PIN); \
00180 outr(PIOB_PDR, UART_HDX_PIN)
00181 #define UART_RTS_PIN_ENABLE() outr(PIOB_ASR, UART_RTS_PIN); \
00182 outr(PIOB_PDR, UART_RTS_PIN)
00183 #define UART_CTS_PIN_ENABLE() outr(PIOB_ASR, UART_CTS_PIN); \
00184 outr(PIOB_PDR, UART_CTS_PIN)
00185 #endif
00186
00187
00188
00189
00190 #elif defined(MCU_AT91SAM7S) || defined(MCU_AT91SAM7SE)
00191
00192 #define UART_RXTX_PINS (_BV(PA21_RXD1_A) | _BV(PA22_TXD1_A))
00193 #define UART_HDX_PIN _BV(PA24_RTS1_A)
00194 #define UART_RTS_PIN _BV(PA24_RTS1_A)
00195 #define UART_CTS_PIN _BV(PA25_CTS1_A)
00196 #define UART_MODEM_PINS (_BV(PB27_DTR1_A) | _BV(PB28_DSR1_A) | _BV(PB26_DCD1_A) | _BV(PB29_RI1_A))
00197
00198 #define UART_RXTX_PINS_ENABLE() outr(PIOA_ASR, UART_RXTX_PINS); \
00199 outr(PIOA_PDR, UART_RXTX_PINS)
00200
00201 #if defined(UART_HARDWARE_HANDSHAKE)
00202 #define UART_HDX_PIN_ENABLE() outr(PIOA_ASR, UART_HDX_PIN); \
00203 outr(PIOA_PDR, UART_HDX_PIN)
00204 #define UART_RTS_PIN_ENABLE() outr(PIOA_ASR, UART_RTS_PIN); \
00205 outr(PIOA_PDR, UART_RTS_PIN)
00206 #define UART_CTS_PIN_ENABLE() outr(PIOA_ASR, UART_CTS_PIN); \
00207 outr(PIOA_PDR, UART_CTS_PIN)
00208 #endif
00209
00210 #if defined(UART_MODEM_CONTROL)
00211 #define UART_MODEM_PINS_ENABLE() outr(PIOB_ASR, UART_MODEM_PINS); \
00212 outr(PIOB_PDR, UART_MODEM_PINS)
00213 #endif
00214
00215
00216
00217
00218 #elif defined(MCU_AT91SAM7X)
00219 #define UART_RXTX_PINS (_BV(PA5_RXD1_A) | _BV(PA6_TXD1_A))
00220 #define UART_HDX_PIN _BV(PA8_RTS1_A)
00221 #define UART_RTS_PIN _BV(PA8_RTS1_A)
00222 #define UART_CTS_PIN _BV(PA9_CTS1_A)
00223 #define UART_MODEM_PINS (_BV(PB25_DTR1_B) | _BV(PB24_DSR1_B) | _BV(PB23_DCD1_B) | _BV(PB26_RI1_B))
00224
00225 #define UART_RXTX_PINS_ENABLE() outr(PIOA_ASR, UART_RXTX_PINS); \
00226 outr(PIOA_PDR, UART_RXTX_PINS)
00227
00228 #if defined(UART_HARDWARE_HANDSHAKE)
00229 #define UART_HDX_PIN_ENABLE() outr(PIOA_ASR, UART_HDX_PIN); \
00230 outr(PIOA_PDR, UART_HDX_PIN)
00231 #define UART_RTS_PIN_ENABLE() outr(PIOA_ASR, UART_RTS_PIN); \
00232 outr(PIOA_PDR, UART_RTS_PIN)
00233 #define UART_CTS_PIN_ENABLE() outr(PIOA_ASR, UART_CTS_PIN); \
00234 outr(PIOA_PDR, UART_CTS_PIN)
00235 #endif
00236
00237 #if defined(UART_MODEM_CONTROL)
00238 #define UART_MODEM_PINS_ENABLE() outr(PIOB_BSR, UART_MODEM_PINS); \
00239 outr(PIOB_PDR, UART_MODEM_PINS)
00240 #endif
00241
00242
00243
00244
00245 #elif defined(MCU_AT91R40008)
00246
00247 #define UART_RXTX_PINS (_BV(P22_RXD1) | _BV(P21_TXD1))
00248
00249 #define UART_RXTX_PINS_ENABLE() outr(PIO_PDR, UART_RXTX_PINS)
00250
00251
00252
00253
00254
00255
00256
00257
00258 #endif
00259
00260
00261
00262
00263 #if defined(ETHERNUT3)
00264 #define UART_USES_NPL 1
00265 #endif
00266
00267
00268
00269
00270
00271 #if defined(UART1_HDX_BIT)
00272 #define UART_HDX_BIT UART1_HDX_BIT
00273 #endif
00274 #if defined(UART1_HDX_PIO_ID)
00275 #define UART_HDX_PIO_ID UART1_HDX_PIO_ID
00276 #endif
00277
00278 #if defined(UART1_RTS_BIT)
00279 #define UART_RTS_BIT UART1_RTS_BIT
00280 #endif
00281 #if defined(UART1_RTS_PIO_ID)
00282 #define UART_RTS_PIO_ID UART1_RTS_PIO_ID
00283 #endif
00284
00285 #if defined(UART1_CTS_BIT)
00286 #define UART_CTS_BIT UART1_CTS_BIT
00287 #endif
00288 #if defined(UART1_CTS_PIO_ID)
00289 #define UART_CTS_PIO_ID UART1_CTS_PIO_ID
00290 #endif
00291 #if defined(UART0_CTS_SIGNAL)
00292 #define UART_CTS_SIGNAL UART0_CTS_SIGNAL
00293 #endif
00294
00295 #if defined(UART1_INIT_BAUDRATE)
00296 #define UART_INIT_BAUDRATE UART1_INIT_BAUDRATE
00297 #endif
00298
00299 #define USARTn_BASE USART1_BASE
00300 #define US_ID US1_ID
00301 #define SIG_UART sig_UART1
00302 #define dcb_usart dcb_usart1
00303
00304 #include "usartat91.c"