00001
00036
00037
00038
00039
00040
00041 #include <cfg/os.h>
00042 #include <cfg/clock.h>
00043 #include <cfg/arch.h>
00044 #include <cfg/uart.h>
00045 #include <cfg/arch/gpio.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/usartavr32.h>
00055 #include <dev/gpio.h>
00056
00057
00058
00059
00060 static uint32_t Avr32UsartGetSpeed(void);
00061 static int Avr32UsartSetSpeed(uint32_t rate);
00062 static uint8_t Avr32UsartGetDataBits(void);
00063 static int Avr32UsartSetDataBits(uint8_t bits);
00064 static uint8_t Avr32UsartGetParity(void);
00065 static int Avr32UsartSetParity(uint8_t mode);
00066 static uint8_t Avr32UsartGetStopBits(void);
00067 static int Avr32UsartSetStopBits(uint8_t bits);
00068 static uint32_t Avr32UsartGetFlowControl(void);
00069 static int Avr32UsartSetFlowControl(uint32_t flags);
00070 static uint32_t Avr32UsartGetStatus(void);
00071 static int Avr32UsartSetStatus(uint32_t flags);
00072 static uint8_t Avr32UsartGetClockMode(void);
00073 static int Avr32UsartSetClockMode(uint8_t mode);
00074 static void Avr32UsartTxStart(void);
00075 static void Avr32UsartRxStart(void);
00076 static int Avr32UsartInit(void);
00077 static int Avr32UsartDeinit(void);
00078
00083
00087 static USARTDCB dcb_usart0 = {
00088 0,
00089 0,
00090 0,
00091 0,
00092 {0, 0, 0, 0, 0, 0, 0, 0},
00093 {0, 0, 0, 0, 0, 0, 0, 0},
00094 0,
00095 Avr32UsartInit,
00096 Avr32UsartDeinit,
00097 Avr32UsartTxStart,
00098 Avr32UsartRxStart,
00099 Avr32UsartSetFlowControl,
00100 Avr32UsartGetFlowControl,
00101 Avr32UsartSetSpeed,
00102 Avr32UsartGetSpeed,
00103 Avr32UsartSetDataBits,
00104 Avr32UsartGetDataBits,
00105 Avr32UsartSetParity,
00106 Avr32UsartGetParity,
00107 Avr32UsartSetStopBits,
00108 Avr32UsartGetStopBits,
00109 Avr32UsartSetStatus,
00110 Avr32UsartGetStatus,
00111 Avr32UsartSetClockMode,
00112 Avr32UsartGetClockMode,
00113 };
00114
00130 NUTDEVICE devUsartAvr320 = {
00131 0,
00132 {'u', 'a', 'r', 't', '0', 0, 0, 0, 0},
00133 IFTYP_CHAR,
00134 0,
00135 0,
00136 0,
00137 &dcb_usart0,
00138 UsartInit,
00139 UsartIOCtl,
00140 UsartRead,
00141 UsartWrite,
00142 UsartOpen,
00143 UsartClose,
00144 UsartSize
00145 };
00146
00150
00151 #define SIG_UART sig_UART0
00152 #define dcb_usart dcb_usart0
00153
00154 #define USARTn_BASE AVR32_USART0
00155 #if UART0_ALT_PINSET == ALTERNATE_PIN_SET2
00156 # if defined(AVR32_USART0_TXD_0_0_PIN)
00157 # define USART_RX_PIN AVR32_USART0_RXD_0_1_PIN
00158 # define USART_RX_FUNCTION AVR32_USART0_RXD_0_1_FUNCTION
00159 # define USART_TX_PIN AVR32_USART0_TXD_0_1_PIN
00160 # define USART_TX_FUNCTION AVR32_USART0_TXD_0_1_FUNCTION
00161 # elif defined(AVR32_USART0_TXD_0_PIN)
00162 # define USART_RX_PIN AVR32_USART0_RXD_1_PIN
00163 # define USART_RX_FUNCTION AVR32_USART0_RXD_1_FUNCTION
00164 # define USART_TX_PIN AVR32_USART0_TXD_1_PIN
00165 # define USART_TX_FUNCTION AVR32_USART0_TXD_1_FUNCTION
00166 # endif
00167 #elif UART0_ALT_PINSET == ALTERNATE_PIN_SET3
00168 # if defined(AVR32_USART0_TXD_0_0_PIN)
00169 # define USART_RX_PIN AVR32_USART0_RXD_0_2_PIN
00170 # define USART_RX_FUNCTION AVR32_USART0_RXD_0_2_FUNCTION
00171 # define USART_TX_PIN AVR32_USART0_TXD_0_2_PIN
00172 # define USART_TX_FUNCTION AVR32_USART0_TXD_0_2_FUNCTION
00173 # elif defined(AVR32_USART0_TXD_0_PIN)
00174 # define USART_RX_PIN AVR32_USART0_RXD_2_PIN
00175 # define USART_RX_FUNCTION AVR32_USART0_RXD_2_FUNCTION
00176 # define USART_TX_PIN AVR32_USART0_TXD_2_PIN
00177 # define USART_TX_FUNCTION AVR32_USART0_TXD_2_FUNCTION
00178 # endif
00179 #else // ALTERNATE_PIN_SET1
00180 # if defined(AVR32_USART0_TXD_0_0_PIN)
00181 # define USART_RX_PIN AVR32_USART0_RXD_0_0_PIN
00182 # define USART_RX_FUNCTION AVR32_USART0_RXD_0_0_FUNCTION
00183 # define USART_TX_PIN AVR32_USART0_TXD_0_0_PIN
00184 # define USART_TX_FUNCTION AVR32_USART0_TXD_0_0_FUNCTION
00185 # elif defined(AVR32_USART0_TXD_0_PIN)
00186 # define USART_RX_PIN AVR32_USART0_RXD_0_PIN
00187 # define USART_RX_FUNCTION AVR32_USART0_RXD_0_FUNCTION
00188 # define USART_TX_PIN AVR32_USART0_TXD_0_PIN
00189 # define USART_TX_FUNCTION AVR32_USART0_TXD_0_FUNCTION
00190 # endif
00191 #endif
00192
00193 #include "usart.c"