@@ -92,7 +92,9 @@ static const spi_pins board_spi_pins[] __FLASH__ = {
9292
9393SPIClass::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
134144void 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
0 commit comments