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