aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authordeveloper <[email protected]>2021-04-05 19:30:40 -0300
committerRon Evans <[email protected]>2021-04-12 11:03:13 +0200
commitaa8e12c464045aff00bff2d2ce628a393983b6cd (patch)
tree3d5f771441646a4eb002c4ebd46c0a5feb848a9c
parente7a05b6e74d0c7f91bc0049ec9bfca0bf65a78f7 (diff)
downloadtinygo-aa8e12c464045aff00bff2d2ce628a393983b6cd.tar.gz
tinygo-aa8e12c464045aff00bff2d2ce628a393983b6cd.zip
Arduino Mega 1280 support
Fix ldflags Update targets/arduino-mega1280.json Co-authored-by: Ayke <[email protected]> Update atmega1280.json Update Makefile
-rw-r--r--Makefile2
-rw-r--r--src/machine/board_arduino_mega1280.go104
-rw-r--r--src/machine/machine_atmega1280.go138
-rw-r--r--targets/arduino-mega1280.json8
-rw-r--r--targets/atmega1280.json17
5 files changed, 269 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index bcaf50559..ba23392c5 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 000000000..289b55b2b
--- /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 000000000..22217a32b
--- /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 000000000..cb1ad4bf3
--- /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 000000000..21324a36d
--- /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"
+ ]
+}