Skip to content

Commit fc9188a

Browse files
deadprogramaykevl
authored andcommitted
machine/samd21/arduino-nano33: adds support for Arduino Nano33 IoT along with mapping to NINA-W102 WiFi chip.
Also adds DTR and RTS functions along with timeouts to USBCDC functions to prevent lockups. Signed-off-by: Ron Evans <[email protected]>
1 parent ffa38b1 commit fc9188a

File tree

8 files changed

+272
-32
lines changed

8 files changed

+272
-32
lines changed
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
// +build sam,atsamd21,arduino_nano33
2+
3+
// This contains the pin mappings for the Arduino Nano33 IoT board.
4+
//
5+
// For more information, see: https://store.arduino.cc/nano-33-iot
6+
//
7+
package machine
8+
9+
import "device/sam"
10+
11+
// GPIO Pins
12+
const (
13+
RX0 Pin = PB23 // UART2 RX
14+
TX1 Pin = PB22 // UART2 TX
15+
16+
D2 Pin = PB10 // PWM available
17+
D3 Pin = PB11 // PWM available
18+
D4 Pin = PA07
19+
D5 Pin = PA05 // PWM available
20+
D6 Pin = PA04 // PWM available
21+
D7 Pin = PA06
22+
23+
D8 Pin = PA18
24+
D9 Pin = PA20 // PWM available
25+
D10 Pin = PA21 // PWM available
26+
D11 Pin = PA16 // PWM available
27+
D12 Pin = PA19 // PWM available
28+
29+
D13 Pin = PA17
30+
)
31+
32+
// Analog pins
33+
const (
34+
A0 Pin = PA02 // ADC/AIN[0]
35+
A1 Pin = PB02 // ADC/AIN[10]
36+
A2 Pin = PA11 // ADC/AIN[19]
37+
A3 Pin = PA10 // ADC/AIN[18]
38+
A4 Pin = PB08 // ADC/AIN[2], SCL: SERCOM2/PAD[1]
39+
A5 Pin = PB09 // ADC/AIN[3], SDA: SERCOM2/PAD[1]
40+
A6 Pin = PA09 // ADC/AIN[17]
41+
A7 Pin = PB03 // ADC/AIN[11]
42+
)
43+
44+
const (
45+
LED = D13
46+
)
47+
48+
// NINA-W102 Pins
49+
50+
const (
51+
NINA_MOSI Pin = PA12
52+
NINA_MISO Pin = PA13
53+
NINA_CS Pin = PA14
54+
NINA_SCK Pin = PA15
55+
NINA_GPIO0 Pin = PA27
56+
NINA_RESETN Pin = PA08
57+
NINA_ACK Pin = PA28
58+
)
59+
60+
// UART0 aka USBCDC pins
61+
const (
62+
USBCDC_DM_PIN Pin = PA24
63+
USBCDC_DP_PIN Pin = PA25
64+
)
65+
66+
// UART1 on the Arduino Nano 33 connects to the onboard NINA-W102 WiFi chip.
67+
var (
68+
UART1 = UART{Bus: sam.SERCOM5_USART,
69+
Buffer: NewRingBuffer(),
70+
Mode: PinSERCOMAlt,
71+
IRQVal: sam.IRQ_SERCOM5,
72+
}
73+
)
74+
75+
// UART1 pins
76+
const (
77+
UART_TX_PIN Pin = PA22
78+
UART_RX_PIN Pin = PA23
79+
)
80+
81+
//go:export SERCOM5_IRQHandler
82+
func handleUART1() {
83+
defaultUART1Handler()
84+
}
85+
86+
// UART2 on the Arduino Nano 33 connects to the normal TX/RX pins.
87+
var (
88+
UART2 = UART{Bus: sam.SERCOM3_USART,
89+
Buffer: NewRingBuffer(),
90+
Mode: PinSERCOMAlt,
91+
IRQVal: sam.IRQ_SERCOM3,
92+
}
93+
)
94+
95+
//go:export SERCOM3_IRQHandler
96+
func handleUART2() {
97+
// should reset IRQ
98+
UART2.Receive(byte((UART2.Bus.DATA.Get() & 0xFF)))
99+
UART2.Bus.INTFLAG.SetBits(sam.SERCOM_USART_INTFLAG_RXC)
100+
}
101+
102+
// I2C pins
103+
const (
104+
SDA_PIN Pin = A4 // SDA: SERCOM4/PAD[1]
105+
SCL_PIN Pin = A5 // SCL: SERCOM4/PAD[1]
106+
)
107+
108+
// I2C on the Arduino Nano 33.
109+
var (
110+
I2C0 = I2C{Bus: sam.SERCOM4_I2CM,
111+
SDA: SDA_PIN,
112+
SCL: SCL_PIN,
113+
PinMode: PinSERCOMAlt}
114+
)
115+
116+
// SPI pins
117+
const (
118+
SPI0_SCK_PIN Pin = PB11 // SCK: SERCOM4/PAD[3]
119+
SPI0_MOSI_PIN Pin = PB10 // MOSI: SERCOM4/PAD[2]
120+
SPI0_MISO_PIN Pin = PA12 // MISO: SERCOM4/PAD[0]
121+
)
122+
123+
// SPI on the Arduino Nano 33.
124+
var (
125+
SPI0 = SPI{Bus: sam.SERCOM1_SPI}
126+
)
127+
128+
// I2S pins
129+
const (
130+
I2S_SCK_PIN Pin = PA10
131+
I2S_SD_PIN Pin = PA08
132+
I2S_WS_PIN = NoPin // TODO: figure out what this is on Arduino Nano 33.
133+
)
134+
135+
// I2S on the Arduino Nano 33.
136+
var (
137+
I2S0 = I2S{Bus: sam.I2S}
138+
)

src/machine/board_circuitplay_express.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,20 @@ const (
6565
UART_RX_PIN = PB09 // PORTB
6666
)
6767

68+
// UART1 on the Circuit Playground Express.
69+
var (
70+
UART1 = UART{Bus: sam.SERCOM1_USART,
71+
Buffer: NewRingBuffer(),
72+
Mode: PinSERCOM,
73+
IRQVal: sam.IRQ_SERCOM1,
74+
}
75+
)
76+
77+
//go:export SERCOM1_IRQHandler
78+
func handleUART1() {
79+
defaultUART1Handler()
80+
}
81+
6882
// I2C pins
6983
const (
7084
SDA_PIN = PB02 // I2C0 external

src/machine/board_feather-m0.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,20 @@ const (
4848
UART_RX_PIN = D11
4949
)
5050

51+
// UART1 on the Feather M0.
52+
var (
53+
UART1 = UART{Bus: sam.SERCOM1_USART,
54+
Buffer: NewRingBuffer(),
55+
Mode: PinSERCOM,
56+
IRQVal: sam.IRQ_SERCOM1,
57+
}
58+
)
59+
60+
//go:export SERCOM1_IRQHandler
61+
func handleUART1() {
62+
defaultUART1Handler()
63+
}
64+
5165
// I2C pins
5266
const (
5367
SDA_PIN = PA22 // SDA: SERCOM3/PAD[0]

src/machine/board_itsybitsy-m0.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,20 @@ const (
4848
UART_RX_PIN = D11
4949
)
5050

51+
// UART1 on the ItsyBitsy M0.
52+
var (
53+
UART1 = UART{Bus: sam.SERCOM1_USART,
54+
Buffer: NewRingBuffer(),
55+
Mode: PinSERCOM,
56+
IRQVal: sam.IRQ_SERCOM1,
57+
}
58+
)
59+
60+
//go:export SERCOM1_IRQHandler
61+
func handleUART1() {
62+
defaultUART1Handler()
63+
}
64+
5165
// I2C pins
5266
const (
5367
SDA_PIN = PA22 // SDA: SERCOM3/PAD[0]

src/machine/board_trinket.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,20 @@ const (
3939
UART_RX_PIN = D3
4040
)
4141

42+
// UART1 on the Trinket M0.
43+
var (
44+
UART1 = UART{Bus: sam.SERCOM1_USART,
45+
Buffer: NewRingBuffer(),
46+
Mode: PinSERCOM,
47+
IRQVal: sam.IRQ_SERCOM1,
48+
}
49+
)
50+
51+
//go:export SERCOM1_IRQHandler
52+
func handleUART1() {
53+
defaultUART1Handler()
54+
}
55+
4256
// SPI pins
4357
const (
4458
SPI0_SCK_PIN = D3

0 commit comments

Comments
 (0)