From 5089d1a5a79a605304db114718145666635bbb77 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Tue, 10 Mar 2020 18:40:15 +0100 Subject: [PATCH] avr: add atmega1284 chip support Not tested on actual hardware, only on simavr. The main motivation for adding this chip is to be able to run simulated tests using a much larger memory space (16kB RAM, 128kB flash) without jumping to the XMega devices that may not be as well supported by LLVM. --- Makefile | 2 ++ src/machine/machine_atmega.go | 2 +- src/machine/machine_atmega1284p.go | 12 ++++++++++++ src/machine/machine_atmega328p.go | 7 +++++++ targets/atmega1284p.json | 19 +++++++++++++++++++ 5 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/machine/machine_atmega1284p.go create mode 100644 src/machine/machine_atmega328p.go create mode 100644 targets/atmega1284p.json diff --git a/Makefile b/Makefile index 7213eaf7..41f4d8fa 100644 --- a/Makefile +++ b/Makefile @@ -287,6 +287,8 @@ smoketest: $(TINYGO) build -size short -o test.hex -target=pca10056-s140v7 examples/blinky1 @$(MD5SUM) test.hex ifneq ($(AVR), 0) + $(TINYGO) build -size short -o test.hex -target=atmega1284p examples/serial + @$(MD5SUM) test.hex $(TINYGO) build -size short -o test.hex -target=arduino examples/blinky1 @$(MD5SUM) test.hex $(TINYGO) build -size short -o test.hex -target=arduino-nano examples/blinky1 diff --git a/src/machine/machine_atmega.go b/src/machine/machine_atmega.go index 16395fe4..34014347 100644 --- a/src/machine/machine_atmega.go +++ b/src/machine/machine_atmega.go @@ -234,7 +234,7 @@ func (uart UART) Configure(config UARTConfig) { } // Register the UART interrupt. - interrupt.New(avr.IRQ_USART_RX, func(intr interrupt.Interrupt) { + interrupt.New(irq_USART0_RX, func(intr interrupt.Interrupt) { // Read register to clear it. data := avr.UDR0.Get() diff --git a/src/machine/machine_atmega1284p.go b/src/machine/machine_atmega1284p.go new file mode 100644 index 00000000..d94db284 --- /dev/null +++ b/src/machine/machine_atmega1284p.go @@ -0,0 +1,12 @@ +// +build avr,atmega1284p + +package machine + +import "device/avr" + +const irq_USART0_RX = avr.IRQ_USART0_RX + +// Return the current CPU frequency in hertz. +func CPUFrequency() uint32 { + return 20000000 +} diff --git a/src/machine/machine_atmega328p.go b/src/machine/machine_atmega328p.go new file mode 100644 index 00000000..91252d6d --- /dev/null +++ b/src/machine/machine_atmega328p.go @@ -0,0 +1,7 @@ +// +build avr,atmega328p + +package machine + +import "device/avr" + +const irq_USART0_RX = avr.IRQ_USART_RX diff --git a/targets/atmega1284p.json b/targets/atmega1284p.json new file mode 100644 index 00000000..a2c40ef2 --- /dev/null +++ b/targets/atmega1284p.json @@ -0,0 +1,19 @@ +{ + "inherits": ["avr"], + "llvm-target": "avr-atmel-none", + "cpu": "atmega1284p", + "build-tags": ["atmega1284p", "atmega"], + "cflags": [ + "-mmcu=atmega1284p" + ], + "ldflags": [ + "-mmcu=avr51", + "-Wl,--defsym=_bootloader_size=0", + "-Wl,--defsym=_stack_size=512" + ], + "linkerscript": "src/device/avr/atmega1284p.ld", + "extra-files": [ + "targets/avr.S", + "src/device/avr/atmega1284p.s" + ] +}