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 <ron@hybridgroup.com>
Этот коммит содержится в:
родитель
d2856bd6bd
коммит
f5fd49bb74
6 изменённых файлов: 53 добавлений и 45 удалений
|
@ -37,7 +37,7 @@ const (
|
||||||
A0 Pin = PA02 // ADC/AIN[0]
|
A0 Pin = PA02 // ADC/AIN[0]
|
||||||
A1 Pin = PB02 // ADC/AIN[10]
|
A1 Pin = PB02 // ADC/AIN[10]
|
||||||
A2 Pin = PA11 // ADC/AIN[19]
|
A2 Pin = PA11 // ADC/AIN[19]
|
||||||
A3 Pin = PA10 // ADC/AIN[18]
|
A3 Pin = PA10 // ADC/AIN[18],
|
||||||
A4 Pin = PB08 // ADC/AIN[2], SCL: SERCOM2/PAD[1]
|
A4 Pin = PB08 // ADC/AIN[2], SCL: SERCOM2/PAD[1]
|
||||||
A5 Pin = PB09 // ADC/AIN[3], SDA: SERCOM2/PAD[1]
|
A5 Pin = PB09 // ADC/AIN[3], SDA: SERCOM2/PAD[1]
|
||||||
A6 Pin = PA09 // ADC/AIN[17]
|
A6 Pin = PA09 // ADC/AIN[17]
|
||||||
|
@ -118,19 +118,20 @@ var (
|
||||||
|
|
||||||
// SPI pins
|
// SPI pins
|
||||||
const (
|
const (
|
||||||
SPI0_SCK_PIN Pin = PB11 // SCK: SERCOM4/PAD[3]
|
SPI0_SCK_PIN Pin = A2 // SCK: SERCOM0/PAD[3]
|
||||||
SPI0_MOSI_PIN Pin = PB10 // MOSI: SERCOM4/PAD[2]
|
SPI0_MOSI_PIN Pin = A3 // MOSI: SERCOM0/PAD[2]
|
||||||
SPI0_MISO_PIN Pin = PA12 // MISO: SERCOM4/PAD[0]
|
SPI0_MISO_PIN Pin = A6 // MISO: SERCOM0/PAD[1]
|
||||||
)
|
)
|
||||||
|
|
||||||
// SPI on the Arduino Nano 33.
|
// SPI on the Arduino Nano 33.
|
||||||
var (
|
var (
|
||||||
SPI0 = SPI{Bus: sam.SERCOM1_SPI,
|
SPI0 = SPI{Bus: sam.SERCOM0_SPI,
|
||||||
SCK: SPI0_SCK_PIN,
|
SCK: SPI0_SCK_PIN,
|
||||||
MOSI: SPI0_MOSI_PIN,
|
MOSI: SPI0_MOSI_PIN,
|
||||||
MISO: SPI0_MISO_PIN,
|
MISO: SPI0_MISO_PIN,
|
||||||
DOpad: spiTXPad2SCK3,
|
DOpad: spiTXPad2SCK3,
|
||||||
DIpad: sercomRXPad0}
|
DIpad: sercomRXPad0,
|
||||||
|
PinMode: PinSERCOM}
|
||||||
)
|
)
|
||||||
|
|
||||||
// I2S pins
|
// I2S pins
|
||||||
|
|
|
@ -119,7 +119,8 @@ var (
|
||||||
MOSI: SPI0_MOSI_PIN,
|
MOSI: SPI0_MOSI_PIN,
|
||||||
MISO: SPI0_MISO_PIN,
|
MISO: SPI0_MISO_PIN,
|
||||||
DOpad: spiTXPad2SCK3,
|
DOpad: spiTXPad2SCK3,
|
||||||
DIpad: sercomRXPad0}
|
DIpad: sercomRXPad0,
|
||||||
|
PinMode: PinSERCOMAlt}
|
||||||
)
|
)
|
||||||
|
|
||||||
// I2S pins
|
// I2S pins
|
||||||
|
|
|
@ -93,7 +93,8 @@ var (
|
||||||
MOSI: SPI0_MOSI_PIN,
|
MOSI: SPI0_MOSI_PIN,
|
||||||
MISO: SPI0_MISO_PIN,
|
MISO: SPI0_MISO_PIN,
|
||||||
DOpad: spiTXPad2SCK3,
|
DOpad: spiTXPad2SCK3,
|
||||||
DIpad: sercomRXPad0}
|
DIpad: sercomRXPad0,
|
||||||
|
PinMode: PinSERCOMAlt}
|
||||||
)
|
)
|
||||||
|
|
||||||
// I2S pins
|
// I2S pins
|
||||||
|
|
|
@ -95,7 +95,8 @@ var (
|
||||||
MOSI: SPI0_MOSI_PIN,
|
MOSI: SPI0_MOSI_PIN,
|
||||||
MISO: SPI0_MISO_PIN,
|
MISO: SPI0_MISO_PIN,
|
||||||
DOpad: spiTXPad2SCK3,
|
DOpad: spiTXPad2SCK3,
|
||||||
DIpad: sercomRXPad0}
|
DIpad: sercomRXPad0,
|
||||||
|
PinMode: PinSERCOMAlt}
|
||||||
)
|
)
|
||||||
|
|
||||||
// "Internal" SPI pins; SPI flash is attached to these on ItsyBitsy M0
|
// "Internal" SPI pins; SPI flash is attached to these on ItsyBitsy M0
|
||||||
|
@ -113,7 +114,8 @@ var (
|
||||||
MOSI: SPI1_MOSI_PIN,
|
MOSI: SPI1_MOSI_PIN,
|
||||||
MISO: SPI1_MISO_PIN,
|
MISO: SPI1_MISO_PIN,
|
||||||
DOpad: spiTXPad2SCK3,
|
DOpad: spiTXPad2SCK3,
|
||||||
DIpad: sercomRXPad1}
|
DIpad: sercomRXPad1,
|
||||||
|
PinMode: PinSERCOMAlt}
|
||||||
)
|
)
|
||||||
|
|
||||||
// I2S pins
|
// I2S pins
|
||||||
|
|
|
@ -70,7 +70,8 @@ var (
|
||||||
MOSI: SPI0_MOSI_PIN,
|
MOSI: SPI0_MOSI_PIN,
|
||||||
MISO: SPI0_MISO_PIN,
|
MISO: SPI0_MISO_PIN,
|
||||||
DOpad: spiTXPad2SCK3,
|
DOpad: spiTXPad2SCK3,
|
||||||
DIpad: sercomRXPad0}
|
DIpad: sercomRXPad0,
|
||||||
|
PinMode: PinSERCOMAlt}
|
||||||
)
|
)
|
||||||
|
|
||||||
// I2C pins
|
// I2C pins
|
||||||
|
|
|
@ -882,6 +882,7 @@ type SPI struct {
|
||||||
MISO Pin
|
MISO Pin
|
||||||
DOpad int
|
DOpad int
|
||||||
DIpad int
|
DIpad int
|
||||||
|
PinMode PinMode
|
||||||
}
|
}
|
||||||
|
|
||||||
// SPIConfig is used to store config info for SPI.
|
// SPIConfig is used to store config info for SPI.
|
||||||
|
@ -896,7 +897,6 @@ type SPIConfig struct {
|
||||||
|
|
||||||
// Configure is intended to setup the SPI interface.
|
// Configure is intended to setup the SPI interface.
|
||||||
func (spi SPI) Configure(config SPIConfig) {
|
func (spi SPI) Configure(config SPIConfig) {
|
||||||
|
|
||||||
config.SCK = spi.SCK
|
config.SCK = spi.SCK
|
||||||
config.MOSI = spi.MOSI
|
config.MOSI = spi.MOSI
|
||||||
config.MISO = spi.MISO
|
config.MISO = spi.MISO
|
||||||
|
@ -904,6 +904,8 @@ func (spi SPI) Configure(config SPIConfig) {
|
||||||
doPad := spi.DOpad
|
doPad := spi.DOpad
|
||||||
diPad := spi.DIpad
|
diPad := spi.DIpad
|
||||||
|
|
||||||
|
pinMode := spi.PinMode
|
||||||
|
|
||||||
// set default frequency
|
// set default frequency
|
||||||
if config.Frequency == 0 {
|
if config.Frequency == 0 {
|
||||||
config.Frequency = 4000000
|
config.Frequency = 4000000
|
||||||
|
@ -915,9 +917,9 @@ func (spi SPI) Configure(config SPIConfig) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// enable pins
|
// enable pins
|
||||||
config.SCK.Configure(PinConfig{Mode: PinSERCOMAlt})
|
config.SCK.Configure(PinConfig{Mode: pinMode})
|
||||||
config.MOSI.Configure(PinConfig{Mode: PinSERCOMAlt})
|
config.MOSI.Configure(PinConfig{Mode: pinMode})
|
||||||
config.MISO.Configure(PinConfig{Mode: PinSERCOMAlt})
|
config.MISO.Configure(PinConfig{Mode: pinMode})
|
||||||
|
|
||||||
// reset SERCOM
|
// reset SERCOM
|
||||||
spi.Bus.CTRLA.SetBits(sam.SERCOM_SPI_CTRLA_SWRST)
|
spi.Bus.CTRLA.SetBits(sam.SERCOM_SPI_CTRLA_SWRST)
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче