Set SPI default speed to 500Khz. Set SPI speed for Ehternet to 4Mhz.

This commit is contained in:
Cristian Maglie 2012-06-08 22:51:03 +02:00
parent b2ded1f1a5
commit 3b0d08af6b
2 changed files with 11 additions and 5 deletions

View File

@ -26,12 +26,13 @@ W5100Class W5100;
void W5100Class::init(void)
{
SPI.begin(SPI_CS);
SPI.setClockDivider(SPI_CS, 255);
SPI.setDataMode(SPI_CS, SPI_MODE0);
delay(300);
SPI.begin(SPI_CS);
// Set clock to 4Mhz (W5100 should support up to about 14Mhz)
SPI.setClockDivider(SPI_CS, 21);
SPI.setDataMode(SPI_CS, SPI_MODE0);
writeMR(1<<RST);
writeTMSR(0x55);
writeRMSR(0x55);

View File

@ -26,7 +26,8 @@ void SPIClass::begin(uint8_t _pin) {
g_APinDescription[spiPin].ulPinType,
g_APinDescription[spiPin].ulPin,
g_APinDescription[spiPin].ulPinConfiguration);
setClockDivider(_pin, 1);
// Default speed set to 500Khz
setClockDivider(_pin, 168);
setDataMode(_pin, SPI_MODE0);
}
@ -41,12 +42,16 @@ void SPIClass::end() {
void SPIClass::setDataMode(uint8_t _pin, uint8_t _mode) {
uint32_t _channel = BOARD_PIN_TO_SPI_CHANNEL(_pin);
mode[_channel] = _mode | SPI_CSR_CSAAT;
// SPI_CSR_DLYBCT(1) keeps CS enabled for 32 MCLK after a completed
// transfer. Some device needs that for working properly.
SPI_ConfigureNPCS(spi, _channel, mode[_channel] | SPI_CSR_SCBR(divider[_channel]) | SPI_CSR_DLYBCT(1));
}
void SPIClass::setClockDivider(uint8_t _pin, uint8_t _divider) {
uint32_t _channel = BOARD_PIN_TO_SPI_CHANNEL(_pin);
divider[_channel] = _divider;
// SPI_CSR_DLYBCT(1) keeps CS enabled for 32 MCLK after a completed
// transfer. Some device needs that for working properly.
SPI_ConfigureNPCS(spi, _channel, mode[_channel] | SPI_CSR_SCBR(divider[_channel]) | SPI_CSR_DLYBCT(1));
}