Intial commit
This commit is contained in:
parent
da267c18a0
commit
9931aaf299
|
@ -0,0 +1,2 @@
|
|||
.vscode/
|
||||
bin/
|
|
@ -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
|
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue