STM_ENC28_J60.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #include "main.h"
  2. // Operations Defines
  3. #define ENC28_READ_CTRL_REG 0x00
  4. #define ENC28_WRITE_CTRL_REG 0x40 //0x02
  5. #define ENC28_BIT_FIELD_CLR 0xA0 //0x05
  6. #define ENC28_BIT_FIELD_SET 0x80 //0x04
  7. #define ENC28_SOFT_RESET 0xFF //0x07
  8. #define ENC28_READ_BUF_MEM 0x3A //0x01
  9. #define ENC28_WRITE_BUF_MEM 0x7A //0x03
  10. // Masks and some constants
  11. #define ADDR_MASK 0x1F
  12. #define BANK_MASK 0x60 //0110 0000
  13. #define RXSTART_INIT 0x0000
  14. #define RXSTOP_INIT 0x0BFF
  15. #define TXSTART_INIT 0x0C00
  16. #define TXSTOP_INIT 0x11FF
  17. #define MAX_FRAMELEN 1500
  18. #define MISTAT_BUSY 0x01
  19. // Bank0 - control registers addresses
  20. #define ERDPT 0x00
  21. #define EWRPT 0x02
  22. #define ETXST 0x04
  23. #define ETXND 0x06
  24. #define ERXST 0x08
  25. #define ERXND 0x0A
  26. #define ERXRDPT 0x0C
  27. #define ERXWRPT 0x0E
  28. // Bank1 - control registers addresses
  29. #define ERXFCON 0x18|0x20
  30. #define EPMM0 0x08|0x20
  31. #define EPMCS 0x10|0x20
  32. #define EPKTCNT 0x19|0x20
  33. // Bank2 - control registers addresses
  34. #define MACON1 0x00|0x40
  35. #define MACON2 0x01|0x40
  36. #define MACON3 0x02|0x40
  37. #define MAIPG 0x06|0x40|0x80
  38. #define MABBIPG 0x04|0x40|0x80
  39. #define MAMXFL 0x0A|0x40|0x80
  40. #define MIREGADR 0x14|0x40|0x80
  41. #define MIWR 0x16|0x40|0x80
  42. #define MICMD 0x12|0x40|0x80
  43. #define MIRD 0x18|0x40|0x80
  44. // Bank3 - control registers addresses
  45. #define MAADR1 0x04|0x60|0x80
  46. #define MAADR2 0x05|0x60|0x80
  47. #define MAADR3 0x02|0x60|0x80
  48. #define MAADR4 0x03|0x60|0x80
  49. #define MAADR5 0x00|0x60|0x80
  50. #define MAADR6 0x01|0x60|0x80
  51. #define MISTAT 0x0A|0x60|0x80
  52. #define EREVID 0x12|0x60
  53. // Common registers
  54. #define EIE 0x1B
  55. #define EIR 0x1C
  56. #define ESTAT 0x1D
  57. #define ECON1 0x1F
  58. #define ECON2 0x1E
  59. // BitField Defines
  60. #define ECON1_BSEL0 0x01
  61. #define ECON1_BSEL1 0x02
  62. #define ESTAT_CLKRDY 0x01
  63. #define ECON2_PKTDEC 0x40
  64. #define ECON2_AUTOINC 0x80
  65. #define ECON1_RXEN 0x04
  66. #define ECON1_TXRST 0x80
  67. #define ECON1_TXRTS 0x08
  68. #define ERXFCON_UCEN 0x80
  69. #define ERXFCON_CRCEN 0x20
  70. #define ERXFCON_PMEN 0x10
  71. #define ERXFCON_BCEN 0x01
  72. #define ERXFCON_ANDOR 0x40
  73. #define MACON1_MARXEN 0x01
  74. #define MACON1_TXPAUS 0x08
  75. #define MACON1_RXPAUS 0x04
  76. #define MACON1_PASSALL 0x02
  77. #define MACON3_PADCFG0 0x20
  78. #define MACON3_TXCRCEN 0x10
  79. #define MACON3_FRMLNEN 0x02
  80. #define EIE_INTIE 0x80
  81. #define EIE_PKTIE 0x40
  82. #define EIR_TXERIF 0x02
  83. #define EIR_PKTIF 0x40
  84. #define EIR_TXIF 0x08
  85. #define MICMD_MIIRD 0x01
  86. //my MAC address 0x74,0x69,0x69,0x2D,0x30,0x36
  87. #define MAC_1 0x36
  88. #define MAC_2 0x30
  89. #define MAC_3 0x2D
  90. #define MAC_4 0x69
  91. #define MAC_5 0x69
  92. #define MAC_6 0x74
  93. // PHY layer
  94. #define PHCON2_HDLDIS 0x0100
  95. #define PHLCON_LED 0x0122
  96. #define PHCON2 0x10
  97. #define PHSTAT2 0x11
  98. #define PHLCON 0x14
  99. //Functions prototypes
  100. uint8_t ENC28_readOp(uint8_t oper, uint8_t addr);
  101. void ENC28_writeOp(uint8_t oper, uint8_t addr, uint8_t data);
  102. uint8_t ENC28_readReg8( uint8_t addr);
  103. void ENC28_writeReg8(uint8_t addr, uint8_t data);
  104. uint16_t ENC28_readReg16( uint8_t addr);
  105. void ENC28_writeReg16(uint8_t addrL, uint16_t data);
  106. void ENC28_setBank(uint8_t addr);
  107. void ENC28_Init(void);
  108. void ENC28_writePhy(uint8_t addr, uint16_t data);
  109. uint16_t ENC28_readPhy(uint8_t addr);
  110. void ENC28_packetSend(uint16_t len, uint8_t* dataBuf);
  111. void ENC28_writeBuf(uint16_t len, uint8_t* data);