浏览代码

ESP8266 Software SPI and yield mods

main
Bill Greiman 9 年前
父节点
当前提交
49127b29b6
共有 5 个文件被更改,包括 85 次插入59 次删除
  1. +1
    -1
      SdFat/src/SdFat.h
  2. +13
    -0
      SdFat/src/SdFatConfig.h
  3. +63
    -57
      SdFat/src/SdSpiCard/DigitalPin.h
  4. +1
    -1
      SdFat/src/SdSpiCard/SdSpi.h
  5. +7
    -0
      SdFat/src/SdSpiCard/SdSpiCard.cpp

+ 1
- 1
SdFat/src/SdFat.h 查看文件

#endif // ARDUINO #endif // ARDUINO
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** SdFat version YYYYMMDD */ /** SdFat version YYYYMMDD */
#define SD_FAT_VERSION 20160212
#define SD_FAT_VERSION 20160411
//============================================================================== //==============================================================================
/** /**
* \class SdBaseFile * \class SdBaseFile

+ 13
- 0
SdFat/src/SdFatConfig.h 查看文件

*/ */
#define ENABLE_SPI_TRANSACTIONS 0 #define ENABLE_SPI_TRANSACTIONS 0
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/**
* Handle Watchdog Timer for WiFi modules.
*
* Yield will be called before accessing the SPI bus if it has been more
* than WDT_YIELD_TIME_MICROS microseconds since the last yield call by SdFat.
*/
#if defined(PLATFORM_ID) || defined(ESP8266)
// If Particle device or ESP8266 call yield.
#define WDT_YIELD_TIME_MICROS 100000
#else
#define WDT_YIELD_TIME_MICROS 0
#endif
//------------------------------------------------------------------------------
/** /**
* Set FAT12_SUPPORT nonzero to enable use if FAT12 volumes. * Set FAT12_SUPPORT nonzero to enable use if FAT12 volumes.
* FAT12 has not been well tested and requires additional flash. * FAT12 has not been well tested and requires additional flash.

+ 63
- 57
SdFat/src/SdSpiCard/DigitalPin.h 查看文件

#ifndef DigitalPin_h #ifndef DigitalPin_h
#define DigitalPin_h #define DigitalPin_h
#include "SystemInclude.h" #include "SystemInclude.h"
#ifdef __arm__
#ifdef CORE_TEENSY
//------------------------------------------------------------------------------
/** read pin value
* @param[in] pin Arduino pin number
* @return value read
*/
static inline __attribute__((always_inline))
bool fastDigitalRead(uint8_t pin) {
return *portInputRegister(pin);
}
//------------------------------------------------------------------------------
/** Set pin value
* @param[in] pin Arduino pin number
* @param[in] level value to write
*/
static inline __attribute__((always_inline))
void fastDigitalWrite(uint8_t pin, bool value) {
if (value) {
*portSetRegister(pin) = 1;
} else {
*portClearRegister(pin) = 1;
}
}
#else // CORE_TEENSY
//------------------------------------------------------------------------------
/** read pin value
* @param[in] pin Arduino pin number
* @return value read
*/
static inline __attribute__((always_inline))
bool fastDigitalRead(uint8_t pin) {
return g_APinDescription[pin].pPort->PIO_PDSR & g_APinDescription[pin].ulPin;
}
//------------------------------------------------------------------------------
/** Set pin value
* @param[in] pin Arduino pin number
* @param[in] level value to write
*/
static inline __attribute__((always_inline))
void fastDigitalWrite(uint8_t pin, bool value) {
if (value) {
g_APinDescription[pin].pPort->PIO_SODR = g_APinDescription[pin].ulPin;
} else {
g_APinDescription[pin].pPort->PIO_CODR = g_APinDescription[pin].ulPin;
}
}
#endif // CORE_TEENSY
//------------------------------------------------------------------------------
inline void fastDigitalToggle(uint8_t pin) {
fastDigitalWrite(pin, !fastDigitalRead(pin));
}
//------------------------------------------------------------------------------
inline void fastPinMode(uint8_t pin, uint8_t mode) {pinMode(pin, mode);}
#else // __arm__
//==============================================================================
#if defined(__AVR__)
#include <avr/io.h> #include <avr/io.h>
/** GpioPinMap type */ /** GpioPinMap type */
struct GpioPinMap_t { struct GpioPinMap_t {
fastDigitalWrite(pin, mode == INPUT_PULLUP); fastDigitalWrite(pin, mode == INPUT_PULLUP);
} }
} }
#endif // __arm__
#else // defined(__AVR__)
#if defined(CORE_TEENSY)
//------------------------------------------------------------------------------
/** read pin value
* @param[in] pin Arduino pin number
* @return value read
*/
static inline __attribute__((always_inline))
bool fastDigitalRead(uint8_t pin) {
return *portInputRegister(pin);
}
//------------------------------------------------------------------------------
/** Set pin value
* @param[in] pin Arduino pin number
* @param[in] level value to write
*/
static inline __attribute__((always_inline))
void fastDigitalWrite(uint8_t pin, bool value) {
if (value) {
*portSetRegister(pin) = 1;
} else {
*portClearRegister(pin) = 1;
}
}
#elif defined(__SAM3X8E__) || defined(__SAM3X8H__)
//------------------------------------------------------------------------------
/** read pin value
* @param[in] pin Arduino pin number
* @return value read
*/
static inline __attribute__((always_inline))
bool fastDigitalRead(uint8_t pin) {
return g_APinDescription[pin].pPort->PIO_PDSR & g_APinDescription[pin].ulPin;
}
//------------------------------------------------------------------------------
/** Set pin value
* @param[in] pin Arduino pin number
* @param[in] level value to write
*/
static inline __attribute__((always_inline))
void fastDigitalWrite(uint8_t pin, bool value) {
if (value) {
g_APinDescription[pin].pPort->PIO_SODR = g_APinDescription[pin].ulPin;
} else {
g_APinDescription[pin].pPort->PIO_CODR = g_APinDescription[pin].ulPin;
}
}
#else // CORE_TEENSY
//------------------------------------------------------------------------------
inline void fastDigitalWrite(uint8_t pin, bool value) {
digitalWrite(pin, value);
}
//------------------------------------------------------------------------------
inline bool fastDigitalRead(uint8_t pin) {return digitalRead(pin);}
#endif // CORE_TEENSY
//------------------------------------------------------------------------------
inline void fastDigitalToggle(uint8_t pin) {
fastDigitalWrite(pin, !fastDigitalRead(pin));
}
//------------------------------------------------------------------------------
inline void fastPinMode(uint8_t pin, uint8_t mode) {pinMode(pin, mode);}
#endif // __AVR__
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** set pin configuration /** set pin configuration
* @param[in] pin Arduino pin number * @param[in] pin Arduino pin number

+ 1
- 1
SdFat/src/SdSpiCard/SdSpi.h 查看文件

#else // ENABLE_SPI_TRANSACTIONS #else // ENABLE_SPI_TRANSACTIONS
SPI.setBitOrder(MSBFIRST); SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0); SPI.setDataMode(SPI_MODE0);
#endif // ENABLE_SPI_TRANSACTIONS
#endif // ENABLE_SPI_TRANSACTIONS
#ifndef SPI_CLOCK_DIV128 #ifndef SPI_CLOCK_DIV128
SPI.setClockDivider(divisor); SPI.setClockDivider(divisor);
#else // SPI_CLOCK_DIV128 #else // SPI_CLOCK_DIV128

+ 7
- 0
SdFat/src/SdSpiCard/SdSpiCard.cpp 查看文件

} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void SdSpiCard::chipSelectLow() { void SdSpiCard::chipSelectLow() {
#if WDT_YIELD_TIME_MICROS
static uint32_t last;
if ((micros() - last) > WDT_YIELD_TIME_MICROS) {
SysCall::yield();
last = micros();
}
#endif // WDT_YIELD_TIME_MICROS
if (m_selected) { if (m_selected) {
SD_CS_DBG("chipSelectLow error"); SD_CS_DBG("chipSelectLow error");
return; return;

正在加载...
取消
保存