1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
//go:build arduino_mega2560
// +build arduino_mega2560
package machine
import (
"device/avr"
"runtime/interrupt"
)
// Return the current CPU frequency in hertz.
func CPUFrequency() uint32 {
return 16000000
}
const (
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 // TX3
D15 Pin = PJ0 // RX3
D16 Pin = PH1 // TX2
D17 Pin = PH0 // RX2
D18 Pin = PD3 // TX1
D19 Pin = PD2 // RX1
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
AREF Pin = NoPin
LED Pin = PB7
)
// UART pins
const (
UART_TX_PIN Pin = UART0_TX_PIN
UART_RX_PIN Pin = UART0_RX_PIN
UART0_TX_PIN Pin = D1
UART0_RX_PIN Pin = D0
UART1_TX_PIN Pin = D18
UART1_RX_PIN Pin = D19
UART2_TX_PIN Pin = D16
UART2_RX_PIN Pin = D17
UART3_TX_PIN Pin = D14
UART3_RX_PIN Pin = D15
)
var (
UART1 = &_UART1
_UART1 = UART{
Buffer: NewRingBuffer(),
dataReg: avr.UDR1,
baudRegH: avr.UBRR1H,
baudRegL: avr.UBRR1L,
statusRegA: avr.UCSR1A,
statusRegB: avr.UCSR1B,
statusRegC: avr.UCSR1C,
}
UART2 = &_UART2
_UART2 = UART{
Buffer: NewRingBuffer(),
dataReg: avr.UDR2,
baudRegH: avr.UBRR2H,
baudRegL: avr.UBRR2L,
statusRegA: avr.UCSR2A,
statusRegB: avr.UCSR2B,
statusRegC: avr.UCSR2C,
}
UART3 = &_UART3
_UART3 = UART{
Buffer: NewRingBuffer(),
dataReg: avr.UDR3,
baudRegH: avr.UBRR3H,
baudRegL: avr.UBRR3L,
statusRegA: avr.UCSR3A,
statusRegB: avr.UCSR3B,
statusRegC: avr.UCSR3C,
}
)
func init() {
interrupt.New(irq_USART1_RX, _UART1.handleInterrupt)
interrupt.New(irq_USART2_RX, _UART2.handleInterrupt)
interrupt.New(irq_USART3_RX, _UART3.handleInterrupt)
}
|