1 | #if defined(__AVR_ATmega164P__) || defined(__AVR_ATmega324P__) || defined(__AVR_ATmega644P__)
|
2 | /* ATmega with two USART */
|
3 | #define ATMEGA_USART0
|
4 | #define ATMEGA_USART1
|
5 | #define UART0_RECEIVE_INTERRUPT SIG_USART_RECV
|
6 | #define UART1_RECEIVE_INTERRUPT SIG_USART1_RECV
|
7 | #define UART0_TRANSMIT_INTERRUPT SIG_USART_DATA
|
8 | #define UART1_TRANSMIT_INTERRUPT SIG_USART1_DATA
|
9 | #define UART0_STATUS UCSR0A
|
10 | #define UART0_CONTROL UCSR0B
|
11 | #define UART0_DATA UDR0
|
12 | #define UART0_UDRIE UDRIE0
|
13 | #define UART1_STATUS UCSR1A
|
14 | #define UART1_CONTROL UCSR1B
|
15 | #define UART1_DATA UDR1
|
16 | #define UART1_UDRIE UDRIE1
|
17 | #endif
|
18 |
|
19 | /*************************************************************************
|
20 | Function: uart_init()
|
21 | Purpose: initialize UART and set baudrate
|
22 | Input: baudrate using macro UART_BAUD_SELECT()
|
23 | Returns: none
|
24 | **************************************************************************/
|
25 | void uart_init(unsigned int baudrate)
|
26 | {
|
27 | UART_TxHead = 0;
|
28 | UART_TxTail = 0;
|
29 | UART_RxHead = 0;
|
30 | UART_RxTail = 0;
|
31 |
|
32 | #if defined( AT90_UART )
|
33 | /* set baud rate */
|
34 | UBRR = (unsigned char)baudrate;
|
35 |
|
36 | /* enable UART receiver and transmmitter and receive complete interrupt */
|
37 | UART0_CONTROL = _BV(RXCIE)|_BV(RXEN)|_BV(TXEN);
|
38 |
|
39 | #elif defined (ATMEGA_USART)
|
40 | /* Set baud rate */
|
41 | if ( baudrate & 0x8000 )
|
42 | {
|
43 | UART0_STATUS = (1<<U2X); //Enable 2x speed
|
44 | baudrate &= ~0x8000;
|
45 | }
|
46 | UBRRH = (unsigned char)(baudrate>>8);
|
47 | UBRRL = (unsigned char) baudrate;
|
48 |
|
49 | /* Enable USART receiver and transmitter and receive complete interrupt */
|
50 | UART0_CONTROL = _BV(RXCIE)|(1<<RXEN)|(1<<TXEN);
|
51 |
|
52 | /* Set frame format: asynchronous, 8data, no parity, 1stop bit */
|
53 | #ifdef URSEL
|
54 | UCSRC = (1<<URSEL)|(3<<UCSZ0);
|
55 | #else
|
56 | UCSRC = (3<<UCSZ0);
|
57 | #endif
|
58 |
|
59 | #elif defined (ATMEGA_USART0 )
|
60 | /* Set baud rate */
|
61 | if ( baudrate & 0x8000 )
|
62 | {
|
63 | UART0_STATUS = (1<<U2X0); //Enable 2x speed
|
64 | baudrate &= ~0x8000;
|
65 | }
|
66 | UBRR0H = (unsigned char)(baudrate>>8);
|
67 | UBRR0L = (unsigned char) baudrate;
|
68 |
|
69 | /* Enable USART receiver and transmitter and receive complete interrupt */
|
70 | UART0_CONTROL = _BV(RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
|
71 |
|
72 | /* Set frame format: asynchronous, 8data, no parity, 1stop bit */
|
73 | #ifdef URSEL0
|
74 | UCSR0C = (1<<URSEL0)|(3<<UCSZ00);
|
75 | #else
|
76 | UCSR0C = (3<<UCSZ00);
|
77 | #endif
|
78 |
|
79 | #elif defined ( ATMEGA_UART )
|
80 | /* set baud rate */
|
81 | if ( baudrate & 0x8000 )
|
82 | {
|
83 | UART0_STATUS = (1<<U2X); //Enable 2x speed
|
84 | baudrate &= ~0x8000;
|
85 | }
|
86 | UBRRHI = (unsigned char)(baudrate>>8);
|
87 | UBRR = (unsigned char) baudrate;
|
88 |
|
89 | /* Enable UART receiver and transmitter and receive complete interrupt */
|
90 | UART0_CONTROL = _BV(RXCIE)|(1<<RXEN)|(1<<TXEN);
|
91 |
|
92 | #endif
|
93 |
|
94 | }/* uart_init */
|