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
00084
00085
00086 #include <cfg/os.h>
00087 #include <cfg/arch/avr.h>
00088
00089 #include <string.h>
00090
00091 #include <sys/atom.h>
00092 #include <sys/event.h>
00093 #include <sys/timer.h>
00094
00095 #include <dev/irqreg.h>
00096 #include <dev/usartavr.h>
00097
00103 #ifdef UART0_RTS_BIT
00104
00105 #if (UART0_RTS_AVRPORT == AVRPORTB)
00106 #define UART_RTS_PORT PORTB
00107 #define UART_RTS_DDR DDRB
00108
00109 #elif (UART0_RTS_AVRPORT == AVRPORTD)
00110 #define UART_RTS_PORT PORTD
00111 #define UART_RTS_DDR DDRD
00112
00113 #elif (UART0_RTS_AVRPORT == AVRPORTE)
00114 #define UART_RTS_PORT PORTE
00115 #define UART_RTS_DDR DDRE
00116
00117 #elif (UART0_RTS_AVRPORT == AVRPORTF)
00118 #define UART_RTS_PORT PORTF
00119 #define UART_RTS_DDR DDRF
00120
00121 #elif (UART0_RTS_AVRPORT == AVRPORTG)
00122 #define UART_RTS_PORT PORTG
00123 #define UART_RTS_DDR DDRG
00124
00125 #elif (UART0_RTS_AVRPORT == AVRPORTH)
00126 #define UART_RTS_PORT PORTH
00127 #define UART_RTS_DDR DDRH
00128
00129 #endif
00130
00131 #define UART_RTS_BIT UART0_RTS_BIT
00132
00133 #endif
00134
00135 #ifdef UART0_DTR_BIT
00136
00137 #if (UART0_DTR_AVRPORT == AVRPORTB)
00138 #define UART_DTR_PORT PORTB
00139 #define UART_DTR_DDR DDRB
00140
00141 #elif (UART0_DTR_AVRPORT == AVRPORTD)
00142 #define UART_DTR_PORT PORTD
00143 #define UART_DTR_DDR DDRD
00144
00145 #elif (UART0_DTR_AVRPORT == AVRPORTE)
00146 #define UART_DTR_PORT PORTE
00147 #define UART_DTR_DDR DDRE
00148
00149 #elif (UART0_DTR_AVRPORT == AVRPORTF)
00150 #define UART_DTR_PORT PORTF
00151 #define UART_DTR_DDR DDRF
00152
00153 #elif (UART0_DTR_AVRPORT == AVRPORTG)
00154 #define UART_DTR_PORT PORTG
00155 #define UART_DTR_DDR DDRG
00156
00157 #elif (UART0_DTR_AVRPORT == AVRPORTH)
00158 #define UART_DTR_PORT PORTH
00159 #define UART_DTR_DDR DDRH
00160
00161 #endif
00162
00163 #define UART_DTR_BIT UART0_DTR_BIT
00164
00165 #endif
00166
00172 #ifdef UART0_HDX_BIT
00173
00174 #if (UART0_HDX_AVRPORT == AVRPORTB)
00175 #define UART_HDX_PORT PORTB
00176 #define UART_HDX_DDR DDRB
00177
00178 #elif (UART0_HDX_AVRPORT == AVRPORTD)
00179 #define UART_HDX_PORT PORTD
00180 #define UART_HDX_DDR DDRD
00181
00182 #elif (UART0_HDX_AVRPORT == AVRPORTE)
00183 #define UART_HDX_PORT PORTE
00184 #define UART_HDX_DDR DDRE
00185
00186 #elif (UART0_HDX_AVRPORT == AVRPORTF)
00187 #define UART_HDX_PORT PORTF
00188 #define UART_HDX_DDR DDRF
00189
00190 #elif (UART0_HDX_AVRPORT == AVRPORTG)
00191 #define UART_HDX_PORT PORTG
00192 #define UART_HDX_DDR DDRG
00193
00194 #elif (UART0_HDX_AVRPORT == AVRPORTH)
00195 #define UART_HDX_PORT PORTH
00196 #define UART_HDX_DDR DDRH
00197
00198 #endif
00199 #define UART_HDX_BIT UART0_HDX_BIT
00200
00201 #endif
00202
00203
00204
00205
00206
00207 static u_long AvrUsartGetSpeed(void);
00208 static int AvrUsartSetSpeed(u_long rate);
00209 static u_char AvrUsartGetDataBits(void);
00210 static int AvrUsartSetDataBits(u_char bits);
00211 static u_char AvrUsartGetParity(void);
00212 static int AvrUsartSetParity(u_char mode);
00213 static u_char AvrUsartGetStopBits(void);
00214 static int AvrUsartSetStopBits(u_char bits);
00215 static u_long AvrUsartGetFlowControl(void);
00216 static int AvrUsartSetFlowControl(u_long flags);
00217 static u_long AvrUsartGetStatus(void);
00218 static int AvrUsartSetStatus(u_long flags);
00219 static u_char AvrUsartGetClockMode(void);
00220 static int AvrUsartSetClockMode(u_char mode);
00221 static void AvrUsartTxStart(void);
00222 static void AvrUsartRxStart(void);
00223 static int AvrUsartInit(void);
00224 static int AvrUsartDeinit(void);
00225
00230
00234 static USARTDCB dcb_usart0 = {
00235 0,
00236 0,
00237 0,
00238 0,
00239 {0, 0, 0, 0, 0, 0, 0, 0},
00240 {0, 0, 0, 0, 0, 0, 0, 0},
00241 0,
00242 AvrUsartInit,
00243 AvrUsartDeinit,
00244 AvrUsartTxStart,
00245 AvrUsartRxStart,
00246 AvrUsartSetFlowControl,
00247 AvrUsartGetFlowControl,
00248 AvrUsartSetSpeed,
00249 AvrUsartGetSpeed,
00250 AvrUsartSetDataBits,
00251 AvrUsartGetDataBits,
00252 AvrUsartSetParity,
00253 AvrUsartGetParity,
00254 AvrUsartSetStopBits,
00255 AvrUsartGetStopBits,
00256 AvrUsartSetStatus,
00257 AvrUsartGetStatus,
00258 AvrUsartSetClockMode,
00259 AvrUsartGetClockMode,
00260 };
00261
00277 NUTDEVICE devUsartAvr0 = {
00278 0,
00279 {'u', 'a', 'r', 't', '0', 0, 0, 0, 0},
00280 IFTYP_CHAR,
00281 0,
00282 0,
00283 0,
00284 &dcb_usart0,
00285 UsartInit,
00286 UsartIOCtl,
00287 UsartRead,
00288 UsartWrite,
00289 UsartWrite_P,
00290 UsartOpen,
00291 UsartClose,
00292 UsartSize
00293 };
00303
00304 #ifdef UART0_CTS_IRQ
00305
00306 #if (UART0_CTS_IRQ == INT0)
00307 #define UART_CTS_SIGNAL sig_INTERRUPT0
00308 #define UART_CTS_BIT 0
00309 #define UART_CTS_PORT PORTD
00310 #define UART_CTS_PIN PIND
00311 #define UART_CTS_DDR DDRD
00312
00313 #elif (UART0_CTS_IRQ == INT1)
00314 #define UART_CTS_SIGNAL sig_INTERRUPT1
00315 #define UART_CTS_BIT 1
00316 #define UART_CTS_PORT PORTD
00317 #define UART_CTS_PIN PIND
00318 #define UART_CTS_DDR DDRD
00319
00320 #elif (UART0_CTS_IRQ == INT2)
00321 #define UART_CTS_SIGNAL sig_INTERRUPT2
00322 #define UART_CTS_BIT 2
00323 #define UART_CTS_PORT PORTD
00324 #define UART_CTS_PIN PIND
00325 #define UART_CTS_DDR DDRD
00326
00327 #elif (UART0_CTS_IRQ == INT3)
00328 #define UART_CTS_SIGNAL sig_INTERRUPT3
00329 #define UART_CTS_BIT 3
00330 #define UART_CTS_PORT PORTD
00331 #define UART_CTS_PIN PIND
00332 #define UART_CTS_DDR DDRD
00333
00334 #elif (UART0_CTS_IRQ == INT4)
00335 #define UART_CTS_SIGNAL sig_INTERRUPT4
00336 #define UART_CTS_BIT 4
00337 #define UART_CTS_PORT PORTE
00338 #define UART_CTS_PIN PINE
00339 #define UART_CTS_DDR DDRE
00340
00341 #elif (UART0_CTS_IRQ == INT5)
00342 #define UART_CTS_SIGNAL sig_INTERRUPT5
00343 #define UART_CTS_BIT 5
00344 #define UART_CTS_PORT PORTE
00345 #define UART_CTS_PIN PINE
00346 #define UART_CTS_DDR DDRE
00347
00348 #elif (UART0_CTS_IRQ == INT6)
00349 #define UART_CTS_SIGNAL sig_INTERRUPT6
00350 #define UART_CTS_BIT 6
00351 #define UART_CTS_PORT PORTE
00352 #define UART_CTS_PIN PINE
00353 #define UART_CTS_DDR DDRE
00354
00355 #elif (UART0_CTS_IRQ == INT7)
00356 #define UART_CTS_SIGNAL sig_INTERRUPT7
00357 #define UART_CTS_BIT 7
00358 #define UART_CTS_PORT PORTE
00359 #define UART_CTS_PIN PINE
00360 #define UART_CTS_DDR DDRE
00361
00362 #endif
00363
00364 #else
00365
00366
00367 #define UART_CTS_PORT UART0_CTS_PORT
00368 #define UART_CTS_PIN UART0_CTS_PIN
00369 #define UART_CTS_DDR UART0_CTS_DDR
00370
00371 #ifdef UART1_CTS_BIT
00372 #define UART_CTS_SIGNAL UART0_CTS_SIGNAL
00373 #define UART_CTS_BIT UART0_CTS_BIT
00374 #endif
00375
00376 #endif
00377
00378
00382 #ifdef __AVR_ENHANCED__
00383
00384 #define UDRn UDR0
00385 #define UCSRnA UCSR0A
00386 #define UCSRnB UCSR0B
00387 #define UCSRnC UCSR0C
00388 #define UBRRnL UBRR0L
00389 #define UBRRnH UBRR0H
00390
00391 #ifdef __IMAGECRAFT__
00392 #define TXB8 TXB80
00393 #ifdef ATMega2561
00394 #define UMSEL UMSEL00
00395 #else
00396 #define UMSEL UMSEL0
00397 #endif
00398 #define U2X U2X0
00399 #define UCSZ2 UCSZ02
00400 #define UCSZ1 UCSZ01
00401 #define UCSZ0 UCSZ00
00402 #define UPM0 UPM00
00403 #define UPM1 UPM01
00404 #define USBS USBS0
00405 #define UPE UPE0
00406 #define MPCM MPCM0
00407 #define UCPOL UCPOL0
00408 #endif
00409
00410 #else
00411
00412 #define UDRn UDR
00413 #define UCSRnA USR
00414 #define UCSRnB UCR
00415 #define UBRRnL UBRR
00416 #define UCSZ2 CHR9
00417
00418 #endif
00419
00420 #define sig_UART_RECV sig_UART0_RECV
00421 #define sig_UART_DATA sig_UART0_DATA
00422 #define sig_UART_TRANS sig_UART0_TRANS
00423
00424 #ifndef SIG_UART_RECV
00425 #define SIG_UART_RECV SIG_UART0_RECV
00426 #endif
00427 #ifndef SIG_UART_DATA
00428 #define SIG_UART_DATA SIG_UART0_DATA
00429 #endif
00430 #ifndef SIG_UART_TRANS
00431 #define SIG_UART_TRANS SIG_UART0_TRANS
00432 #endif
00433
00434 #define dcb_usart dcb_usart0
00435
00436 #ifdef NUTTRACER
00437 #define TRACE_INT_UART_CTS TRACE_INT_UART0_CTS
00438 #define TRACE_INT_UART_RXCOMPL TRACE_INT_UART0_RXCOMPL
00439 #define TRACE_INT_UART_TXEMPTY TRACE_INT_UART0_TXEMPTY
00440 #endif
00441
00442 #ifdef UART0_READMULTIBYTE
00443 #define UART_READMULTIBYTE
00444 #endif
00445
00446 #ifdef USE_USART0
00447 #define USE_USART
00448 #endif
00449
00450 #ifdef UART0_NO_SW_FLOWCONTROL
00451 #define UART_NO_SW_FLOWCONTROL
00452 #endif
00453
00456 #include "usartavr.c"