picadae/ctrl/Makefile,main.c : Added code to allow ATMega2560 as target.

This commit is contained in:
kevin.larke 2019-11-18 09:35:08 -05:00
parent 3fbe3ad019
commit db1ab31279
2 changed files with 38 additions and 29 deletions

View File

@ -2,14 +2,39 @@ ifndef TTY
TTY=/dev/ttyACM0
endif
MMCU=atmega328
#MMCU=atmega2560
ifeq ($(MMCU),atmega328)
PROG_MMCU=atmega328p
PROG_DEV=arduino
AVRD_CONF=
DISABLE_AUTO_ERASE=
SKIP_CHECKS=-FV
endif
ifeq ($(MMCU),atmega2560)
PROG_MMCU=$(MMCU)
PROG_DEV=wiring
AVRD_CONF=-C/etc/avrdude/avrdude.conf
DISABLE_AUTO_ERASE=-D
SKIP_CHECKS=-FV
endif
# compiler flags:
# -Os : optimize size
# -DF_CPU=16000000UL : define F_CPU as 16Mghz
# -mmcu=atmega328p : target MCU
# -F : skip device signature read
# -V : disable automatic verify step
# -v : enable verbose output
# -D : disable auto erase flash
main.hex : main.c
# compile to object file (optimize for size)
avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -o main.elf main.c twi.c
avr-gcc -Os -DF_CPU=16000000UL -mmcu=$(MMCU) -o main.elf main.c twi.c
# link as ELF binary
#avr-gcc -mmcu=atmega328p main.o -o main.elf
# convert ELF format to an IHEX format as used by avrdude
@ -17,7 +42,7 @@ main.hex : main.c
burn:
avrdude -F -V -c arduino -p ATMEGA328P -P $(TTY) -b 115200 -U flash:w:main.hex
avrdude $(SKIP_CHECKS) -v $(AVRD_CONF) -c$(PROG_DEV) -p$(PROG_MMCU) -P$(TTY) -b 115200 $(DISABLE_AUTO_ERASE) -U flash:w:main.hex:i
clean :
rm main.o twi.o main.elf main.hex

View File

@ -10,6 +10,16 @@
#include "twi.h"
#define ICP_PRE_SCALE (4)
#if defined(__AVR_ATmega2560__)
#define SERIAL_RX_ISR USART0_RX_vect
#elif defined(__AVR_ATmega328__)
#define SERIAL_RX_ISR USART_RX_vect
#else
#error Unknown target processor
#endif
//------------------------------------------------------------------------------
#define SER_BUF_N (16) // size of receive buffer
@ -102,7 +112,7 @@ void i2c_init()
twi_init();
}
ISR(USART_RX_vect)
ISR(SERIAL_RX_ISR)
{
// receive the incoming byte
ser_buf[ ser_buf_i_idx ] = uart_getchar();
@ -112,25 +122,6 @@ ISR(USART_RX_vect)
}
//--------------------------------------------------------------------------------------------------
static volatile int timerFl = 0;
ISR(TIMER1_COMPA_vect)
{
timerFl = 1;
}
void timer_init(void)
{
TCCR1A = 0; // set timer control registers to default
TCCR1B = 0; //
OCR1A = 15624; // 1 Hz = 16Mghz / (1024 * 15624)
TCCR1B |= (1 << WGM12); // CTC mode on
TCCR1B |= (1 << CS10); // Set CS10 and CS12 bits for 1024 prescaler:
TCCR1B |= (1 << CS12); //
TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt
}
//--------------------------------------------------------------------------------------------------
@ -156,7 +147,6 @@ int main (void)
DDRB |= _BV(DDB5); // set led pin for output
timer_init(); // setup the timer
uart_init(); // setup UART data format and baud rate
i2c_init();
sei(); // re-enable interrupts
@ -165,12 +155,6 @@ int main (void)
for(;;)
{
if( timerFl )
{
//PORTB ^= _BV(PORTB5); // toggle LED
timerFl = 0;
}
// if there are bytes waiting in the serial buffer
if( ser_buf_o_idx != ser_buf_i_idx )