mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-19 23:22:16 +03:00
52 lines
1.3 KiB
C++
52 lines
1.3 KiB
C++
#ifndef HSPI_H
|
|
#define HSPI_H
|
|
|
|
#include "SPIImpl.h"
|
|
#include "SPIdef.h"
|
|
|
|
extern "C" {
|
|
#include "spi_register.h"
|
|
#include "ets_sys.h"
|
|
#include "osapi.h"
|
|
#include "os_type.h"
|
|
}
|
|
|
|
class HSPI : public SPIImpl
|
|
{
|
|
public:
|
|
virtual void begin();
|
|
virtual void end();
|
|
virtual void setBitOrder(uint8_t bitOrder);
|
|
virtual void setDataMode(uint8_t dataMode);
|
|
virtual void setClockDivider(uint8_t clockDiv);
|
|
virtual uint8_t transfer(uint8_t data);
|
|
virtual uint16_t transfer16(uint16_t data);
|
|
virtual void transfer(void *buf, size_t count);
|
|
|
|
private:
|
|
uint32_t _clkDiv;
|
|
uint32_t *spi_fifo;
|
|
const uint32_t hspi_port = 1;
|
|
const uint32_t hspi_fifo_size = 32;
|
|
|
|
private:
|
|
inline void hspi_wait_ready(void){while (READ_PERI_REG(SPI_FLASH_CMD(hspi_port))&SPI_FLASH_USR);}
|
|
inline void hspi_start_tx(){SET_PERI_REG_MASK(SPI_FLASH_CMD(hspi_port), SPI_FLASH_USR);}
|
|
inline void hspi_prepare_tx(uint32_t bytecount)
|
|
{
|
|
uint32_t bitcount = bytecount * 8 - 1;
|
|
WRITE_PERI_REG(SPI_FLASH_USER1(hspi_port), (bitcount & SPI_USR_OUT_BITLEN) << SPI_USR_OUT_BITLEN_S);
|
|
}
|
|
inline void hspi_prepare_txrx(uint32_t bytecount)
|
|
{
|
|
uint32_t bitcount = bytecount * 8 - 1;
|
|
WRITE_PERI_REG(SPI_FLASH_USER1(hspi_port), ((bitcount & SPI_USR_OUT_BITLEN) << SPI_USR_OUT_BITLEN_S) |
|
|
((bitcount & SPI_USR_DIN_BITLEN) << SPI_USR_DIN_BITLEN_S));
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif//HSPI_H
|