/* * UART.c * * Created: 25/11/2021 16:26:10 * Author: n0x */ #include "UART.h" CircularBuffer TxBuffer; CircularBuffer* pTxBuffer = &TxBuffer; CircularBuffer RxBuffer; CircularBuffer* pRxBuffer = &RxBuffer; volatile uint8_t TxActive; void uart_init(void) { UBRR0 = 103; /* set BAUD rate to 9600 */ UCSR0C |= (0<Readpointer = 0; pTxBuffer->Writepointer = 0; pRxBuffer->Readpointer = 0; pRxBuffer->Writepointer = 0; } /* ------------------------ */ /* Sending Data */ /* ------------------------ */ void uart_send_string(char* string) { int i = 0; while(string[i] != '\0'){ uart_send_byte(string[i]); i++; } } void uart_send_byte(char c) { /* Disable the TX Interrupt */ UCSR0B &= ~(1<data[pTxBuffer->Writepointer++] = c; if (pTxBuffer->Writepointer>=SIZE_BUFFER){ pTxBuffer->Writepointer = 0; } } else { TxActive = 1; UDR0 = c; } /* Enable the TX Interrupt again*/ UCSR0B |= (1<Readpointer != pTxBuffer->Writepointer) { UDR0 = pTxBuffer->data[pTxBuffer->Readpointer++]; if(pTxBuffer->Readpointer >= SIZE_BUFFER){ pTxBuffer->Readpointer = 0; } } else { TxActive = 0; } } /* ------------------------ */ /* Receiving Data */ /* ------------------------ */ uint8_t uart_data_available(void) { uint8_t dataAvailabel = 0; UCSR0B &= ~(1<Readpointer != pRxBuffer->Writepointer){ dataAvailabel = 1; } UCSR0B |= (1<Readpointer != pRxBuffer->Writepointer) { data = pRxBuffer->data[pRxBuffer->Readpointer++]; if(pRxBuffer->Readpointer >= SIZE_BUFFER){ pRxBuffer->Readpointer = 0; } } UCSR0B |= (1<>FE0))) == 0){ pRxBuffer->data[pRxBuffer->Writepointer++] = data; if(pRxBuffer->Writepointer >= SIZE_BUFFER) { pRxBuffer->Writepointer = 0; } } }