Skip to content

Commit f5fd49b

Browse files
deadprogramaykevl
authored andcommitted
machine/samd21: use PinMode for SPI SERCOM peripheral to allow for more configuration options on boards like Arduino Nano33-IoT that have many predefined pin mappings
Signed-off-by: Ron Evans <[email protected]>
1 parent d2856bd commit f5fd49b

File tree

6 files changed

+53
-45
lines changed

6 files changed

+53
-45
lines changed

src/machine/board_arduino_nano33.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const (
3737
A0 Pin = PA02 // ADC/AIN[0]
3838
A1 Pin = PB02 // ADC/AIN[10]
3939
A2 Pin = PA11 // ADC/AIN[19]
40-
A3 Pin = PA10 // ADC/AIN[18]
40+
A3 Pin = PA10 // ADC/AIN[18],
4141
A4 Pin = PB08 // ADC/AIN[2], SCL: SERCOM2/PAD[1]
4242
A5 Pin = PB09 // ADC/AIN[3], SDA: SERCOM2/PAD[1]
4343
A6 Pin = PA09 // ADC/AIN[17]
@@ -118,19 +118,20 @@ var (
118118

119119
// SPI pins
120120
const (
121-
SPI0_SCK_PIN Pin = PB11 // SCK: SERCOM4/PAD[3]
122-
SPI0_MOSI_PIN Pin = PB10 // MOSI: SERCOM4/PAD[2]
123-
SPI0_MISO_PIN Pin = PA12 // MISO: SERCOM4/PAD[0]
121+
SPI0_SCK_PIN Pin = A2 // SCK: SERCOM0/PAD[3]
122+
SPI0_MOSI_PIN Pin = A3 // MOSI: SERCOM0/PAD[2]
123+
SPI0_MISO_PIN Pin = A6 // MISO: SERCOM0/PAD[1]
124124
)
125125

126126
// SPI on the Arduino Nano 33.
127127
var (
128-
SPI0 = SPI{Bus: sam.SERCOM1_SPI,
129-
SCK: SPI0_SCK_PIN,
130-
MOSI: SPI0_MOSI_PIN,
131-
MISO: SPI0_MISO_PIN,
132-
DOpad: spiTXPad2SCK3,
133-
DIpad: sercomRXPad0}
128+
SPI0 = SPI{Bus: sam.SERCOM0_SPI,
129+
SCK: SPI0_SCK_PIN,
130+
MOSI: SPI0_MOSI_PIN,
131+
MISO: SPI0_MISO_PIN,
132+
DOpad: spiTXPad2SCK3,
133+
DIpad: sercomRXPad0,
134+
PinMode: PinSERCOM}
134135
)
135136

136137
// I2S pins

src/machine/board_circuitplay_express.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,12 @@ const (
115115
// SPI on the Circuit Playground Express.
116116
var (
117117
SPI0 = SPI{Bus: sam.SERCOM3_SPI,
118-
SCK: SPI0_SCK_PIN,
119-
MOSI: SPI0_MOSI_PIN,
120-
MISO: SPI0_MISO_PIN,
121-
DOpad: spiTXPad2SCK3,
122-
DIpad: sercomRXPad0}
118+
SCK: SPI0_SCK_PIN,
119+
MOSI: SPI0_MOSI_PIN,
120+
MISO: SPI0_MISO_PIN,
121+
DOpad: spiTXPad2SCK3,
122+
DIpad: sercomRXPad0,
123+
PinMode: PinSERCOMAlt}
123124
)
124125

125126
// I2S pins

src/machine/board_feather-m0.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,12 @@ const (
8989
// SPI on the Feather M0.
9090
var (
9191
SPI0 = SPI{Bus: sam.SERCOM4_SPI,
92-
SCK: SPI0_SCK_PIN,
93-
MOSI: SPI0_MOSI_PIN,
94-
MISO: SPI0_MISO_PIN,
95-
DOpad: spiTXPad2SCK3,
96-
DIpad: sercomRXPad0}
92+
SCK: SPI0_SCK_PIN,
93+
MOSI: SPI0_MOSI_PIN,
94+
MISO: SPI0_MISO_PIN,
95+
DOpad: spiTXPad2SCK3,
96+
DIpad: sercomRXPad0,
97+
PinMode: PinSERCOMAlt}
9798
)
9899

99100
// I2S pins

src/machine/board_itsybitsy-m0.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,12 @@ const (
9191
// SPI on the ItsyBitsy M0.
9292
var (
9393
SPI0 = SPI{Bus: sam.SERCOM4_SPI,
94-
SCK: SPI0_SCK_PIN,
95-
MOSI: SPI0_MOSI_PIN,
96-
MISO: SPI0_MISO_PIN,
97-
DOpad: spiTXPad2SCK3,
98-
DIpad: sercomRXPad0}
94+
SCK: SPI0_SCK_PIN,
95+
MOSI: SPI0_MOSI_PIN,
96+
MISO: SPI0_MISO_PIN,
97+
DOpad: spiTXPad2SCK3,
98+
DIpad: sercomRXPad0,
99+
PinMode: PinSERCOMAlt}
99100
)
100101

101102
// "Internal" SPI pins; SPI flash is attached to these on ItsyBitsy M0
@@ -109,11 +110,12 @@ const (
109110
// "Internal" SPI on Sercom 5
110111
var (
111112
SPI1 = SPI{Bus: sam.SERCOM5_SPI,
112-
SCK: SPI1_SCK_PIN,
113-
MOSI: SPI1_MOSI_PIN,
114-
MISO: SPI1_MISO_PIN,
115-
DOpad: spiTXPad2SCK3,
116-
DIpad: sercomRXPad1}
113+
SCK: SPI1_SCK_PIN,
114+
MOSI: SPI1_MOSI_PIN,
115+
MISO: SPI1_MISO_PIN,
116+
DOpad: spiTXPad2SCK3,
117+
DIpad: sercomRXPad1,
118+
PinMode: PinSERCOMAlt}
117119
)
118120

119121
// I2S pins

src/machine/board_trinket.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,12 @@ const (
6666
// SPI on the Trinket M0.
6767
var (
6868
SPI0 = SPI{Bus: sam.SERCOM0_SPI,
69-
SCK: SPI0_SCK_PIN,
70-
MOSI: SPI0_MOSI_PIN,
71-
MISO: SPI0_MISO_PIN,
72-
DOpad: spiTXPad2SCK3,
73-
DIpad: sercomRXPad0}
69+
SCK: SPI0_SCK_PIN,
70+
MOSI: SPI0_MOSI_PIN,
71+
MISO: SPI0_MISO_PIN,
72+
DOpad: spiTXPad2SCK3,
73+
DIpad: sercomRXPad0,
74+
PinMode: PinSERCOMAlt}
7475
)
7576

7677
// I2C pins

src/machine/machine_atsamd21.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -876,12 +876,13 @@ func waitForSync() {
876876

877877
// SPI
878878
type SPI struct {
879-
Bus *sam.SERCOM_SPI_Type
880-
SCK Pin
881-
MOSI Pin
882-
MISO Pin
883-
DOpad int
884-
DIpad int
879+
Bus *sam.SERCOM_SPI_Type
880+
SCK Pin
881+
MOSI Pin
882+
MISO Pin
883+
DOpad int
884+
DIpad int
885+
PinMode PinMode
885886
}
886887

887888
// SPIConfig is used to store config info for SPI.
@@ -896,14 +897,15 @@ type SPIConfig struct {
896897

897898
// Configure is intended to setup the SPI interface.
898899
func (spi SPI) Configure(config SPIConfig) {
899-
900900
config.SCK = spi.SCK
901901
config.MOSI = spi.MOSI
902902
config.MISO = spi.MISO
903903

904904
doPad := spi.DOpad
905905
diPad := spi.DIpad
906906

907+
pinMode := spi.PinMode
908+
907909
// set default frequency
908910
if config.Frequency == 0 {
909911
config.Frequency = 4000000
@@ -915,9 +917,9 @@ func (spi SPI) Configure(config SPIConfig) {
915917
}
916918

917919
// enable pins
918-
config.SCK.Configure(PinConfig{Mode: PinSERCOMAlt})
919-
config.MOSI.Configure(PinConfig{Mode: PinSERCOMAlt})
920-
config.MISO.Configure(PinConfig{Mode: PinSERCOMAlt})
920+
config.SCK.Configure(PinConfig{Mode: pinMode})
921+
config.MOSI.Configure(PinConfig{Mode: pinMode})
922+
config.MISO.Configure(PinConfig{Mode: pinMode})
921923

922924
// reset SERCOM
923925
spi.Bus.CTRLA.SetBits(sam.SERCOM_SPI_CTRLA_SWRST)

0 commit comments

Comments
 (0)