machine/samd51: allow setting pinmode for each of the SPI pins

Signed-off-by: Ron Evans <ron@hybridgroup.com>
Этот коммит содержится в:
Ron Evans 2019-10-29 18:59:54 +01:00 коммит произвёл Ayke
родитель 96d4987345
коммит 3777791aa3
2 изменённых файлов: 29 добавлений и 18 удалений

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

@ -79,5 +79,7 @@ var (
MOSI: SPI0_MOSI_PIN, MOSI: SPI0_MOSI_PIN,
MISO: SPI0_MISO_PIN, MISO: SPI0_MISO_PIN,
DOpad: spiTXPad2SCK3, DOpad: spiTXPad2SCK3,
DIpad: sercomRXPad0} DIpad: sercomRXPad3,
MISOPinMode: PinSERCOM,
}
) )

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

@ -890,6 +890,9 @@ type SPI struct {
MISO Pin MISO Pin
DOpad int DOpad int
DIpad int DIpad int
SCKPinMode PinMode
MOSIPinMode PinMode
MISOPinMode PinMode
} }
// SPIConfig is used to store config info for SPI. // SPIConfig is used to store config info for SPI.
@ -904,10 +907,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.MOSI = spi.MOSI
config.MISO = spi.MISO
doPad := spi.DOpad doPad := spi.DOpad
diPad := spi.DIpad diPad := spi.DIpad
@ -922,9 +921,19 @@ func (spi SPI) Configure(config SPIConfig) {
} }
// enable pins // enable pins
config.SCK.Configure(PinConfig{Mode: PinSERCOMAlt}) if spi.SCKPinMode == 0 {
config.MOSI.Configure(PinConfig{Mode: PinSERCOMAlt}) spi.SCKPinMode = PinSERCOMAlt
config.MISO.Configure(PinConfig{Mode: PinSERCOMAlt}) }
if spi.MOSIPinMode == 0 {
spi.MOSIPinMode = PinSERCOMAlt
}
if spi.MISOPinMode == 0 {
spi.MISOPinMode = PinSERCOMAlt
}
spi.SCK.Configure(PinConfig{Mode: spi.SCKPinMode})
spi.MOSI.Configure(PinConfig{Mode: spi.MOSIPinMode})
spi.MISO.Configure(PinConfig{Mode: spi.MISOPinMode})
// reset SERCOM // reset SERCOM
spi.Bus.CTRLA.SetBits(sam.SERCOM_SPIM_CTRLA_SWRST) spi.Bus.CTRLA.SetBits(sam.SERCOM_SPIM_CTRLA_SWRST)