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>
Этот коммит содержится в:
Ron Evans 2019-09-16 14:42:46 +02:00 коммит произвёл Ayke
родитель d2856bd6bd
коммит f5fd49bb74
6 изменённых файлов: 53 добавлений и 45 удалений

Просмотреть файл

@ -37,7 +37,7 @@ const (
A0 Pin = PA02 // ADC/AIN[0]
A1 Pin = PB02 // ADC/AIN[10]
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]
A5 Pin = PB09 // ADC/AIN[3], SDA: SERCOM2/PAD[1]
A6 Pin = PA09 // ADC/AIN[17]
@ -118,19 +118,20 @@ var (
// SPI pins
const (
SPI0_SCK_PIN Pin = PB11 // SCK: SERCOM4/PAD[3]
SPI0_MOSI_PIN Pin = PB10 // MOSI: SERCOM4/PAD[2]
SPI0_MISO_PIN Pin = PA12 // MISO: SERCOM4/PAD[0]
SPI0_SCK_PIN Pin = A2 // SCK: SERCOM0/PAD[3]
SPI0_MOSI_PIN Pin = A3 // MOSI: SERCOM0/PAD[2]
SPI0_MISO_PIN Pin = A6 // MISO: SERCOM0/PAD[1]
)
// SPI on the Arduino Nano 33.
var (
SPI0 = SPI{Bus: sam.SERCOM1_SPI,
SPI0 = SPI{Bus: sam.SERCOM0_SPI,
SCK: SPI0_SCK_PIN,
MOSI: SPI0_MOSI_PIN,
MISO: SPI0_MISO_PIN,
DOpad: spiTXPad2SCK3,
DIpad: sercomRXPad0}
DIpad: sercomRXPad0,
PinMode: PinSERCOM}
)
// I2S pins

Просмотреть файл

@ -119,7 +119,8 @@ var (
MOSI: SPI0_MOSI_PIN,
MISO: SPI0_MISO_PIN,
DOpad: spiTXPad2SCK3,
DIpad: sercomRXPad0}
DIpad: sercomRXPad0,
PinMode: PinSERCOMAlt}
)
// I2S pins

Просмотреть файл

@ -93,7 +93,8 @@ var (
MOSI: SPI0_MOSI_PIN,
MISO: SPI0_MISO_PIN,
DOpad: spiTXPad2SCK3,
DIpad: sercomRXPad0}
DIpad: sercomRXPad0,
PinMode: PinSERCOMAlt}
)
// I2S pins

Просмотреть файл

@ -95,7 +95,8 @@ var (
MOSI: SPI0_MOSI_PIN,
MISO: SPI0_MISO_PIN,
DOpad: spiTXPad2SCK3,
DIpad: sercomRXPad0}
DIpad: sercomRXPad0,
PinMode: PinSERCOMAlt}
)
// "Internal" SPI pins; SPI flash is attached to these on ItsyBitsy M0
@ -113,7 +114,8 @@ var (
MOSI: SPI1_MOSI_PIN,
MISO: SPI1_MISO_PIN,
DOpad: spiTXPad2SCK3,
DIpad: sercomRXPad1}
DIpad: sercomRXPad1,
PinMode: PinSERCOMAlt}
)
// I2S pins

Просмотреть файл

@ -70,7 +70,8 @@ var (
MOSI: SPI0_MOSI_PIN,
MISO: SPI0_MISO_PIN,
DOpad: spiTXPad2SCK3,
DIpad: sercomRXPad0}
DIpad: sercomRXPad0,
PinMode: PinSERCOMAlt}
)
// I2C pins

Просмотреть файл

@ -882,6 +882,7 @@ type SPI struct {
MISO Pin
DOpad int
DIpad int
PinMode PinMode
}
// SPIConfig is used to store config info for SPI.
@ -896,7 +897,6 @@ type SPIConfig struct {
// Configure is intended to setup the SPI interface.
func (spi SPI) Configure(config SPIConfig) {
config.SCK = spi.SCK
config.MOSI = spi.MOSI
config.MISO = spi.MISO
@ -904,6 +904,8 @@ func (spi SPI) Configure(config SPIConfig) {
doPad := spi.DOpad
diPad := spi.DIpad
pinMode := spi.PinMode
// set default frequency
if config.Frequency == 0 {
config.Frequency = 4000000
@ -915,9 +917,9 @@ func (spi SPI) Configure(config SPIConfig) {
}
// enable pins
config.SCK.Configure(PinConfig{Mode: PinSERCOMAlt})
config.MOSI.Configure(PinConfig{Mode: PinSERCOMAlt})
config.MISO.Configure(PinConfig{Mode: PinSERCOMAlt})
config.SCK.Configure(PinConfig{Mode: pinMode})
config.MOSI.Configure(PinConfig{Mode: pinMode})
config.MISO.Configure(PinConfig{Mode: pinMode})
// reset SERCOM
spi.Bus.CTRLA.SetBits(sam.SERCOM_SPI_CTRLA_SWRST)