Intial commit

This commit is contained in:
Jimmy 2020-12-10 14:58:46 +13:00
parent da267c18a0
commit 9931aaf299
6 changed files with 143 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.vscode/
bin/

28
makefile Normal file
View File

@ -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

21
src/main.cpp Normal file
View File

@ -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);
}
}

65
src/usart.cpp Normal file
View File

@ -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

14
src/usart.h Normal file
View File

@ -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

13
term.py Normal file
View File

@ -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)