From aa8e12c464045aff00bff2d2ce628a393983b6cd Mon Sep 17 00:00:00 2001 From: developer Date: Mon, 5 Apr 2021 19:30:40 -0300 Subject: [PATCH] Arduino Mega 1280 support Fix ldflags Update targets/arduino-mega1280.json Co-authored-by: Ayke Update atmega1280.json Update Makefile --- Makefile | 2 + src/machine/board_arduino_mega1280.go | 104 +++++++++++++++++++ src/machine/machine_atmega1280.go | 138 ++++++++++++++++++++++++++ targets/arduino-mega1280.json | 8 ++ targets/atmega1280.json | 17 ++++ 5 files changed, 269 insertions(+) create mode 100644 src/machine/board_arduino_mega1280.go create mode 100644 src/machine/machine_atmega1280.go create mode 100644 targets/arduino-mega1280.json create mode 100644 targets/atmega1280.json diff --git a/Makefile b/Makefile index bcaf5055..ba23392c 100644 --- a/Makefile +++ b/Makefile @@ -374,6 +374,8 @@ ifneq ($(AVR), 0) @$(MD5SUM) test.hex $(TINYGO) build -size short -o test.hex -target=arduino -scheduler=tasks examples/blinky1 @$(MD5SUM) test.hex + $(TINYGO) build -size short -o test.hex -target=arduino-mega1280 examples/blinky1 + @$(MD5SUM) test.hex $(TINYGO) build -size short -o test.hex -target=arduino-nano examples/blinky1 @$(MD5SUM) test.hex $(TINYGO) build -size short -o test.hex -target=digispark examples/blinky1 diff --git a/src/machine/board_arduino_mega1280.go b/src/machine/board_arduino_mega1280.go new file mode 100644 index 00000000..289b55b2 --- /dev/null +++ b/src/machine/board_arduino_mega1280.go @@ -0,0 +1,104 @@ +// +build arduino_mega1280 + +package machine + +// Return the current CPU frequency in hertz. +func CPUFrequency() uint32 { + return 16000000 +} + +const ( + AREF Pin = NoPin + LED Pin = PB7 + + A0 Pin = PF0 + A1 Pin = PF1 + A2 Pin = PF2 + A3 Pin = PF3 + A4 Pin = PF4 + A5 Pin = PF5 + A6 Pin = PF6 + A7 Pin = PF7 + A8 Pin = PK0 + A9 Pin = PK1 + A10 Pin = PK2 + A11 Pin = PK3 + A12 Pin = PK4 + A13 Pin = PK5 + A14 Pin = PK6 + A15 Pin = PK7 + + // Analog Input + ADC0 Pin = PF0 + ADC1 Pin = PF1 + ADC2 Pin = PF2 + ADC3 Pin = PF3 + ADC4 Pin = PF4 + ADC5 Pin = PF5 + ADC6 Pin = PF6 + ADC7 Pin = PF7 + ADC8 Pin = PK0 + ADC9 Pin = PK1 + ADC10 Pin = PK2 + ADC11 Pin = PK3 + ADC12 Pin = PK4 + ADC13 Pin = PK5 + ADC14 Pin = PK6 + ADC15 Pin = PK7 + + // Digital pins + D0 Pin = PE0 + D1 Pin = PE1 + D2 Pin = PE4 + D3 Pin = PE5 + D4 Pin = PG5 + D5 Pin = PE3 + D6 Pin = PH3 + D7 Pin = PH4 + D8 Pin = PH5 + D9 Pin = PH6 + D10 Pin = PB4 + D11 Pin = PB5 + D12 Pin = PB6 + D13 Pin = PB7 + D14 Pin = PJ1 + D15 Pin = PJ0 + D16 Pin = PH1 + D17 Pin = PH0 + D18 Pin = PD3 + D19 Pin = PD2 + D20 Pin = PD1 + D21 Pin = PD0 + D22 Pin = PA0 + D23 Pin = PA1 + D24 Pin = PA2 + D25 Pin = PA3 + D26 Pin = PA4 + D27 Pin = PA5 + D28 Pin = PA6 + D29 Pin = PA7 + D30 Pin = PC7 + D31 Pin = PC6 + D32 Pin = PC5 + D33 Pin = PC4 + D34 Pin = PC3 + D35 Pin = PC2 + D36 Pin = PC1 + D37 Pin = PC0 + D38 Pin = PD7 + D39 Pin = PG2 + D40 Pin = PG1 + D41 Pin = PG0 + D42 Pin = PL7 + D43 Pin = PL6 + D44 Pin = PL5 + D45 Pin = PL4 + D46 Pin = PL3 + D47 Pin = PL2 + D48 Pin = PL1 + D49 Pin = PL0 + D50 Pin = PB3 + D51 Pin = PB2 + D52 Pin = PB1 + D53 Pin = PB0 +) diff --git a/src/machine/machine_atmega1280.go b/src/machine/machine_atmega1280.go new file mode 100644 index 00000000..22217a32 --- /dev/null +++ b/src/machine/machine_atmega1280.go @@ -0,0 +1,138 @@ +// +build avr,atmega1280 + +package machine + +import ( + "device/avr" + "runtime/volatile" +) + +const irq_USART0_RX = avr.IRQ_USART0_RX + +const ( + portA Pin = iota * 8 + portB + portC + portD + portE + portF + portG + portH + portJ + portK + portL +) + +const ( + PA0 = portA + 0 + PA1 = portA + 1 + PA2 = portA + 2 + PA3 = portA + 3 + PA4 = portA + 4 + PA5 = portA + 5 + PA6 = portA + 6 + PA7 = portA + 7 + PB0 = portB + 0 + PB1 = portB + 1 + PB2 = portB + 2 + PB3 = portB + 3 + PB4 = portB + 4 + PB5 = portB + 5 + PB6 = portB + 6 + PB7 = portB + 7 + PC0 = portC + 0 + PC1 = portC + 1 + PC2 = portC + 2 + PC3 = portC + 3 + PC4 = portC + 4 + PC5 = portC + 5 + PC6 = portC + 6 + PC7 = portC + 7 + PD0 = portD + 0 + PD1 = portD + 1 + PD2 = portD + 2 + PD3 = portD + 3 + PD7 = portD + 7 + PE0 = portE + 0 + PE1 = portE + 1 + PE3 = portE + 3 + PE4 = portE + 4 + PE5 = portE + 5 + PE6 = portE + 6 + PF0 = portF + 0 + PF1 = portF + 1 + PF2 = portF + 2 + PF3 = portF + 3 + PF4 = portF + 4 + PF5 = portF + 5 + PF6 = portF + 6 + PF7 = portF + 7 + PG0 = portG + 0 + PG1 = portG + 1 + PG2 = portG + 2 + PG5 = portG + 5 + PH0 = portH + 0 + PH1 = portH + 1 + PH3 = portH + 3 + PH4 = portH + 4 + PH5 = portH + 5 + PH6 = portH + 6 + PJ0 = portJ + 0 + PJ1 = portJ + 1 + PK0 = portK + 0 + PK1 = portK + 1 + PK2 = portK + 2 + PK3 = portK + 3 + PK4 = portH + 4 + PK5 = portH + 5 + PK6 = portH + 6 + PK7 = portH + 7 + PL0 = portL + 0 + PL1 = portL + 1 + PL2 = portL + 2 + PL3 = portL + 3 + PL4 = portL + 4 + PL5 = portL + 5 + PL6 = portL + 6 + PL7 = portL + 7 +) + +// getPortMask returns the PORTx register and mask for the pin. +func (p Pin) getPortMask() (*volatile.Register8, uint8) { + switch { + case p >= PA0 && p <= PA7: + return avr.PORTA, 1 << uint8(p-portA) + case p >= PB0 && p <= PB7: + return avr.PORTB, 1 << uint8(p-portB) + case p >= PC0 && p <= PC7: + return avr.PORTC, 1 << uint8(p-portC) + case p >= PD0 && p <= PD7: + return avr.PORTD, 1 << uint8(p-portD) + case p >= PE0 && p <= PE6: + return avr.PORTE, 1 << uint8(p-portE) + case p >= PF0 && p <= PF7: + return avr.PORTF, 1 << uint8(p-portF) + case p >= PG0 && p <= PG5: + return avr.PORTG, 1 << uint8(p-portG) + case p >= PH0 && p <= PH6: + return avr.PORTH, 1 << uint8(p-portH) + case p >= PJ0 && p <= PJ1: + return avr.PORTJ, 1 << uint8(p-portJ) + case p >= PK0 && p <= PK7: + return avr.PORTK, 1 << uint8(p-portK) + case p >= PL0 && p <= PL7: + return avr.PORTL, 1 << uint8(p-portL) + default: + return avr.PORTA, 255 + } +} + +// SPI configuration +var SPI0 = SPI{ + spcr: avr.SPCR, + spdr: avr.SPDR, + spsr: avr.SPSR, + sck: PB1, + sdo: PB2, + sdi: PB3, + cs: PB0} diff --git a/targets/arduino-mega1280.json b/targets/arduino-mega1280.json new file mode 100644 index 00000000..cb1ad4bf --- /dev/null +++ b/targets/arduino-mega1280.json @@ -0,0 +1,8 @@ +{ + "inherits": ["atmega1280"], + "build-tags": ["arduino_mega1280"], + "ldflags": [ + "-Wl,--defsym=_bootloader_size=4096" + ], + "flash-command":"avrdude -c arduino -b 57600 -p atmega1280 -P {port} -U flash:w:{hex}:i -v -D" +} diff --git a/targets/atmega1280.json b/targets/atmega1280.json new file mode 100644 index 00000000..21324a36 --- /dev/null +++ b/targets/atmega1280.json @@ -0,0 +1,17 @@ +{ + "inherits": ["avr"], + "cpu": "atmega1280", + "build-tags": ["atmega1280", "atmega"], + "cflags": [ + "-mmcu=atmega1280" + ], + "ldflags": [ + "-mmcu=avr51", + "-Wl,--defsym=_stack_size=512" + ], + "linkerscript": "src/device/avr/atmega1280.ld", + "extra-files": [ + "targets/avr.S", + "src/device/avr/atmega1280.s" + ] +}