Files
42_EXT_03_42chips/module06/ex00/uart.c
2025-03-15 18:34:10 +01:00

84 lines
2.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "header.h"
// MACROS
// USART
#define USART_BAUDRATE 115200
#define INPUT_SIZE 7
// GLOBAL VARIABLES
//
// FUNCTIONS
//
void uart_init() {
UBRR0H = (unsigned char) (BAUD_PRESCALER(USART_BAUDRATE) >> 8); // 20.11.5 : UBRRnL and UBRRnH USART Baud Rate Registers
UBRR0L = (unsigned char) BAUD_PRESCALER(USART_BAUDRATE);
UCSR0C = DATA_EIGHT_BIT; // 20.11.4 : set Frame Format
UCSR0B = TRANSMITTER_ENABLED; // 20.11.3 : enable Receiver, Transmitter, and interrupts
}
// char uart_rx(void) {
// while (!TEST(UCSR0A, RXC0)); // 20.11.2 : do nothing until there are unread data in the receive buffer (UDRn), (RXCn flag in UCSRnA register set to 1 when buffer has data)
// return UDR0; // 20.11.1 : get data in buffer, UDRn USART I/O Data Register (read and write)
// }
void uart_tx(char c) {
while (!TEST(UCSR0A, UDRE0)); // 20.11.2 : do nothing until UDRn buffer is empty, (UDREn flag in UCSRnA register set to 1 when buffer empty)
UDR0 = (unsigned char) c; // 20.11.1 : Put data into buffer, UDRn USART I/O Data Register (read and write)
}
void uart_printstr(const char* str) {
while (*str) {
uart_tx(*str);
str++;
}
}
void uart_printstr_endl(const char* str) {
uart_printstr(str);
uart_printstr("\r\n");
}
void uart_printstr_itoa_base(uint64_t value) {
char buffer[17] = {0};
int_to_string((uint16_t)value, buffer);
uart_printstr(buffer);
}
// ISR(USART_RX_vect) { // Table 12-6 : we select the code for USART Receive
// char received_char = UDR0; // read received character
// if (received_char == '\b' || received_char == 127) { // if backspace is received
// if (input_index <= 0) {
// return;
// }
// if (input_index >= INPUT_SIZE) {
// return;
// }
// remove_last_character();
// input_index--;
// uart_tx('\b'); // Move cursor back
// uart_tx(' '); // Erase the character on screen
// uart_tx('\b'); // Move cursor back again
// } else if (received_char == '\n' || received_char == '\r') { // if enter is received
// if (input_index != INPUT_SIZE) {
// return;
// }
// set_color((char *)color_input);
// reset_input();
// } else { // any other character
// if (input_index >= INPUT_SIZE) {
// return;
// }
// if (!is_valid_color_input(received_char)) {
// return;
// }
// fill_str(received_char);
// uart_tx(received_char);
// input_index++;
// }
// }
// ISR(USART_TX_vect) { // Table 12-6 : we select the code for USART Transmit
// char received_char = UDR0; // read received character
// }