aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/machine/board_arduino_mega2560.go
blob: 2e4aefd874dfd857586ef6b1e9b4fc12709f6e23 (plain)
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
//go: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)
}