Yuta Kitagami / Mbed 2 deprecated EtherCAT_Nucleo_F401

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers LAN925X_SPI.cpp Source File

LAN925X_SPI.cpp

00001 #include "LAN925X_SPI.h"
00002 #include <stdint.h>
00003 
00004 #include "mbed.h"
00005 //********************************************************************//
00006 // HardWare Interface
00007 //********************************************************************//
00008 
00009 #define     SPI_CS_LOW()    cs = 0;
00010 #define     SPI_CS_HIGH()   cs = 1;
00011 
00012 SPI spi(PA_7, PA_6, PA_5); // mosi, miso, sclk
00013 DigitalOut cs(PB_6);
00014 
00015 void LAN925X_SPI_Init(void)
00016 {   
00017    SPI_CS_HIGH();
00018     // Setup the spi for 8 bit data, high steady state clock,
00019     // second edge capture, with a 1MHz clock rate
00020     spi.format(8,3);
00021     spi.frequency(20000000);
00022 }
00023 uint8_t SPI_8bit_Read(void)
00024 {
00025     return spi.write(0x00);
00026 }
00027 void SPI_8bit_Write(uint8_t wdata)
00028 {
00029     spi.write(wdata);
00030 }
00031 
00032 void SQI_RESET(void)
00033 {
00034     //SS2_SetDigitalInput();
00035     //while(SS2_GetValue()!=1);
00036     SPI_CS_HIGH();
00037     SPI_CS_HIGH();
00038     SPI_CS_HIGH();
00039     SPI_CS_HIGH();
00040     SPI_CS_HIGH();
00041     SPI_CS_HIGH();
00042     SPI_CS_HIGH();
00043     SPI_CS_HIGH();
00044     SPI_CS_LOW();
00045     SPI_8bit_Write(0xFF);
00046     SPI_CS_HIGH();
00047 }
00048 
00049 
00050 
00051 
00052 uint32_t LAN925X_SPI_READ(uint16_t addr)
00053 {
00054     uint32_t rdata;
00055     SPI_CS_LOW();
00056     SPI_8bit_Write(0x03); //Instruction
00057     SPI_8bit_Write( 0xFF&(addr>>8) ); //Address
00058     SPI_8bit_Write( 0xFF&(addr>>0) ); //Address
00059     rdata =  (uint32_t)SPI_8bit_Read();
00060     rdata |= (uint32_t)SPI_8bit_Read()<<8;
00061     rdata |= (uint32_t)SPI_8bit_Read()<<16;
00062     rdata |= (uint32_t)SPI_8bit_Read()<<24;
00063     SPI_CS_HIGH();
00064     return rdata;
00065 }
00066 
00067 uint32_t LAN925X_SPI_WRITE(uint16_t addr,uint32_t data)
00068 {
00069     uint32_t rdata;
00070     SPI_CS_LOW();
00071     SPI_8bit_Write(0x02); //Instruction
00072     SPI_8bit_Write( 0xFF&(addr>>8) ); //Address
00073     SPI_8bit_Write( 0xFF&(addr>>0) ); //Address
00074     SPI_8bit_Write( 0xFF&(data>>0) );
00075     SPI_8bit_Write( 0xFF&(data>>8) );
00076     SPI_8bit_Write( 0xFF&(data>>16) );
00077     SPI_8bit_Write( 0xFF&(data>>24) );
00078     SPI_CS_HIGH();
00079     return rdata;
00080 }
00081