Skip to content

Commit 20a9214

Browse files
Some fixes. Works for SD example SPI 1, not tested with anything else. setModule not tested
1 parent 2e13a1d commit 20a9214

2 files changed

Lines changed: 19 additions & 6 deletions

File tree

STM32F1/libraries/SPI/src/SPI.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@ static const spi_pins board_spi_pins[] __FLASH__ = {
9292

9393
SPIClass::SPIClass(uint32 spi_num) {
9494

95-
_currentSetting=&_settings[spi_num];
95+
_currentSetting=&_settings[spi_num-1];// SPI channels are called 1 2 and 3 but the array is zero indexed
96+
97+
9698
switch (spi_num) {
9799
#if BOARD_NR_SPI >= 1
98100
case 1:
@@ -113,6 +115,14 @@ SPIClass::SPIClass(uint32 spi_num) {
113115
ASSERT(0);
114116
}
115117

118+
// Hack to set the clock divider.
119+
// This should really be done in the SPISetting
120+
_settings[0].clockDivider = determine_baud_rate(_settings[0].spi_d, _settings[0].clock);
121+
_settings[1].clockDivider = determine_baud_rate(_settings[1].spi_d, _settings[1].clock);
122+
#if BOARD_NR_SPI >= 3
123+
_settings[2].clockDivider = determine_baud_rate(_settings[2].spi_d, _settings[2].clock);
124+
#endif
125+
116126
//pinMode(BOARD_SPI_DEFAULT_SS,OUTPUT);
117127
}
118128

@@ -126,9 +136,9 @@ void SPIClass::begin(void) {
126136
spi_init(_currentSetting->spi_d);
127137
configure_gpios(_currentSetting->spi_d, 1);
128138
#ifdef SPI_DEBUG
129-
Serial.print("spi_master_enable("); Serial.print(_currentSetting->clock); Serial.print(","); Serial.print(_currentSetting->dataMode); Serial.print(","); Serial.print(flags); Serial.println(")");
139+
Serial.print("spi_master_enable("); Serial.print(_currentSetting->clockDivider); Serial.print(","); Serial.print(_currentSetting->dataMode); Serial.print(","); Serial.print(flags); Serial.println(")");
130140
#endif
131-
spi_master_enable(_currentSetting->spi_d, (spi_baud_rate)_currentSetting->clock, (spi_mode)_currentSetting->dataMode, flags);
141+
spi_master_enable(_currentSetting->spi_d, (spi_baud_rate)_currentSetting->clockDivider, (spi_mode)_currentSetting->dataMode, flags);
132142
}
133143

134144
void SPIClass::beginSlave(void) {
@@ -169,7 +179,7 @@ void SPIClass::setClockDivider(uint32_t clockDivider)
169179
#ifdef SPI_DEBUG
170180
Serial.print("Clock divider set to "); Serial.println(clockDivider);
171181
#endif
172-
_currentSetting->clock = clockDivider;
182+
_currentSetting->clockDivider = clockDivider;
173183
this->begin();
174184
}
175185

STM32F1/libraries/SPI/src/SPI.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ class SPISettings {
121121

122122
spi_dev *spi_d;
123123
uint8_t _SSPin;
124-
//uint32_t clockDivider;
124+
uint32_t clockDivider;
125125

126126
friend class SPIClass;
127127
};
@@ -345,7 +345,10 @@ class SPIClass {
345345

346346
spi_dev *dev(){ return _currentSetting->spi_d;}
347347

348-
348+
void setModule(int spi_num)
349+
{
350+
_currentSetting=&_settings[spi_num-1];// SPI channels are called 1 2 and 3 but the array is zero indexed
351+
}
349352

350353
private:
351354

0 commit comments

Comments
 (0)