ATMega32U4
...
void Init_UART (void) {
UBRR1L = 0x33; // Set baud rate lo
UBRR1H = 0x00; // Set baud rate hi
UCSR1B = (1<<RXEN1)|(1<<TXEN1)|(1<<RXCIE1)|(1<<UDRIE1); // Enable receiver and transmitter
UCSR1C = (1<<USBS1)|(3<<UCSZ10); // Set frame format: 8data, 2stop bit
}
...
INT08U UARTDataInReceiveBuffer (void) {
INT08U t1 = UART_RxHead0, t2 = UART_RxTail0;
return (t1 != t2);
}
INT08U UARTReceiveByte (void) {
INT08U t1, t2;
INT32U tmptail0;
t1 = UART_RxHead0;
t2 = UART_RxTail0;
while (t1 == t2) {
};
tmptail0 = ( UART_RxTail0 + 1 ) & UART_RX_BUFFER_MASK0;
UART_RxTail0 = tmptail0;
return UART_RxBuf0[tmptail0];
}
void UARTTransmitByte (INT08U data0 ) {
INT08U tmphead0;
tmphead0 = ( UART_TxHead0 + 1 ) & UART_TX_BUFFER_MASK0;
while ( tmphead0 == UART_TxTail0 ) continue;
UART_TxBuf0[tmphead0] = data0;
UART_TxHead0 = tmphead0;
UCSR1B |= (1<<UDRIE1);
}
/*
********************************************************************************
* LOCAL FUNCTION
********************************************************************************
*/
#pragma vector=USART1_RX_vect
__interrupt void USART_Rx_isr(void) {
INT08U data0;
INT32U tmphead0;
data0 = UDR1;
tmphead0 = ( UART_RxHead0 + 1 ) & UART_RX_BUFFER_MASK0;
UART_RxHead0 = tmphead0;
if (tmphead0 == UART_RxTail0) { }
UART_RxBuf0[tmphead0] = data0;
}
#pragma vector=USART1_UDRE_vect
__interrupt void USART0_Tx_interrupt( void ) {
INT08U t1, t2;
INT08U tmptail0;
t1 = UART_RxHead0;
t2 = UART_RxTail0;
if (t1 != t2) {
tmptail0 = ( UART_TxTail0 + 1 ) & UART_TX_BUFFER_MASK0;
UART_TxTail0 = tmptail0;
UDR1=UART_TxBuf0[tmptail0];
}
else {
UCSR1B &= ~(1<<UDRIE1);
}
}
...
...
void main (void) {
InitDevice ();
while (1) {
UARTTransmitByte(0x55);
}
}