adapt uart to new atmega

master
Eggert Jung 6 years ago
parent 1c08382936
commit be90944b2f

@ -6,6 +6,29 @@
#define BAUD 9600
#define BAUDRATE ((F_CPU)/(BAUD*16UL)-1)
#define UART_BAUD_REGH UBRR0H
#define UART_BAUD_REGL UBRR0L
#define UART_CTRL_REGA UCSR0A
#define UART_CTRL_REGB UCSR0B
#define UART_CTRL_REGC UCSR0C
// UCSRA
#define UART_UDRE_BM UDRE0
#define UART_RXC_BM RXC0
// UCSRB
#define UART_TXEN_BM TXEN0
#define UART_RXEN_BM RXEN0
#define UART_RXCIE_BM RXCIE0
// UCSRC
#define UART_URSEL_BM 0 /* only for old atmega */
#define UART_UCSZ0_BM UCSZ00
#define UART_UCSZ1_BM UCSZ01
#define UART_DATA_REG UDR0
void uart_init (void);
void read_sync(char buffer[], uint8_t buffersize, uint8_t * bufferindex);

@ -197,6 +197,7 @@ void setup(){
TIMSK1 |= (1 << ICIE1) | //Interrupt Counter Enabled)
(1 << TOIE1); //Timer Overflow Enabled
uart_init();
sei(); //Enable Interrupts
//adc_setup();

@ -7,10 +7,16 @@ FILE uart_output = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
void uart_init ()
{
UBRRH = (BAUDRATE>>8); // shift the register right by 8 bits
UBRRL = BAUDRATE; // set baud rate
UCSRB|= (1<<TXEN)|(1<<RXEN)|(1<<RXCIE); // enable receiver and transmitter
UCSRC|= (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1); // 8bit data format
UART_BAUD_REGH = (BAUDRATE>>8);
UART_BAUD_REGL = BAUDRATE; // set baud rate
UART_CTRL_REGB |= (1<<UART_TXEN_BM)
|(1<<UART_RXEN_BM)
|(1<<UART_RXCIE_BM); // enable receiver and transmitter
UART_CTRL_REGC |= (1<<UART_URSEL_BM)
|(1<<UART_UCSZ0_BM)
|(1<<UART_UCSZ1_BM); // 8bit data format
stdout = &uart_output;
}
@ -19,8 +25,8 @@ static int uart_putchar(char c, FILE *stream) {
if (c == '\n') {
uart_putchar('\r', stream);
}
loop_until_bit_is_set(UCSRA, UDRE);
UDR = c;
loop_until_bit_is_set(UART_CTRL_REGA, UART_UDRE_BM);
UART_DATA_REG = c;
return 0;
}
@ -32,8 +38,8 @@ void read_sync(char buffer[], uint8_t buffersize, uint8_t * bufferindex){
char input;
do{
while ((UCSRA & (1 << RXC)) == 0);
input = UDR;
while ((UART_CTRL_REGA & (1 << UART_RXC_BM)) == 0);
input = UART_DATA_REG;
putchar(input); //echo
buffer[*bufferindex]=input;

Loading…
Cancel
Save