/* * CFile1.c * * Created: 4/3/2024 10:21:26 AM * Author: bsw9xd */ #include "serial.h" void usart_init() { volatile int ubrr = (F_CPU / (16UL * BAUD)) - 1; //TODO: why is this volatile int??? UCSR1A = 0; //async normal communication UCSR1B = (1 << TXEN) | (1 << RXEN); UCSR1C = (1 << UCSZ0) | (1 << UCSZ1); UBRR1H = (unsigned char)(ubrr << 8); UBRR1L = (unsigned char)ubrr; } void usart_txt(char data) { //transmit data UDR1 = data; //buffer the data while(~UCSR1A & (1 << TXC)); //wait until the transmission is complete UCSR1A |= (1 << TXC); } char usart_rxt() { if(UCSR1A & (1 << RXC)) { return UDR1; } return '\0'; } char usart_rxt_blocking() { //TODO maybe replace usart_txt while(!(UCSR1A & (1 << RXC))); //TODO simplify return UDR1; } void usart_txstr(char *str) { for(int i = 0; str[i] != '\0'; i++) usart_txt(str[i]); }