Yuta Kitagami / Mbed 2 deprecated EtherCAT_Nucleo_F401

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers LAN9252.cpp Source File

LAN9252.cpp

00001 
00002 #include "LAN9252.h"
00003 #include "LAN925X_SPI.h"
00004 #include <stdint.h>
00005 
00006 //=============================================================================//
00007 // LAN9252 RESET
00008 //=============================================================================//
00009 void LAN9252_RESET(void)
00010 {
00011     uint32_t rdata;
00012     uint32_t wdata;
00013     uint32_t addr;
00014     
00015     addr = RESET_CTL;
00016     LAN925X_SPI_WRITE(addr,ETHERCAT_RST);       
00017     addr = BYTE_TEST;
00018     rdata = LAN925X_SPI_READ(addr);
00019     while(rdata!=0x87654321)
00020     {
00021         addr = BYTE_TEST;
00022         rdata = LAN925X_SPI_READ(addr);
00023     }
00024 }
00025 
00026 //=============================================================================//
00027 // LAN9252 EtherCAT CSR WRITE
00028 //=============================================================================//
00029 void LAN9252_EtherCAT_CSR_WRITE(uint8_t CSR_SIZE,uint16_t CSR_ADDR,uint32_t CSR_DATA)
00030 {
00031 
00032     uint32_t rdata;
00033     uint32_t wdata;
00034     uint16_t addr;
00035     addr = ECAT_CSR_DATA;
00036     wdata = CSR_DATA;
00037     LAN925X_SPI_WRITE(addr,wdata);
00038 
00039     addr = ECAT_CSR_CMD;
00040     wdata = (uint32_t)CSR_BUSY | (uint32_t)0<<30 | (uint32_t)CSR_SIZE<<16 | (uint32_t)CSR_ADDR; //Write
00041     LAN925X_SPI_WRITE(addr,wdata);
00042     
00043     addr = ECAT_CSR_CMD;
00044     rdata = LAN925X_SPI_READ(addr);
00045     while(CSR_BUSY&rdata)
00046     {
00047         addr = ECAT_CSR_CMD;
00048         rdata = LAN925X_SPI_READ(addr);
00049     }
00050 
00051 }
00052 //=============================================================================//
00053 // LAN9252 EtherCAT CSR READ
00054 //=============================================================================//
00055 uint32_t LAN9252_EtherCAT_CSR_READ(uint8_t CSR_SIZE,uint16_t CSR_ADDR)
00056 {
00057 
00058     uint32_t rdata;
00059     uint32_t wdata;
00060     uint16_t addr;
00061     addr = ECAT_CSR_CMD;
00062     wdata = (uint32_t)CSR_BUSY | (uint32_t)1<<30 | (uint32_t)CSR_SIZE<<16 | (uint32_t)CSR_ADDR; //Read
00063     LAN925X_SPI_WRITE(addr,wdata);
00064     
00065     addr = ECAT_CSR_CMD;
00066     rdata = LAN925X_SPI_READ(addr);
00067     while(CSR_BUSY&rdata)
00068     {
00069         addr = ECAT_CSR_CMD;
00070         rdata = LAN925X_SPI_READ(addr);
00071     }
00072     addr = ECAT_CSR_DATA;
00073     rdata = LAN925X_SPI_READ(addr);
00074     return rdata;
00075 }
00076 //=============================================================================//
00077 // LAN9252 EtherCAT Prossec RAM Read
00078 //=============================================================================//
00079 uint32_t LAN9252_EtherCAT_PRAM_READ(uint16_t PRAM_READ_LEN,uint16_t PRAM_READ_ADDR)
00080 {
00081     uint32_t rdata;
00082     uint32_t wdata;
00083     uint32_t tmp;
00084     uint16_t addr;
00085     
00086     addr = ECAT_PRAM_RD_ADDR_LEN;
00087     wdata = (uint32_t)PRAM_READ_LEN<<16 | (uint32_t)PRAM_READ_ADDR; 
00088     LAN925X_SPI_WRITE(addr,wdata);
00089 
00090     addr = ECAT_PRAM_RD_CMD;
00091     wdata = PRAM_READ_BUSY ; 
00092     LAN925X_SPI_WRITE(addr,wdata);
00093 
00094     addr = ECAT_PRAM_RD_DATA;
00095     rdata = LAN925X_SPI_READ(addr);
00096 
00097     addr = ECAT_PRAM_RD_CMD;
00098     tmp = LAN925X_SPI_READ(addr);
00099     while(PRAM_READ_BUSY&tmp)
00100     {
00101         addr = ECAT_PRAM_RD_CMD;
00102         tmp = LAN925X_SPI_READ(addr);
00103     }
00104     return rdata;
00105 }
00106 //=============================================================================//
00107 // LAN9252 EtherCAT Prossec RAM Read
00108 //=============================================================================//
00109 void LAN9252_EtherCAT_PRAM_WRITE(uint16_t PRAM_WRITE_LEN,uint16_t PRAM_WRITE_ADDR, uint32_t PRAM_WR_DATA)
00110 {
00111     uint32_t rdata;
00112     uint32_t wdata;
00113     uint32_t tmp;
00114     uint16_t addr;
00115 
00116     
00117     addr = ECAT_PRAM_WR_DATA;
00118     wdata = PRAM_WR_DATA; 
00119     LAN925X_SPI_WRITE(addr,wdata);
00120     
00121     addr = ECAT_PRAM_WR_ADDR_LEN;
00122     wdata = (uint32_t)PRAM_WRITE_LEN<<16 | (uint32_t)PRAM_WRITE_ADDR; 
00123     LAN925X_SPI_WRITE(addr,wdata);
00124 
00125     addr = ECAT_PRAM_WR_CMD;
00126     wdata = PRAM_WRITE_BUSY ; 
00127     LAN925X_SPI_WRITE(addr,wdata);
00128 
00129     addr = ECAT_PRAM_WR_CMD;
00130     tmp = LAN925X_SPI_READ(addr);
00131     while(PRAM_WRITE_BUSY&tmp)
00132     {
00133         addr = ECAT_PRAM_WR_CMD;
00134         tmp = LAN925X_SPI_READ(addr);
00135     }
00136 }
00137