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 #define NUT_DEPRECATED
00041
00042 #include <cfg/os.h>
00043 #include <cfg/clock.h>
00044 #include <cfg/arch.h>
00045 #include <cfg/uart.h>
00046
00047 #include <string.h>
00048
00049 #include <sys/atom.h>
00050 #include <sys/event.h>
00051 #include <sys/timer.h>
00052
00053 #include <dev/irqreg.h>
00054 #include <dev/debug.h>
00055 #include <arch/arm/atmel/at91_dbgu.h>
00056 #include <dev/usartat91.h>
00057
00058 #ifndef NUT_CPU_FREQ
00059 #ifdef NUT_PLL_CPUCLK
00060 #include <dev/cy2239x.h>
00061 #else
00062 #define NUT_CPU_FREQ 73728000UL
00063 #endif
00064 #endif
00065
00066
00067
00068
00069
00070
00071
00072 static uint32_t At91UsartGetSpeed(void);
00073 static int At91UsartSetSpeed(uint32_t rate);
00074 static uint8_t At91UsartGetDataBits(void);
00075 static int At91UsartSetDataBits( uint8_t bits);
00076 static uint8_t At91UsartGetParity(void);
00077 static int At91UsartSetParity(uint8_t mode);
00078 static uint8_t At91UsartGetStopBits(void);
00079 static int At91UsartSetStopBits(uint8_t bits);
00080 static uint32_t At91UsartGetStatus(void);
00081 static int At91UsartSetStatus(uint32_t flags);
00082 static uint8_t At91UsartGetClockMode(void);
00083 static int At91UsartSetClockMode(uint8_t mode);
00084 static void At91UsartTxStart(void);
00085 static void At91UsartRxStart(void);
00086 static int At91UsartInit(void);
00087 static int At91UsartDeinit(void);
00088 static uint32_t At91UsartGetFlowControl(void);
00089 static int At91UsartSetFlowControl(uint32_t flags);
00090
00091 extern IRQ_HANDLER sig_DBGU;
00092
00097
00101 static USARTDCB dcb_dbgu = {
00102 0,
00103 0,
00104 0,
00105 0,
00106 {0, 0, 0, 0, 0, 0, 0, 0},
00107 {0, 0, 0, 0, 0, 0, 0, 0},
00108 0,
00109 At91UsartInit,
00110 At91UsartDeinit,
00111 At91UsartTxStart,
00112 At91UsartRxStart,
00113 At91UsartSetFlowControl,
00114 At91UsartGetFlowControl,
00115 At91UsartSetSpeed,
00116 At91UsartGetSpeed,
00117 At91UsartSetDataBits,
00118 At91UsartGetDataBits,
00119 At91UsartSetParity,
00120 At91UsartGetParity,
00121 At91UsartSetStopBits,
00122 At91UsartGetStopBits,
00123 At91UsartSetStatus,
00124 At91UsartGetStatus,
00125 At91UsartSetClockMode,
00126 At91UsartGetClockMode,
00127 };
00128
00144 NUTDEVICE devDbguAt91 = {
00145 0,
00146 {'u', 'a', 'r', 't', 'd', 0, 0, 0, 0},
00147 IFTYP_CHAR,
00148 DBGU_BASE,
00149 0,
00150 0,
00151 &dcb_dbgu,
00152 UsartInit,
00153 UsartIOCtl,
00154 UsartRead,
00155 UsartWrite,
00156 UsartOpen,
00157 UsartClose,
00158 UsartSize
00159 };
00160
00164
00165
00166
00167
00168
00169
00170
00171 #undef UART_MODEM_CONTROL
00172 #undef UART_HARDWARE_HANDSHAKE
00173
00174 #if defined(UART_MODEM_CONTROL)
00175 #define UART_MODEM_CONTROL
00176 #define UART_HARDWARE_HANDSHAKE
00177 #elif defined(UART_HARDWARE_HANDSHAKE)
00178 #define UART_HARDWARE_HANDSHAKE
00179 #endif
00180
00181
00182
00183
00184 #if defined(MCU_AT91SAM9260) || defined(MCU_AT91SAM9XE)
00185
00186 #define UART_RXTX_PINS (_BV(PB14_DRXD_A) | _BV(PB15_DTXD_A))
00187 #undef UART_HDX_PIN
00188 #undef UART_RTS_PIN
00189 #undef UART_CTS_PIN
00190 #undef UART_MODEM_PINS
00191
00192 #define UART_RXTX_PINS_ENABLE() outr(PIOB_ASR, UART_RXTX_PINS); \
00193 outr(PIOB_PDR, UART_RXTX_PINS)
00194
00195 #if defined(UART_HARDWARE_HANDSHAKE)
00196 #define UART_HDX_PIN_ENABLE() outr(PIOB_ASR, UART_HDX_PIN); \
00197 outr(PIOB_PDR, UART_HDX_PIN)
00198 #define UART_RTS_PIN_ENABLE() outr(PIOB_ASR, UART_RTS_PIN); \
00199 outr(PIOB_PDR, UART_RTS_PIN)
00200 #define UART_CTS_PIN_ENABLE() outr(PIOB_ASR, UART_CTS_PIN); \
00201 outr(PIOB_PDR, UART_CTS_PIN)
00202 #endif
00203
00204 #if defined(UART_MODEM_CONTROL)
00205 #define UART_MODEM_PINS_ENABLE() outr(PIOB_ASR, UART_MODEM_PINS); \
00206 outr(PIOB_PDR, UART_MODEM_PINS)
00207 #endif
00208
00209
00210
00211
00212 #elif defined(MCU_AT91SAM7S) || defined(MCU_AT91SAM7SE)
00213
00214 #define UART_RXTX_PINS (_BV(PA9_DRXD_A) | _BV(PA10_DTXD_A))
00215 #undef UART_HDX_PIN
00216 #undef UART_RTS_PIN
00217 #undef UART_CTS_PIN
00218
00219 #define UART_RXTX_PINS_ENABLE() outr(PIOA_ASR, UART_RXTX_PINS); \
00220 outr(PIOA_PDR, UART_RXTX_PINS)
00221
00222 #if defined(UART_HARDWARE_HANDSHAKE)
00223 #define UART_HDX_PIN_ENABLE() outr(PIOA_ASR, UART_HDX_PIN); \
00224 outr(PIOA_PDR, UART_HDX_PIN)
00225 #define UART_RTS_PIN_ENABLE() outr(PIOA_ASR, UART_RTS_PIN); \
00226 outr(PIOA_PDR, UART_RTS_PIN)
00227 #define UART_CTS_PIN_ENABLE() outr(PIOA_ASR, UART_CTS_PIN); \
00228 outr(PIOA_PDR, UART_CTS_PIN)
00229 #endif
00230
00231
00232
00233
00234 #elif defined(MCU_AT91SAM7X)
00235
00236 #define UART_RXTX_PINS (_BV(PA27_DRXD_A) | _BV(PA28_DTXD_A))
00237 #undef UART_HDX_PIN
00238 #undef UART_RTS_PIN
00239 #undef UART_CTS_PIN
00240
00241 #define UART_RXTX_PINS_ENABLE() outr(PIOA_ASR, UART_RXTX_PINS); \
00242 outr(PIOA_PDR, UART_RXTX_PINS)
00243
00244 #if defined(UART_HARDWARE_HANDSHAKE)
00245 #define UART_HDX_PIN_ENABLE() outr(PIOA_ASR, UART_HDX_PIN); \
00246 outr(PIOA_PDR, UART_HDX_PIN)
00247 #define UART_RTS_PIN_ENABLE() outr(PIOA_ASR, UART_RTS_PIN); \
00248 outr(PIOA_PDR, UART_RTS_PIN)
00249 #define UART_CTS_PIN_ENABLE() outr(PIOA_ASR, UART_CTS_PIN); \
00250 outr(PIOA_PDR, UART_CTS_PIN)
00251 #endif
00252 #endif
00253
00254
00255
00256
00257 #if defined(ETHERNUT3)
00258 #define UART_USES_NPL 1
00259 #endif
00260
00261
00262
00263
00264 #if defined(UART0_CTS_BIT) && !defined(UART0_CTS_SIGNAL)
00265 #if UART0_CTS_PIO_ID == PIOA_ID
00266 #define UART0_CTS_SIGNAL sig_GPIO1
00267 #elif UART0_CTS_PIO_ID == PIOB_ID
00268 #define UART0_CTS_SIGNAL sig_GPIO2
00269 #elif UART0_CTS_PIO_ID == PIOC_ID
00270 #define UART0_CTS_SIGNAL sig_GPIO3
00271 #else
00272 #define UART0_CTS_SIGNAL sig_GPIO
00273 #endif
00274 #endif
00275
00276
00277
00278
00279
00280 #if defined(UARTD_HDX_BIT)
00281 #define UART_HDX_BIT UARTD_HDX_BIT
00282 #endif
00283 #if defined(UARTD_HDX_PIO_ID)
00284 #define UART_HDX_PIO_ID UARTD_HDX_PIO_ID
00285 #endif
00286
00287 #if defined(UARTD_RTS_BIT)
00288 #define UART_RTS_BIT UARTD_RTS_BIT
00289 #endif
00290 #if defined(UARTD_RTS_PIO_ID)
00291 #define UART_RTS_PIO_ID UARTD_RTS_PIO_ID
00292 #endif
00293
00294 #if defined(UARTD_CTS_BIT)
00295 #define UART_CTS_BIT UARTD_CTS_BIT
00296 #endif
00297 #if defined(UARTD_CTS_PIO_ID)
00298 #define UART_CTS_PIO_ID UARTD_CTS_PIO_ID
00299 #endif
00300 #if defined(UARTD_CTS_SIGNAL)
00301 #define UART_CTS_SIGNAL UARTD_CTS_SIGNAL
00302 #endif
00303
00304 #if defined(UARTD_INIT_BAUDRATE)
00305 #define UART_INIT_BAUDRATE UARTD_INIT_BAUDRATE
00306 #endif
00307
00308 #define USARTn_BASE DBGU_BASE
00309 #define US_ID SYSC_ID
00310 #define SIG_UART syssig_DBGU
00311 #define dcb_usart dcb_dbgu
00312
00313 #include "usartat91.c"