Some fixes. Works for SD example SPI 1, not tested with anything else. setModule not tested

This commit is contained in:
Roger Clark 2015-07-07 20:59:33 +10:00
parent 2e13a1d57e
commit 20a9214291
2 changed files with 19 additions and 6 deletions

View File

@ -92,7 +92,9 @@ static const spi_pins board_spi_pins[] __FLASH__ = {
SPIClass::SPIClass(uint32 spi_num) { SPIClass::SPIClass(uint32 spi_num) {
_currentSetting=&_settings[spi_num]; _currentSetting=&_settings[spi_num-1];// SPI channels are called 1 2 and 3 but the array is zero indexed
switch (spi_num) { switch (spi_num) {
#if BOARD_NR_SPI >= 1 #if BOARD_NR_SPI >= 1
case 1: case 1:
@ -113,6 +115,14 @@ SPIClass::SPIClass(uint32 spi_num) {
ASSERT(0); ASSERT(0);
} }
// Hack to set the clock divider.
// This should really be done in the SPISetting
_settings[0].clockDivider = determine_baud_rate(_settings[0].spi_d, _settings[0].clock);
_settings[1].clockDivider = determine_baud_rate(_settings[1].spi_d, _settings[1].clock);
#if BOARD_NR_SPI >= 3
_settings[2].clockDivider = determine_baud_rate(_settings[2].spi_d, _settings[2].clock);
#endif
//pinMode(BOARD_SPI_DEFAULT_SS,OUTPUT); //pinMode(BOARD_SPI_DEFAULT_SS,OUTPUT);
} }
@ -126,9 +136,9 @@ void SPIClass::begin(void) {
spi_init(_currentSetting->spi_d); spi_init(_currentSetting->spi_d);
configure_gpios(_currentSetting->spi_d, 1); configure_gpios(_currentSetting->spi_d, 1);
#ifdef SPI_DEBUG #ifdef SPI_DEBUG
Serial.print("spi_master_enable("); Serial.print(_currentSetting->clock); Serial.print(","); Serial.print(_currentSetting->dataMode); Serial.print(","); Serial.print(flags); Serial.println(")"); Serial.print("spi_master_enable("); Serial.print(_currentSetting->clockDivider); Serial.print(","); Serial.print(_currentSetting->dataMode); Serial.print(","); Serial.print(flags); Serial.println(")");
#endif #endif
spi_master_enable(_currentSetting->spi_d, (spi_baud_rate)_currentSetting->clock, (spi_mode)_currentSetting->dataMode, flags); spi_master_enable(_currentSetting->spi_d, (spi_baud_rate)_currentSetting->clockDivider, (spi_mode)_currentSetting->dataMode, flags);
} }
void SPIClass::beginSlave(void) { void SPIClass::beginSlave(void) {
@ -169,7 +179,7 @@ void SPIClass::setClockDivider(uint32_t clockDivider)
#ifdef SPI_DEBUG #ifdef SPI_DEBUG
Serial.print("Clock divider set to "); Serial.println(clockDivider); Serial.print("Clock divider set to "); Serial.println(clockDivider);
#endif #endif
_currentSetting->clock = clockDivider; _currentSetting->clockDivider = clockDivider;
this->begin(); this->begin();
} }

View File

@ -121,7 +121,7 @@ private:
spi_dev *spi_d; spi_dev *spi_d;
uint8_t _SSPin; uint8_t _SSPin;
//uint32_t clockDivider; uint32_t clockDivider;
friend class SPIClass; friend class SPIClass;
}; };
@ -345,7 +345,10 @@ public:
spi_dev *dev(){ return _currentSetting->spi_d;} spi_dev *dev(){ return _currentSetting->spi_d;}
void setModule(int spi_num)
{
_currentSetting=&_settings[spi_num-1];// SPI channels are called 1 2 and 3 but the array is zero indexed
}
private: private: