Nut/OS  4.10.3
API Reference
usart0.c
Go to the documentation of this file.
00001 
00036 /*
00037  * $Log: usart0.c,v $
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  * Local function prototypes.
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,                          /* dcb_modeflags */
00089     0,                          /* dcb_statusflags */
00090     0,                          /* dcb_rtimeout */
00091     0,                          /* dcb_wtimeout */
00092     {0, 0, 0, 0, 0, 0, 0, 0},   /* dcb_tx_rbf */
00093     {0, 0, 0, 0, 0, 0, 0, 0},   /* dcb_rx_rbf */
00094     0,                          /* dbc_last_eol */
00095     Avr32UsartInit,             /* dcb_init */
00096     Avr32UsartDeinit,           /* dcb_deinit */
00097     Avr32UsartTxStart,          /* dcb_tx_start */
00098     Avr32UsartRxStart,          /* dcb_rx_start */
00099     Avr32UsartSetFlowControl,   /* dcb_set_flow_control */
00100     Avr32UsartGetFlowControl,   /* dcb_get_flow_control */
00101     Avr32UsartSetSpeed,         /* dcb_set_speed */
00102     Avr32UsartGetSpeed,         /* dcb_get_speed */
00103     Avr32UsartSetDataBits,      /* dcb_set_data_bits */
00104     Avr32UsartGetDataBits,      /* dcb_get_data_bits */
00105     Avr32UsartSetParity,        /* dcb_set_parity */
00106     Avr32UsartGetParity,        /* dcb_get_parity */
00107     Avr32UsartSetStopBits,      /* dcb_set_stop_bits */
00108     Avr32UsartGetStopBits,      /* dcb_get_stop_bits */
00109     Avr32UsartSetStatus,        /* dcb_set_status */
00110     Avr32UsartGetStatus,        /* dcb_get_status */
00111     Avr32UsartSetClockMode,     /* dcb_set_clock_mode */
00112     Avr32UsartGetClockMode,     /* dcb_get_clock_mode */
00113 };
00114 
00130 NUTDEVICE devUsartAvr320 = {
00131     0,                          /* Pointer to next device, dev_next. */
00132     {'u', 'a', 'r', 't', '0', 0, 0, 0, 0},      /* Unique device name, dev_name. */
00133     IFTYP_CHAR,                 /* Type of device, dev_type. */
00134     0,                          /* Base address, dev_base (not used). */
00135     0,                          /* First interrupt number, dev_irq (not used). */
00136     0,                          /* Interface control block, dev_icb (not used). */
00137     &dcb_usart0,                /* Driver control block, dev_dcb. */
00138     UsartInit,                  /* Driver initialization routine, dev_init. */
00139     UsartIOCtl,                 /* Driver specific control function, dev_ioctl. */
00140     UsartRead,                  /* Read from device, dev_read. */
00141     UsartWrite,                 /* Write to device, dev_write. */
00142     UsartOpen,                  /* Open a device or file, dev_open. */
00143     UsartClose,                 /* Close a device or file, dev_close. */
00144     UsartSize                   /* Request file size, dev_size. */
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"