Yuta Kitagami
/
EtherCAT_Nucleo_F401
EtherCAT Slave Library (LAN9252) https://www.switch-science.com/catalog/6659/
LAN925X_SPI.cpp@0:3516fed95f0b, 2021-01-18 (annotated)
- Committer:
- nonNoise
- Date:
- Mon Jan 18 03:46:20 2021 +0000
- Revision:
- 0:3516fed95f0b
EtherCAT-Slave-Lib (LAN9252); Ver1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nonNoise | 0:3516fed95f0b | 1 | #include "LAN925X_SPI.h" |
nonNoise | 0:3516fed95f0b | 2 | #include <stdint.h> |
nonNoise | 0:3516fed95f0b | 3 | |
nonNoise | 0:3516fed95f0b | 4 | #include "mbed.h" |
nonNoise | 0:3516fed95f0b | 5 | //********************************************************************// |
nonNoise | 0:3516fed95f0b | 6 | // HardWare Interface |
nonNoise | 0:3516fed95f0b | 7 | //********************************************************************// |
nonNoise | 0:3516fed95f0b | 8 | |
nonNoise | 0:3516fed95f0b | 9 | #define SPI_CS_LOW() cs = 0; |
nonNoise | 0:3516fed95f0b | 10 | #define SPI_CS_HIGH() cs = 1; |
nonNoise | 0:3516fed95f0b | 11 | |
nonNoise | 0:3516fed95f0b | 12 | SPI spi(PA_7, PA_6, PA_5); // mosi, miso, sclk |
nonNoise | 0:3516fed95f0b | 13 | DigitalOut cs(PB_6); |
nonNoise | 0:3516fed95f0b | 14 | |
nonNoise | 0:3516fed95f0b | 15 | void LAN925X_SPI_Init(void) |
nonNoise | 0:3516fed95f0b | 16 | { |
nonNoise | 0:3516fed95f0b | 17 | SPI_CS_HIGH(); |
nonNoise | 0:3516fed95f0b | 18 | // Setup the spi for 8 bit data, high steady state clock, |
nonNoise | 0:3516fed95f0b | 19 | // second edge capture, with a 1MHz clock rate |
nonNoise | 0:3516fed95f0b | 20 | spi.format(8,3); |
nonNoise | 0:3516fed95f0b | 21 | spi.frequency(20000000); |
nonNoise | 0:3516fed95f0b | 22 | } |
nonNoise | 0:3516fed95f0b | 23 | uint8_t SPI_8bit_Read(void) |
nonNoise | 0:3516fed95f0b | 24 | { |
nonNoise | 0:3516fed95f0b | 25 | return spi.write(0x00); |
nonNoise | 0:3516fed95f0b | 26 | } |
nonNoise | 0:3516fed95f0b | 27 | void SPI_8bit_Write(uint8_t wdata) |
nonNoise | 0:3516fed95f0b | 28 | { |
nonNoise | 0:3516fed95f0b | 29 | spi.write(wdata); |
nonNoise | 0:3516fed95f0b | 30 | } |
nonNoise | 0:3516fed95f0b | 31 | |
nonNoise | 0:3516fed95f0b | 32 | void SQI_RESET(void) |
nonNoise | 0:3516fed95f0b | 33 | { |
nonNoise | 0:3516fed95f0b | 34 | //SS2_SetDigitalInput(); |
nonNoise | 0:3516fed95f0b | 35 | //while(SS2_GetValue()!=1); |
nonNoise | 0:3516fed95f0b | 36 | SPI_CS_HIGH(); |
nonNoise | 0:3516fed95f0b | 37 | SPI_CS_HIGH(); |
nonNoise | 0:3516fed95f0b | 38 | SPI_CS_HIGH(); |
nonNoise | 0:3516fed95f0b | 39 | SPI_CS_HIGH(); |
nonNoise | 0:3516fed95f0b | 40 | SPI_CS_HIGH(); |
nonNoise | 0:3516fed95f0b | 41 | SPI_CS_HIGH(); |
nonNoise | 0:3516fed95f0b | 42 | SPI_CS_HIGH(); |
nonNoise | 0:3516fed95f0b | 43 | SPI_CS_HIGH(); |
nonNoise | 0:3516fed95f0b | 44 | SPI_CS_LOW(); |
nonNoise | 0:3516fed95f0b | 45 | SPI_8bit_Write(0xFF); |
nonNoise | 0:3516fed95f0b | 46 | SPI_CS_HIGH(); |
nonNoise | 0:3516fed95f0b | 47 | } |
nonNoise | 0:3516fed95f0b | 48 | |
nonNoise | 0:3516fed95f0b | 49 | |
nonNoise | 0:3516fed95f0b | 50 | |
nonNoise | 0:3516fed95f0b | 51 | |
nonNoise | 0:3516fed95f0b | 52 | uint32_t LAN925X_SPI_READ(uint16_t addr) |
nonNoise | 0:3516fed95f0b | 53 | { |
nonNoise | 0:3516fed95f0b | 54 | uint32_t rdata; |
nonNoise | 0:3516fed95f0b | 55 | SPI_CS_LOW(); |
nonNoise | 0:3516fed95f0b | 56 | SPI_8bit_Write(0x03); //Instruction |
nonNoise | 0:3516fed95f0b | 57 | SPI_8bit_Write( 0xFF&(addr>>8) ); //Address |
nonNoise | 0:3516fed95f0b | 58 | SPI_8bit_Write( 0xFF&(addr>>0) ); //Address |
nonNoise | 0:3516fed95f0b | 59 | rdata = (uint32_t)SPI_8bit_Read(); |
nonNoise | 0:3516fed95f0b | 60 | rdata |= (uint32_t)SPI_8bit_Read()<<8; |
nonNoise | 0:3516fed95f0b | 61 | rdata |= (uint32_t)SPI_8bit_Read()<<16; |
nonNoise | 0:3516fed95f0b | 62 | rdata |= (uint32_t)SPI_8bit_Read()<<24; |
nonNoise | 0:3516fed95f0b | 63 | SPI_CS_HIGH(); |
nonNoise | 0:3516fed95f0b | 64 | return rdata; |
nonNoise | 0:3516fed95f0b | 65 | } |
nonNoise | 0:3516fed95f0b | 66 | |
nonNoise | 0:3516fed95f0b | 67 | uint32_t LAN925X_SPI_WRITE(uint16_t addr,uint32_t data) |
nonNoise | 0:3516fed95f0b | 68 | { |
nonNoise | 0:3516fed95f0b | 69 | uint32_t rdata; |
nonNoise | 0:3516fed95f0b | 70 | SPI_CS_LOW(); |
nonNoise | 0:3516fed95f0b | 71 | SPI_8bit_Write(0x02); //Instruction |
nonNoise | 0:3516fed95f0b | 72 | SPI_8bit_Write( 0xFF&(addr>>8) ); //Address |
nonNoise | 0:3516fed95f0b | 73 | SPI_8bit_Write( 0xFF&(addr>>0) ); //Address |
nonNoise | 0:3516fed95f0b | 74 | SPI_8bit_Write( 0xFF&(data>>0) ); |
nonNoise | 0:3516fed95f0b | 75 | SPI_8bit_Write( 0xFF&(data>>8) ); |
nonNoise | 0:3516fed95f0b | 76 | SPI_8bit_Write( 0xFF&(data>>16) ); |
nonNoise | 0:3516fed95f0b | 77 | SPI_8bit_Write( 0xFF&(data>>24) ); |
nonNoise | 0:3516fed95f0b | 78 | SPI_CS_HIGH(); |
nonNoise | 0:3516fed95f0b | 79 | return rdata; |
nonNoise | 0:3516fed95f0b | 80 | } |
nonNoise | 0:3516fed95f0b | 81 |