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 */
  |