Hi,
I have to correct someone code, but I'm not so good in this. As I understand there are problem with UART receiving and/or sending.
Can someone help me with this please?
uart.hpp file
#ifndef UART_H_ #define UART_H_ #ifndef UART_BAUDRATE #warning "You should define UART_BAUDRATE in ini file" #define UART_BAUDRATE 19200UL #endif #define F_CPU 14745600L #define BAUD_PRESCALE F_CPU/16/UART_BAUDRATE-1 void uart_init(uint16_t ubrr); void uart_send(unsigned int); void sendstring(char *strin); void dec_print(int16_t inp); void hex_print(uint32_t inp); void bin_print(unsigned char inp); void cr(void); unsigned char UART_Receive(void); #endif /* UART_H_ */
uart.cpp file
#include <Arduino.h> void uart_init(unsigned int ubrr) { //Setup baudrate UBRR0H = (unsigned char)(ubrr >> 8); UBRR0L = (unsigned char)ubrr; //Enable receiver, transmitter and receive interrupt UCSR0B = _BV(RXEN0) | _BV(TXEN0) | _BV(RXCIE0); //Set frame format: 8data UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); //UCSR0B &= ~_BV(UCSZ02); } void uart_send(unsigned int data) { //Wait for empty transmit buffer while (!(UCSR0A & _BV(UDRE0))); //Put data into buffer, sends the data UDR0 = data; } void sendstring(char *strin) { int k = strlen(strin); for (int i = 0; i < k; i++) { while ((UCSR0A & _BV(UDRE0)) == 0); UDR0 = strin[i]; } } void dec_print(int16_t inp) { char mas[8]; if (inp < 0) { uart_send('-'); inp = abs(inp); } itoa(inp, mas, 10); sendstring(mas); //uart_send(13); } void bin_print(unsigned char inp) { for (unsigned char i = 8; i > 0; i--) { if (inp & _BV(i - 1)) { uart_send('1'); } else { uart_send('0'); } } } void hex_print(uint32_t inp) { char mas[15]; itoa(inp, mas, 16); sendstring("0x"); sendstring(mas); } void cr(void) { uart_send('\r'); } unsigned char UART_Receive(void) { //Wait for data to be received while (!(UCSR0A & (1 << RXC0))); //Get and return received data from buffer return UDR0; }