Yuta Kitagami
/
EtherCAT_Nucleo_F401
EtherCAT Slave Library (LAN9252) https://www.switch-science.com/catalog/6659/
LAN925X_SPI.cpp
- Committer:
- nonNoise
- Date:
- 2021-01-18
- Revision:
- 0:3516fed95f0b
File content as of revision 0:3516fed95f0b:
#include "LAN925X_SPI.h" #include <stdint.h> #include "mbed.h" //********************************************************************// // HardWare Interface //********************************************************************// #define SPI_CS_LOW() cs = 0; #define SPI_CS_HIGH() cs = 1; SPI spi(PA_7, PA_6, PA_5); // mosi, miso, sclk DigitalOut cs(PB_6); void LAN925X_SPI_Init(void) { SPI_CS_HIGH(); // Setup the spi for 8 bit data, high steady state clock, // second edge capture, with a 1MHz clock rate spi.format(8,3); spi.frequency(20000000); } uint8_t SPI_8bit_Read(void) { return spi.write(0x00); } void SPI_8bit_Write(uint8_t wdata) { spi.write(wdata); } void SQI_RESET(void) { //SS2_SetDigitalInput(); //while(SS2_GetValue()!=1); SPI_CS_HIGH(); SPI_CS_HIGH(); SPI_CS_HIGH(); SPI_CS_HIGH(); SPI_CS_HIGH(); SPI_CS_HIGH(); SPI_CS_HIGH(); SPI_CS_HIGH(); SPI_CS_LOW(); SPI_8bit_Write(0xFF); SPI_CS_HIGH(); } uint32_t LAN925X_SPI_READ(uint16_t addr) { uint32_t rdata; SPI_CS_LOW(); SPI_8bit_Write(0x03); //Instruction SPI_8bit_Write( 0xFF&(addr>>8) ); //Address SPI_8bit_Write( 0xFF&(addr>>0) ); //Address rdata = (uint32_t)SPI_8bit_Read(); rdata |= (uint32_t)SPI_8bit_Read()<<8; rdata |= (uint32_t)SPI_8bit_Read()<<16; rdata |= (uint32_t)SPI_8bit_Read()<<24; SPI_CS_HIGH(); return rdata; } uint32_t LAN925X_SPI_WRITE(uint16_t addr,uint32_t data) { uint32_t rdata; SPI_CS_LOW(); SPI_8bit_Write(0x02); //Instruction SPI_8bit_Write( 0xFF&(addr>>8) ); //Address SPI_8bit_Write( 0xFF&(addr>>0) ); //Address SPI_8bit_Write( 0xFF&(data>>0) ); SPI_8bit_Write( 0xFF&(data>>8) ); SPI_8bit_Write( 0xFF&(data>>16) ); SPI_8bit_Write( 0xFF&(data>>24) ); SPI_CS_HIGH(); return rdata; }