From 84cf9165d1a83ef4976423f8775bacb509ebb80f Mon Sep 17 00:00:00 2001 From: Leon Krieg Date: Sat, 24 Aug 2024 22:02:52 +0200 Subject: [PATCH] Test serial data transmission on atmega32a --- Makefile | 7 +++++-- src/main.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 2be064a..9a47560 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ # Written by Leon Krieg ARCH := m32 -FREQ := 1600000UL +FREQ := 8000000UL MCU := atmega32a ASP := usbasp GCC := avr-gcc @@ -22,7 +22,10 @@ all: flash .PHONY: flash flash: $(TARGET) - $(AVD) -c $(ASP) -p $(ARCH) -U flash:w:$(TARGET) + $(AVD) -c $(ASP) -p $(ARCH) \ + -U lfuse:w:0xff:m \ + -U hfuse:w:0x99:m \ + -U flash:w:$(TARGET) $(TARGET): src/main.c $(GCC) -o $(ELFILE) $(CFLAGS) $(CPPFLAGS) $^ -mmcu=$(MCU) diff --git a/src/main.c b/src/main.c index 258b76a..85b6605 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,51 @@ -#define UNUSED(s) (void)(s) +#include +#include +#include +#include + +#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) + +void UART_Init(long USART_BAUDRATE) +{ + UCSRB |= (1 << RXEN) | (1 << TXEN); + UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); + UBRRL = BAUD_PRESCALE; + UBRRH = (BAUD_PRESCALE >> 8); +} + +unsigned char UART_RxChar() +{ + while ((UCSRA & (1 << RXC)) == 0); + return UDR; +} + +void UART_TxChar(char ch) +{ + while ((UCSRA & (1 << UDRE)) == 0); + UDR = ch; +} + +void UART_SendString(char *str) +{ + unsigned char j = 0; + + while (str[j] != 0) { + UART_TxChar(str[j++]); + } +} int main(void) { + char buf[64]; + + UART_Init(9600); + + for (int i = 1;; i++) { + if (i >= 999) i = 1; + sprintf(buf, "BOINK #%03d\r\n", i); + UART_SendString(buf); + _delay_ms(3000); + } + return 0; }