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
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083 #include <cfg/os.h>
00084 #include <cfg/arch/avr.h>
00085
00086 #include <string.h>
00087
00088 #include <sys/atom.h>
00089 #include <sys/event.h>
00090 #include <sys/timer.h>
00091
00092 #include <dev/irqreg.h>
00093 #include <dev/usartavr.h>
00094
00100 #ifdef UART0_RTS_BIT
00101
00102 #if (UART0_RTS_AVRPORT == AVRPORTB)
00103 #define UART_RTS_PORT PORTB
00104 #define UART_RTS_DDR DDRB
00105
00106 #elif (UART0_RTS_AVRPORT == AVRPORTD)
00107 #define UART_RTS_PORT PORTD
00108 #define UART_RTS_DDR DDRD
00109
00110 #elif (UART0_RTS_AVRPORT == AVRPORTE)
00111 #define UART_RTS_PORT PORTE
00112 #define UART_RTS_DDR DDRE
00113
00114 #elif (UART0_RTS_AVRPORT == AVRPORTF)
00115 #define UART_RTS_PORT PORTF
00116 #define UART_RTS_DDR DDRF
00117 #endif
00118
00119 #define UART_RTS_BIT UART0_RTS_BIT
00120
00121 #endif
00122
00128 #ifdef UART0_HDX_BIT
00129
00130 #if (UART0_HDX_AVRPORT == AVRPORTB)
00131 #define UART_HDX_PORT PORTB
00132 #define UART_HDX_DDR DDRB
00133
00134 #elif (UART0_HDX_AVRPORT == AVRPORTD)
00135 #define UART_HDX_PORT PORTD
00136 #define UART_HDX_DDR DDRD
00137
00138 #elif (UART0_HDX_AVRPORT == AVRPORTE)
00139 #define UART_HDX_PORT PORTE
00140 #define UART_HDX_DDR DDRE
00141
00142 #elif (UART0_HDX_AVRPORT == AVRPORTF)
00143 #define UART_HDX_PORT PORTF
00144 #define UART_HDX_DDR DDRF
00145
00146 #elif (UART0_HDX_AVRPORT == AVRPORTG)
00147 #define UART_HDX_PORT PORTG
00148 #define UART_HDX_DDR DDRG
00149
00150 #endif
00151 #define UART_HDX_BIT UART0_HDX_BIT
00152
00153 #endif
00154
00155
00156
00157
00158
00159 static u_long AvrUsartGetSpeed(void);
00160 static int AvrUsartSetSpeed(u_long rate);
00161 static u_char AvrUsartGetDataBits(void);
00162 static int AvrUsartSetDataBits(u_char bits);
00163 static u_char AvrUsartGetParity(void);
00164 static int AvrUsartSetParity(u_char mode);
00165 static u_char AvrUsartGetStopBits(void);
00166 static int AvrUsartSetStopBits(u_char bits);
00167 static u_long AvrUsartGetFlowControl(void);
00168 static int AvrUsartSetFlowControl(u_long flags);
00169 static u_long AvrUsartGetStatus(void);
00170 static int AvrUsartSetStatus(u_long flags);
00171 static u_char AvrUsartGetClockMode(void);
00172 static int AvrUsartSetClockMode(u_char mode);
00173 static void AvrUsartTxStart(void);
00174 static void AvrUsartRxStart(void);
00175 static int AvrUsartInit(void);
00176 static int AvrUsartDeinit(void);
00177
00182
00186 static USARTDCB dcb_usart0 = {
00187 0,
00188 0,
00189 0,
00190 0,
00191 {0, 0, 0, 0, 0, 0, 0, 0},
00192 {0, 0, 0, 0, 0, 0, 0, 0},
00193 0,
00194 AvrUsartInit,
00195 AvrUsartDeinit,
00196 AvrUsartTxStart,
00197 AvrUsartRxStart,
00198 AvrUsartSetFlowControl,
00199 AvrUsartGetFlowControl,
00200 AvrUsartSetSpeed,
00201 AvrUsartGetSpeed,
00202 AvrUsartSetDataBits,
00203 AvrUsartGetDataBits,
00204 AvrUsartSetParity,
00205 AvrUsartGetParity,
00206 AvrUsartSetStopBits,
00207 AvrUsartGetStopBits,
00208 AvrUsartSetStatus,
00209 AvrUsartGetStatus,
00210 AvrUsartSetClockMode,
00211 AvrUsartGetClockMode,
00212 };
00213
00229 NUTDEVICE devUsartAvr0 = {
00230 0,
00231 {'u', 'a', 'r', 't', '0', 0, 0, 0, 0},
00232 IFTYP_CHAR,
00233 0,
00234 0,
00235 0,
00236 &dcb_usart0,
00237 UsartInit,
00238 UsartIOCtl,
00239 UsartRead,
00240 UsartWrite,
00241 UsartWrite_P,
00242 UsartOpen,
00243 UsartClose,
00244 UsartSize
00245 };
00255
00256 #ifdef UART0_CTS_IRQ
00257
00258 #if (UART0_CTS_IRQ == INT0)
00259 #define UART_CTS_SIGNAL sig_INTERRUPT0
00260 #define UART_CTS_BIT 0
00261 #define UART_CTS_PORT PORTD
00262 #define UART_CTS_PIN PIND
00263 #define UART_CTS_DDR DDRD
00264
00265 #elif (UART0_CTS_IRQ == INT1)
00266 #define UART_CTS_SIGNAL sig_INTERRUPT1
00267 #define UART_CTS_BIT 1
00268 #define UART_CTS_PORT PORTD
00269 #define UART_CTS_PIN PIND
00270 #define UART_CTS_DDR DDRD
00271
00272 #elif (UART0_CTS_IRQ == INT2)
00273 #define UART_CTS_SIGNAL sig_INTERRUPT2
00274 #define UART_CTS_BIT 2
00275 #define UART_CTS_PORT PORTD
00276 #define UART_CTS_PIN PIND
00277 #define UART_CTS_DDR DDRD
00278
00279 #elif (UART0_CTS_IRQ == INT3)
00280 #define UART_CTS_SIGNAL sig_INTERRUPT3
00281 #define UART_CTS_BIT 3
00282 #define UART_CTS_PORT PORTD
00283 #define UART_CTS_PIN PIND
00284 #define UART_CTS_DDR DDRD
00285
00286 #elif (UART0_CTS_IRQ == INT4)
00287 #define UART_CTS_SIGNAL sig_INTERRUPT4
00288 #define UART_CTS_BIT 4
00289 #define UART_CTS_PORT PORTE
00290 #define UART_CTS_PIN PINE
00291 #define UART_CTS_DDR DDRE
00292
00293 #elif (UART0_CTS_IRQ == INT5)
00294 #define UART_CTS_SIGNAL sig_INTERRUPT5
00295 #define UART_CTS_BIT 5
00296 #define UART_CTS_PORT PORTE
00297 #define UART_CTS_PIN PINE
00298 #define UART_CTS_DDR DDRE
00299
00300 #elif (UART0_CTS_IRQ == INT6)
00301 #define UART_CTS_SIGNAL sig_INTERRUPT6
00302 #define UART_CTS_BIT 6
00303 #define UART_CTS_PORT PORTE
00304 #define UART_CTS_PIN PINE
00305 #define UART_CTS_DDR DDRE
00306
00307 #elif (UART0_CTS_IRQ == INT7)
00308 #define UART_CTS_SIGNAL sig_INTERRUPT7
00309 #define UART_CTS_BIT 7
00310 #define UART_CTS_PORT PORTE
00311 #define UART_CTS_PIN PINE
00312 #define UART_CTS_DDR DDRE
00313
00314 #endif
00315
00316 #else
00317
00318
00319 #define UART_CTS_PORT UART0_CTS_PORT
00320 #define UART_CTS_PIN UART0_CTS_PIN
00321 #define UART_CTS_DDR UART0_CTS_DDR
00322
00323 #ifdef UART1_CTS_BIT
00324 #define UART_CTS_SIGNAL UART0_CTS_SIGNAL
00325 #define UART_CTS_BIT UART0_CTS_BIT
00326 #endif
00327
00328 #endif
00329
00330
00334 #ifdef __AVR_ENHANCED__
00335
00336 #define UDRn UDR0
00337 #define UCSRnA UCSR0A
00338 #define UCSRnB UCSR0B
00339 #define UCSRnC UCSR0C
00340 #define UBRRnL UBRR0L
00341 #define UBRRnH UBRR0H
00342
00343 #ifdef __IMAGECRAFT__
00344 #define TXB8 TXB80
00345 #ifdef ATMega2561
00346 #define UMSEL UMSEL00
00347 #else
00348 #define UMSEL UMSEL0
00349 #endif
00350 #define U2X U2X0
00351 #define UCSZ2 UCSZ02
00352 #define UCSZ1 UCSZ01
00353 #define UCSZ0 UCSZ00
00354 #define UPM0 UPM00
00355 #define UPM1 UPM01
00356 #define USBS USBS0
00357 #define UPE UPE0
00358 #define MPCM MPCM0
00359 #define UCPOL UCPOL0
00360 #endif
00361
00362 #else
00363
00364 #define UDRn UDR
00365 #define UCSRnA USR
00366 #define UCSRnB UCR
00367 #define UBRRnL UBRR
00368 #define UCSZ2 CHR9
00369
00370 #endif
00371
00372 #define sig_UART_RECV sig_UART0_RECV
00373 #define sig_UART_DATA sig_UART0_DATA
00374 #define sig_UART_TRANS sig_UART0_TRANS
00375
00376 #ifndef SIG_UART_RECV
00377 #define SIG_UART_RECV SIG_UART0_RECV
00378 #endif
00379 #ifndef SIG_UART_DATA
00380 #define SIG_UART_DATA SIG_UART0_DATA
00381 #endif
00382 #ifndef SIG_UART_TRANS
00383 #define SIG_UART_TRANS SIG_UART0_TRANS
00384 #endif
00385
00386 #define dcb_usart dcb_usart0
00387
00388 #ifdef NUTTRACER
00389 #define TRACE_INT_UART_CTS TRACE_INT_UART0_CTS
00390 #define TRACE_INT_UART_RXCOMPL TRACE_INT_UART0_RXCOMPL
00391 #define TRACE_INT_UART_TXEMPTY TRACE_INT_UART0_TXEMPTY
00392 #endif
00393
00394 #ifdef UART0_READMULTIBYTE
00395 #define UART_READMULTIBYTE
00396 #endif
00397
00398 #ifdef USE_USART0
00399 #define USE_USART
00400 #endif
00401
00402 #ifdef UART0_NO_SW_FLOWCONTROL
00403 #define UART_NO_SW_FLOWCONTROL
00404 #endif
00405
00408 #include "usartavr.c"