EtherCAT Slave Library (LAN9252) https://www.switch-science.com/catalog/6659/

Dependencies:   mbed

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?

UserRevisionLine numberNew contents of line
nonNoise 0:3516fed95f0b 1
nonNoise 0:3516fed95f0b 2 #include "LAN9252.h"
nonNoise 0:3516fed95f0b 3 #include "LAN925X_SPI.h"
nonNoise 0:3516fed95f0b 4 #include <stdint.h>
nonNoise 0:3516fed95f0b 5
nonNoise 0:3516fed95f0b 6 //=============================================================================//
nonNoise 0:3516fed95f0b 7 // LAN9252 RESET
nonNoise 0:3516fed95f0b 8 //=============================================================================//
nonNoise 0:3516fed95f0b 9 void LAN9252_RESET(void)
nonNoise 0:3516fed95f0b 10 {
nonNoise 0:3516fed95f0b 11 uint32_t rdata;
nonNoise 0:3516fed95f0b 12 uint32_t wdata;
nonNoise 0:3516fed95f0b 13 uint32_t addr;
nonNoise 0:3516fed95f0b 14
nonNoise 0:3516fed95f0b 15 addr = RESET_CTL;
nonNoise 0:3516fed95f0b 16 LAN925X_SPI_WRITE(addr,ETHERCAT_RST);
nonNoise 0:3516fed95f0b 17 addr = BYTE_TEST;
nonNoise 0:3516fed95f0b 18 rdata = LAN925X_SPI_READ(addr);
nonNoise 0:3516fed95f0b 19 while(rdata!=0x87654321)
nonNoise 0:3516fed95f0b 20 {
nonNoise 0:3516fed95f0b 21 addr = BYTE_TEST;
nonNoise 0:3516fed95f0b 22 rdata = LAN925X_SPI_READ(addr);
nonNoise 0:3516fed95f0b 23 }
nonNoise 0:3516fed95f0b 24 }
nonNoise 0:3516fed95f0b 25
nonNoise 0:3516fed95f0b 26 //=============================================================================//
nonNoise 0:3516fed95f0b 27 // LAN9252 EtherCAT CSR WRITE
nonNoise 0:3516fed95f0b 28 //=============================================================================//
nonNoise 0:3516fed95f0b 29 void LAN9252_EtherCAT_CSR_WRITE(uint8_t CSR_SIZE,uint16_t CSR_ADDR,uint32_t CSR_DATA)
nonNoise 0:3516fed95f0b 30 {
nonNoise 0:3516fed95f0b 31
nonNoise 0:3516fed95f0b 32 uint32_t rdata;
nonNoise 0:3516fed95f0b 33 uint32_t wdata;
nonNoise 0:3516fed95f0b 34 uint16_t addr;
nonNoise 0:3516fed95f0b 35 addr = ECAT_CSR_DATA;
nonNoise 0:3516fed95f0b 36 wdata = CSR_DATA;
nonNoise 0:3516fed95f0b 37 LAN925X_SPI_WRITE(addr,wdata);
nonNoise 0:3516fed95f0b 38
nonNoise 0:3516fed95f0b 39 addr = ECAT_CSR_CMD;
nonNoise 0:3516fed95f0b 40 wdata = (uint32_t)CSR_BUSY | (uint32_t)0<<30 | (uint32_t)CSR_SIZE<<16 | (uint32_t)CSR_ADDR; //Write
nonNoise 0:3516fed95f0b 41 LAN925X_SPI_WRITE(addr,wdata);
nonNoise 0:3516fed95f0b 42
nonNoise 0:3516fed95f0b 43 addr = ECAT_CSR_CMD;
nonNoise 0:3516fed95f0b 44 rdata = LAN925X_SPI_READ(addr);
nonNoise 0:3516fed95f0b 45 while(CSR_BUSY&rdata)
nonNoise 0:3516fed95f0b 46 {
nonNoise 0:3516fed95f0b 47 addr = ECAT_CSR_CMD;
nonNoise 0:3516fed95f0b 48 rdata = LAN925X_SPI_READ(addr);
nonNoise 0:3516fed95f0b 49 }
nonNoise 0:3516fed95f0b 50
nonNoise 0:3516fed95f0b 51 }
nonNoise 0:3516fed95f0b 52 //=============================================================================//
nonNoise 0:3516fed95f0b 53 // LAN9252 EtherCAT CSR READ
nonNoise 0:3516fed95f0b 54 //=============================================================================//
nonNoise 0:3516fed95f0b 55 uint32_t LAN9252_EtherCAT_CSR_READ(uint8_t CSR_SIZE,uint16_t CSR_ADDR)
nonNoise 0:3516fed95f0b 56 {
nonNoise 0:3516fed95f0b 57
nonNoise 0:3516fed95f0b 58 uint32_t rdata;
nonNoise 0:3516fed95f0b 59 uint32_t wdata;
nonNoise 0:3516fed95f0b 60 uint16_t addr;
nonNoise 0:3516fed95f0b 61 addr = ECAT_CSR_CMD;
nonNoise 0:3516fed95f0b 62 wdata = (uint32_t)CSR_BUSY | (uint32_t)1<<30 | (uint32_t)CSR_SIZE<<16 | (uint32_t)CSR_ADDR; //Read
nonNoise 0:3516fed95f0b 63 LAN925X_SPI_WRITE(addr,wdata);
nonNoise 0:3516fed95f0b 64
nonNoise 0:3516fed95f0b 65 addr = ECAT_CSR_CMD;
nonNoise 0:3516fed95f0b 66 rdata = LAN925X_SPI_READ(addr);
nonNoise 0:3516fed95f0b 67 while(CSR_BUSY&rdata)
nonNoise 0:3516fed95f0b 68 {
nonNoise 0:3516fed95f0b 69 addr = ECAT_CSR_CMD;
nonNoise 0:3516fed95f0b 70 rdata = LAN925X_SPI_READ(addr);
nonNoise 0:3516fed95f0b 71 }
nonNoise 0:3516fed95f0b 72 addr = ECAT_CSR_DATA;
nonNoise 0:3516fed95f0b 73 rdata = LAN925X_SPI_READ(addr);
nonNoise 0:3516fed95f0b 74 return rdata;
nonNoise 0:3516fed95f0b 75 }
nonNoise 0:3516fed95f0b 76 //=============================================================================//
nonNoise 0:3516fed95f0b 77 // LAN9252 EtherCAT Prossec RAM Read
nonNoise 0:3516fed95f0b 78 //=============================================================================//
nonNoise 0:3516fed95f0b 79 uint32_t LAN9252_EtherCAT_PRAM_READ(uint16_t PRAM_READ_LEN,uint16_t PRAM_READ_ADDR)
nonNoise 0:3516fed95f0b 80 {
nonNoise 0:3516fed95f0b 81 uint32_t rdata;
nonNoise 0:3516fed95f0b 82 uint32_t wdata;
nonNoise 0:3516fed95f0b 83 uint32_t tmp;
nonNoise 0:3516fed95f0b 84 uint16_t addr;
nonNoise 0:3516fed95f0b 85
nonNoise 0:3516fed95f0b 86 addr = ECAT_PRAM_RD_ADDR_LEN;
nonNoise 0:3516fed95f0b 87 wdata = (uint32_t)PRAM_READ_LEN<<16 | (uint32_t)PRAM_READ_ADDR;
nonNoise 0:3516fed95f0b 88 LAN925X_SPI_WRITE(addr,wdata);
nonNoise 0:3516fed95f0b 89
nonNoise 0:3516fed95f0b 90 addr = ECAT_PRAM_RD_CMD;
nonNoise 0:3516fed95f0b 91 wdata = PRAM_READ_BUSY ;
nonNoise 0:3516fed95f0b 92 LAN925X_SPI_WRITE(addr,wdata);
nonNoise 0:3516fed95f0b 93
nonNoise 0:3516fed95f0b 94 addr = ECAT_PRAM_RD_DATA;
nonNoise 0:3516fed95f0b 95 rdata = LAN925X_SPI_READ(addr);
nonNoise 0:3516fed95f0b 96
nonNoise 0:3516fed95f0b 97 addr = ECAT_PRAM_RD_CMD;
nonNoise 0:3516fed95f0b 98 tmp = LAN925X_SPI_READ(addr);
nonNoise 0:3516fed95f0b 99 while(PRAM_READ_BUSY&tmp)
nonNoise 0:3516fed95f0b 100 {
nonNoise 0:3516fed95f0b 101 addr = ECAT_PRAM_RD_CMD;
nonNoise 0:3516fed95f0b 102 tmp = LAN925X_SPI_READ(addr);
nonNoise 0:3516fed95f0b 103 }
nonNoise 0:3516fed95f0b 104 return rdata;
nonNoise 0:3516fed95f0b 105 }
nonNoise 0:3516fed95f0b 106 //=============================================================================//
nonNoise 0:3516fed95f0b 107 // LAN9252 EtherCAT Prossec RAM Read
nonNoise 0:3516fed95f0b 108 //=============================================================================//
nonNoise 0:3516fed95f0b 109 void LAN9252_EtherCAT_PRAM_WRITE(uint16_t PRAM_WRITE_LEN,uint16_t PRAM_WRITE_ADDR, uint32_t PRAM_WR_DATA)
nonNoise 0:3516fed95f0b 110 {
nonNoise 0:3516fed95f0b 111 uint32_t rdata;
nonNoise 0:3516fed95f0b 112 uint32_t wdata;
nonNoise 0:3516fed95f0b 113 uint32_t tmp;
nonNoise 0:3516fed95f0b 114 uint16_t addr;
nonNoise 0:3516fed95f0b 115
nonNoise 0:3516fed95f0b 116
nonNoise 0:3516fed95f0b 117 addr = ECAT_PRAM_WR_DATA;
nonNoise 0:3516fed95f0b 118 wdata = PRAM_WR_DATA;
nonNoise 0:3516fed95f0b 119 LAN925X_SPI_WRITE(addr,wdata);
nonNoise 0:3516fed95f0b 120
nonNoise 0:3516fed95f0b 121 addr = ECAT_PRAM_WR_ADDR_LEN;
nonNoise 0:3516fed95f0b 122 wdata = (uint32_t)PRAM_WRITE_LEN<<16 | (uint32_t)PRAM_WRITE_ADDR;
nonNoise 0:3516fed95f0b 123 LAN925X_SPI_WRITE(addr,wdata);
nonNoise 0:3516fed95f0b 124
nonNoise 0:3516fed95f0b 125 addr = ECAT_PRAM_WR_CMD;
nonNoise 0:3516fed95f0b 126 wdata = PRAM_WRITE_BUSY ;
nonNoise 0:3516fed95f0b 127 LAN925X_SPI_WRITE(addr,wdata);
nonNoise 0:3516fed95f0b 128
nonNoise 0:3516fed95f0b 129 addr = ECAT_PRAM_WR_CMD;
nonNoise 0:3516fed95f0b 130 tmp = LAN925X_SPI_READ(addr);
nonNoise 0:3516fed95f0b 131 while(PRAM_WRITE_BUSY&tmp)
nonNoise 0:3516fed95f0b 132 {
nonNoise 0:3516fed95f0b 133 addr = ECAT_PRAM_WR_CMD;
nonNoise 0:3516fed95f0b 134 tmp = LAN925X_SPI_READ(addr);
nonNoise 0:3516fed95f0b 135 }
nonNoise 0:3516fed95f0b 136 }
nonNoise 0:3516fed95f0b 137