From 9931aaf299e3d8c1263cc7f1148bd1e6fe7314e8 Mon Sep 17 00:00:00 2001 From: Jimmy <me@jimmy.nz> Date: Thu, 10 Dec 2020 14:58:46 +1300 Subject: [PATCH] Intial commit --- .gitignore | 2 ++ makefile | 28 ++++++++++++++++++++++ src/main.cpp | 21 +++++++++++++++++ src/usart.cpp | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/usart.h | 14 +++++++++++ term.py | 13 +++++++++++ 6 files changed, 143 insertions(+) create mode 100644 .gitignore create mode 100644 makefile create mode 100644 src/main.cpp create mode 100644 src/usart.cpp create mode 100644 src/usart.h create mode 100644 term.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..662f6d5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.vscode/ +bin/ diff --git a/makefile b/makefile new file mode 100644 index 0000000..661d854 --- /dev/null +++ b/makefile @@ -0,0 +1,28 @@ +MCU=atmega32 +F_CPU=8000000 +PROG=dragon_jtag +PORT?=/dev/ttyUSB0 +CC=avr-g++ +OBJCOPY=avr-objcopy +CFLAGS=-Wall -g -mmcu=${MCU} -DF_CPU=${F_CPU} -I. +TARGET=main +SRCS= src/*.cpp + +all: build flash + +build: + ${CC} ${CFLAGS} -o bin/${TARGET}.bin ${SRCS} + ${CC} ${CFLAGS} -o bin/${TARGET}.elf ${SRCS} + ${OBJCOPY} -j .text -j .data -O ihex bin/${TARGET}.bin bin/${TARGET}.hex + +flash: + avrdude -p ${MCU} -c ${PROG} -U flash:w:bin/main.hex + +clean: + rm -f bin/* + +term: + python3 term.py + +avarice: + avarice --program --file bin/main.elf --part atmega32 --dragon :4242 diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..770521e --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,21 @@ +#include <avr/io.h> +#include <avr/interrupt.h> +#include "usart.h" +#include <util/delay.h> + + + + + +int main (void) { + DDRD |= (1<<PD3)|(1<<PD4)|(1<<PD5); + usart::init(9600); + for (;;) {// Loop forever + usart::put('A'); + //printf("Hello"); + PORTD ^= (1<<PD3)|(1<<PD4)|(1<<PD5); + _delay_ms(1000); + + } +} + diff --git a/src/usart.cpp b/src/usart.cpp new file mode 100644 index 0000000..4758601 --- /dev/null +++ b/src/usart.cpp @@ -0,0 +1,65 @@ +#include <avr/io.h> +#include <avr/interrupt.h> +#include "usart.h" + +namespace usart +{ + namespace { + static FILE mystdout; + } + + void init( unsigned long baud) { + fdev_setup_stream(&mystdout, put_printf, NULL, _FDEV_SETUP_WRITE); + stdout = &mystdout; + const unsigned int ubrr = F_CPU/8/baud-1; + + /*Set baud rate */ + + + #if defined __AVR_ATmega328P__ + UBRR0H = (unsigned char)(ubrr>>8); + UBRR0L = (unsigned char)ubrr; + UCSR0A |= (1<<U2X0); + //Enable receiver and transmitter + UCSR0B = (1<<RXEN0)|(1<<TXEN0); + //UCSRB |= (1<< RXCIE)|(1<<TXCIE); + /* Set frame format: 8data, 2stop bit */ + UCSR0C = (1<<USBS0)|(3<<UCSZ00); + #elif defined __AVR_ATmega32__ || defined __AVR_ATmega16__ + UBRRH = (unsigned char)(ubrr>>8); + UBRRL = (unsigned char)ubrr; + UCSRA |= (1<<U2X); + //Enable receiver and transmitter + UCSRB = (1<<RXEN)|(1<<TXEN); + //UCSRB |= (1<< RXCIE)|(1<<TXCIE); + /* Set frame format: 8data, 2stop bit */ + UCSRC = (1 << URSEL)|(3<<UCSZ0); + #endif + + } + + void put(char data) { + #if defined __AVR_ATmega328P__ + while ( !( UCSR0A & (1<<UDRE0)) ); UDR0 = data; + #elif defined __AVR_ATmega32__ || defined __AVR_ATmega16__ + while ( !( UCSRA & (1<<UDRE)) ); UDR = data; + #endif + + + } + + char get( void ) { + #if defined __AVR_ATmega328P__ + while ( !(UCSR0A & (1<<RXC0)) ); return UDR0; + #elif defined __AVR_ATmega32__ || defined __AVR_ATmega16__ + while ( !(UCSRA & (1<<RXC)) ); return UDR; + #endif + } + + int put_printf(char var, FILE *stream) { + put(var); + return 0; + } +} // namespace usart + + diff --git a/src/usart.h b/src/usart.h new file mode 100644 index 0000000..ffad848 --- /dev/null +++ b/src/usart.h @@ -0,0 +1,14 @@ +#pragma once + +#include <stdio.h> + +namespace usart +{ + void init(unsigned long baud); + void put(char data ); + char get(); + int put_printf(char var, FILE *stream); +} // namespace usart + + + diff --git a/term.py b/term.py new file mode 100644 index 0000000..a6c0b3d --- /dev/null +++ b/term.py @@ -0,0 +1,13 @@ +import serial +from time import sleep + +with serial.Serial('/dev/ttyUSB0', 9600, timeout=1) as ser: + ser.write(b'a') + while True: + x = ser.read() # read one byte + if x != b'': + pass + print(x.decode('utf')) + #ser.write(b'a') + #print(ser.read()) + sleep(1) \ No newline at end of file