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
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096 #include <cfg/os.h>
00097 #include <cfg/arch/avr.h>
00098
00099 #include <string.h>
00100
00101 #include <sys/atom.h>
00102 #include <sys/event.h>
00103 #include <sys/timer.h>
00104
00105 #include <dev/irqreg.h>
00106 #include <dev/usartavr.h>
00107
00113 #ifdef UART1_RTS_BIT
00114
00115 #if (UART1_RTS_AVRPORT == AVRPORTB)
00116 #define UART_RTS_PORT PORTB
00117 #define UART_RTS_DDR DDRB
00118
00119 #elif (UART1_RTS_AVRPORT == AVRPORTD)
00120 #define UART_RTS_PORT PORTD
00121 #define UART_RTS_DDR DDRD
00122
00123 #elif (UART1_RTS_AVRPORT == AVRPORTE)
00124 #define UART_RTS_PORT PORTE
00125 #define UART_RTS_DDR DDRE
00126
00127 #elif (UART1_RTS_AVRPORT == AVRPORTF)
00128 #define UART_RTS_PORT PORTF
00129 #define UART_RTS_DDR DDRF
00130
00131 #elif (UART1_RTS_AVRPORT == AVRPORTG)
00132 #define UART_RTS_PORT PORTG
00133 #define UART_RTS_DDR DDRG
00134
00135 #elif (UART1_RTS_AVRPORT == AVRPORTH)
00136 #define UART_RTS_PORT PORTH
00137 #define UART_RTS_DDR DDRH
00138
00139 #endif
00140 #define UART_RTS_BIT UART1_RTS_BIT
00141
00142 #endif
00143
00144 #ifdef UART1_DTR_BIT
00145
00146 #if (UART1_DTR_AVRPORT == AVRPORTB)
00147 #define UART_DTR_PORT PORTB
00148 #define UART_DTR_DDR DDRB
00149
00150 #elif (UART1_DTR_AVRPORT == AVRPORTD)
00151 #define UART_DTR_PORT PORTD
00152 #define UART_DTR_DDR DDRD
00153
00154 #elif (UART1_DTR_AVRPORT == AVRPORTE)
00155 #define UART_DTR_PORT PORTE
00156 #define UART_DTR_DDR DDRE
00157
00158 #elif (UART1_DTR_AVRPORT == AVRPORTF)
00159 #define UART_DTR_PORT PORTF
00160 #define UART_DTR_DDR DDRF
00161
00162 #elif (UART1_DTR_AVRPORT == AVRPORTG)
00163 #define UART_DTR_PORT PORTG
00164 #define UART_DTR_DDR DDRG
00165
00166 #elif (UART1_DTR_AVRPORT == AVRPORTH)
00167 #define UART_DTR_PORT PORTH
00168 #define UART_DTR_DDR DDRH
00169
00170 #endif
00171
00172 #define UART_DTR_BIT UART1_DTR_BIT
00173
00174 #endif
00175
00181 #ifdef UART1_HDX_BIT
00182
00183 #if (UART1_HDX_AVRPORT == AVRPORTB)
00184 #define UART_HDX_PORT PORTB
00185 #define UART_HDX_DDR DDRB
00186
00187 #elif (UART1_HDX_AVRPORT == AVRPORTD)
00188 #define UART_HDX_PORT PORTD
00189 #define UART_HDX_DDR DDRD
00190
00191 #elif (UART1_HDX_AVRPORT == AVRPORTE)
00192 #define UART_HDX_PORT PORTE
00193 #define UART_HDX_DDR DDRE
00194
00195 #elif (UART1_HDX_AVRPORT == AVRPORTF)
00196 #define UART_HDX_PORT PORTF
00197 #define UART_HDX_DDR DDRF
00198
00199 #elif (UART1_HDX_AVRPORT == AVRPORTG)
00200 #define UART_HDX_PORT PORTG
00201 #define UART_HDX_DDR DDRG
00202
00203 #elif (UART1_HDX_AVRPORT == AVRPORTH)
00204 #define UART_HDX_PORT PORTH
00205 #define UART_HDX_DDR DDRH
00206
00207 #endif
00208 #define UART_HDX_BIT UART1_HDX_BIT
00209
00210 #endif
00211
00212
00213 #ifdef __AVR_ENHANCED__
00214
00215
00216
00217
00218 static uint32_t AvrUsartGetSpeed(void);
00219 static int AvrUsartSetSpeed(uint32_t rate);
00220 static uint8_t AvrUsartGetDataBits(void);
00221 static int AvrUsartSetDataBits(uint8_t bits);
00222 static uint8_t AvrUsartGetParity(void);
00223 static int AvrUsartSetParity(uint8_t mode);
00224 static uint8_t AvrUsartGetStopBits(void);
00225 static int AvrUsartSetStopBits(uint8_t bits);
00226 static uint32_t AvrUsartGetFlowControl(void);
00227 static int AvrUsartSetFlowControl(uint32_t flags);
00228 static uint32_t AvrUsartGetStatus(void);
00229 static int AvrUsartSetStatus(uint32_t flags);
00230 static uint8_t AvrUsartGetClockMode(void);
00231 static int AvrUsartSetClockMode(uint8_t mode);
00232 static void AvrUsartTxStart(void);
00233 static void AvrUsartRxStart(void);
00234 static int AvrUsartInit(void);
00235 static int AvrUsartDeinit(void);
00236
00241
00245 static USARTDCB dcb_usart1 = {
00246 0,
00247 0,
00248 0,
00249 0,
00250 {0, 0, 0, 0, 0, 0, 0, 0},
00251 {0, 0, 0, 0, 0, 0, 0, 0},
00252 0,
00253 AvrUsartInit,
00254 AvrUsartDeinit,
00255 AvrUsartTxStart,
00256 AvrUsartRxStart,
00257 AvrUsartSetFlowControl,
00258 AvrUsartGetFlowControl,
00259 AvrUsartSetSpeed,
00260 AvrUsartGetSpeed,
00261 AvrUsartSetDataBits,
00262 AvrUsartGetDataBits,
00263 AvrUsartSetParity,
00264 AvrUsartGetParity,
00265 AvrUsartSetStopBits,
00266 AvrUsartGetStopBits,
00267 AvrUsartSetStatus,
00268 AvrUsartGetStatus,
00269 AvrUsartSetClockMode,
00270 AvrUsartGetClockMode,
00271 };
00272
00288 NUTDEVICE devUsartAvr1 = {
00289 0,
00290 {'u', 'a', 'r', 't', '1', 0, 0, 0, 0},
00291 IFTYP_CHAR,
00292 1,
00293 0,
00294 0,
00295 &dcb_usart1,
00296 UsartInit,
00297 UsartIOCtl,
00298 UsartRead,
00299 UsartWrite,
00300 UsartWrite_P,
00301 UsartOpen,
00302 UsartClose,
00303 UsartSize
00304 };
00313
00314 #ifdef UART1_CTS_IRQ
00315
00316 #if (UART1_CTS_IRQ == INT0)
00317 #define UART_CTS_SIGNAL sig_INTERRUPT0
00318 #define UART_CTS_BIT 0
00319 #define UART_CTS_PORT PORTD
00320 #define UART_CTS_PIN PIND
00321 #define UART_CTS_DDR DDRD
00322
00323 #elif (UART1_CTS_IRQ == INT1)
00324 #define UART_CTS_SIGNAL sig_INTERRUPT1
00325 #define UART_CTS_BIT 1
00326 #define UART_CTS_PORT PORTD
00327 #define UART_CTS_PIN PIND
00328 #define UART_CTS_DDR DDRD
00329
00330 #elif (UART1_CTS_IRQ == INT2)
00331 #define UART_CTS_SIGNAL sig_INTERRUPT2
00332 #define UART_CTS_BIT 2
00333 #define UART_CTS_PORT PORTD
00334 #define UART_CTS_PIN PIND
00335 #define UART_CTS_DDR DDRD
00336
00337 #elif (UART1_CTS_IRQ == INT3)
00338 #define UART_CTS_SIGNAL sig_INTERRUPT3
00339 #define UART_CTS_BIT 3
00340 #define UART_CTS_PORT PORTD
00341 #define UART_CTS_PIN PIND
00342 #define UART_CTS_DDR DDRD
00343
00344 #elif (UART1_CTS_IRQ == INT4)
00345 #define UART_CTS_SIGNAL sig_INTERRUPT4
00346 #define UART_CTS_BIT 4
00347 #define UART_CTS_PORT PORTE
00348 #define UART_CTS_PIN PINE
00349 #define UART_CTS_DDR DDRE
00350
00351 #elif (UART1_CTS_IRQ == INT5)
00352 #define UART_CTS_SIGNAL sig_INTERRUPT5
00353 #define UART_CTS_BIT 5
00354 #define UART_CTS_PORT PORTE
00355 #define UART_CTS_PIN PINE
00356 #define UART_CTS_DDR DDRE
00357
00358 #elif (UART1_CTS_IRQ == INT6)
00359 #define UART_CTS_SIGNAL sig_INTERRUPT6
00360 #define UART_CTS_BIT 6
00361 #define UART_CTS_PORT PORTE
00362 #define UART_CTS_PIN PINE
00363 #define UART_CTS_DDR DDRE
00364
00365 #elif (UART1_CTS_IRQ == INT7)
00366 #define UART_CTS_SIGNAL sig_INTERRUPT7
00367 #define UART_CTS_BIT 7
00368 #define UART_CTS_PORT PORTE
00369 #define UART_CTS_PIN PINE
00370 #define UART_CTS_DDR DDRE
00371
00372 #endif
00373
00374 #else
00375
00376
00377 #define UART_CTS_PORT UART1_CTS_PORT
00378 #define UART_CTS_PIN UART1_CTS_PIN
00379 #define UART_CTS_DDR UART1_CTS_DDR
00380
00381 #ifdef UART1_CTS_BIT
00382 #define UART_CTS_SIGNAL UART1_CTS_SIGNAL
00383 #define UART_CTS_BIT UART1_CTS_BIT
00384 #endif
00385
00386 #endif
00387
00390
00391 #define UDRn UDR1
00392 #define UCSRnA UCSR1A
00393 #define UCSRnB UCSR1B
00394 #define UCSRnC UCSR1C
00395 #define UBRRnL UBRR1L
00396 #define UBRRnH UBRR1H
00397
00398 #ifdef __IMAGECRAFT__
00399 #define TXB8 TXB81
00400 #if defined(ATMega2560) || defined(ATMega2561)
00401 #define UMSEL UMSEL01
00402 #else
00403 #define UMSEL UMSEL1
00404 #endif
00405 #define U2X U2X1
00406 #define UCSZ2 UCSZ12
00407 #define UCSZ1 UCSZ11
00408 #define UCSZ0 UCSZ10
00409 #define UPM0 UPM10
00410 #define UPM1 UPM11
00411 #define USBS USBS1
00412 #define UPE UPE1
00413 #define MPCM MPCM1
00414 #define UCPOL UCPOL1
00415 #endif
00416
00417 #define sig_UART_RECV sig_UART1_RECV
00418 #define sig_UART_DATA sig_UART1_DATA
00419 #define sig_UART_TRANS sig_UART1_TRANS
00420
00421 #define SIG_UART_RECV SIG_UART1_RECV
00422 #define SIG_UART_DATA SIG_UART1_DATA
00423 #define SIG_UART_TRANS SIG_UART1_TRANS
00424
00425 #define dcb_usart dcb_usart1
00426
00427 #ifdef NUTTRACER
00428 #define TRACE_INT_UART_CTS TRACE_INT_UART1_CTS
00429 #define TRACE_INT_UART_RXCOMPL TRACE_INT_UART1_RXCOMPL
00430 #define TRACE_INT_UART_TXEMPTY TRACE_INT_UART1_TXEMPTY
00431 #endif
00432
00433 #ifdef UART1_READMULTIBYTE
00434 #define UART_READMULTIBYTE
00435 #endif
00436
00437 #ifdef USE_USART1
00438 #define USE_USART
00439 #endif
00440
00441 #ifdef UART1_NO_SW_FLOWCONTROL
00442 #define UART_NO_SW_FLOWCONTROL
00443 #endif
00444
00445 #include "usartavr.c"
00446
00447 #endif