/
enc28j60_registers.h
221 lines (211 loc) · 9.19 KB
/
enc28j60_registers.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
//
// Created by esa on 2/6/16.
//
#ifndef ARM_ETHERNETBOARD_ENC28J60_REGISTERS_H
#define ARM_ETHERNETBOARD_ENC28J60_REGISTERS_H
// ENC28J60 Control Registers
// Control register definitions are a combination of address,
// bank number, and Ethernet/MAC/PHY indicator bits.
// - Register address (bits 0-4)
// - Bank number (bits 5-6)
// - MAC/PHY indicator (bit 7)
#define ADDR_MASK ((uint8_t)(0x1F))
#define BANK_MASK ((uint8_t)(0x60))
#define SPRD_MASK ((uint8_t)(0x80))
// All-bank registers
#define EIE ((uint8_t)(0x1B))
#define EIR ((uint8_t)(0x1C))
#define ESTAT ((uint8_t)(0x1D))
#define ECON2 ((uint8_t)(0x1E))
#define ECON1 ((uint8_t)(0x1F))
// Bank 0 registers
#define ERDPT ((uint8_t)(0x00|0x00))
#define EWRPT ((uint8_t)(0x02|0x00))
#define ETXST ((uint8_t)(0x04|0x00))
#define ETXND ((uint8_t)(0x06|0x00))
#define ERXST ((uint8_t)(0x08|0x00))
#define ERXND ((uint8_t)(0x0A|0x00))
#define ERXRDPT ((uint8_t)(0x0C|0x00))
// #define ERXWRPT ((uint8_t)(0x0E|0x00))
#define EDMAST ((uint8_t)(0x10|0x00))
#define EDMAND ((uint8_t)(0x12|0x00))
// #define EDMADST ((uint8_t)(0x14|0x00))
#define EDMACS ((uint8_t)(0x16|0x00))
// Bank 1 registers
#define EHT0 ((uint8_t)(0x00|0x20))
#define EHT1 ((uint8_t)(0x01|0x20))
#define EHT2 ((uint8_t)(0x02|0x20))
#define EHT3 ((uint8_t)(0x03|0x20))
#define EHT4 ((uint8_t)(0x04|0x20))
#define EHT5 ((uint8_t)(0x05|0x20))
#define EHT6 ((uint8_t)(0x06|0x20))
#define EHT7 ((uint8_t)(0x07|0x20))
#define EPMM0 ((uint8_t)(0x08|0x20))
#define EPMM1 ((uint8_t)(0x09|0x20))
#define EPMM2 ((uint8_t)(0x0A|0x20))
#define EPMM3 ((uint8_t)(0x0B|0x20))
#define EPMM4 ((uint8_t)(0x0C|0x20))
#define EPMM5 ((uint8_t)(0x0D|0x20))
#define EPMM6 ((uint8_t)(0x0E|0x20))
#define EPMM7 ((uint8_t)(0x0F|0x20))
#define EPMCS ((uint8_t)(0x10|0x20))
// #define EPMO ((uint8_t)(0x14|0x20))
#define EWOLIE ((uint8_t)(0x16|0x20))
#define EWOLIR ((uint8_t)(0x17|0x20))
#define ERXFCON ((uint8_t)(0x18|0x20))
#define EPKTCNT ((uint8_t)(0x19|0x20))
// Bank 2 registers
#define MACON1 ((uint8_t)(0x00|0x40|0x80))
#define MACON2 ((uint8_t)(0x01|0x40|0x80))
#define MACON3 ((uint8_t)(0x02|0x40|0x80))
#define MACON4 ((uint8_t)(0x03|0x40|0x80))
#define MABBIPG ((uint8_t)(0x04|0x40|0x80))
#define MAIPG ((uint8_t)(0x06|0x40|0x80))
#define MACLCON1 ((uint8_t)(0x08|0x40|0x80))
#define MACLCON2 ((uint8_t)(0x09|0x40|0x80))
#define MAMXFL ((uint8_t)(0x0A|0x40|0x80))
#define MAPHSUP ((uint8_t)(0x0D|0x40|0x80))
#define MICON ((uint8_t)(0x11|0x40|0x80))
#define MICMD ((uint8_t)(0x12|0x40|0x80))
#define MIREGADR ((uint8_t)(0x14|0x40|0x80))
#define MIWR ((uint8_t)(0x16|0x40|0x80))
#define MIRD ((uint8_t)(0x18|0x40|0x80))
// Bank 3 registers
#define MAADR1 ((uint8_t)(0x00|0x60|0x80))
#define MAADR0 ((uint8_t)(0x01|0x60|0x80))
#define MAADR3 ((uint8_t)(0x02|0x60|0x80))
#define MAADR2 ((uint8_t)(0x03|0x60|0x80))
#define MAADR5 ((uint8_t)(0x04|0x60|0x80))
#define MAADR4 ((uint8_t)(0x05|0x60|0x80))
#define EBSTSD ((uint8_t)(0x06|0x60))
#define EBSTCON ((uint8_t)(0x07|0x60))
#define EBSTCS ((uint8_t)(0x08|0x60))
#define MISTAT ((uint8_t)(0x0A|0x60|0x80))
#define EREVID ((uint8_t)(0x12|0x60))
#define ECOCON ((uint8_t)(0x15|0x60))
#define EFLOCON ((uint8_t)(0x17|0x60))
#define EPAUS ((uint8_t)(0x18|0x60))
// ENC28J60 ERXFCON Register Bit Definitions
#define ERXFCON_UCEN ((uint8_t)(0x80))
#define ERXFCON_ANDOR ((uint8_t)(0x40))
#define ERXFCON_CRCEN ((uint8_t)(0x20))
#define ERXFCON_PMEN ((uint8_t)(0x10))
#define ERXFCON_MPEN ((uint8_t)(0x08))
#define ERXFCON_HTEN ((uint8_t)(0x04))
#define ERXFCON_MCEN ((uint8_t)(0x02))
#define ERXFCON_BCEN ((uint8_t)(0x01))
// ENC28J60 EIE Register Bit Definitions
#define EIE_INTIE ((uint8_t)(0x80))
#define EIE_PKTIE ((uint8_t)(0x40))
#define EIE_DMAIE ((uint8_t)(0x20))
#define EIE_LINKIE ((uint8_t)(0x10))
#define EIE_TXIE ((uint8_t)(0x08))
#define EIE_WOLIE ((uint8_t)(0x04))
#define EIE_TXERIE ((uint8_t)(0x02))
#define EIE_RXERIE ((uint8_t)(0x01))
// ENC28J60 EIR Register Bit Definitions
#define EIR_PKTIF ((uint8_t)(0x40))
#define EIR_DMAIF ((uint8_t)(0x20))
#define EIR_LINKIF ((uint8_t)(0x10))
#define EIR_TXIF ((uint8_t)(0x08))
#define EIR_WOLIF ((uint8_t)(0x04))
#define EIR_TXERIF ((uint8_t)(0x02))
#define EIR_RXERIF ((uint8_t)(0x01))
// ENC28J60 ESTAT Register Bit Definitions
#define ESTAT_INT ((uint8_t)(0x80))
#define ESTAT_LATECOL ((uint8_t)(0x10))
#define ESTAT_RXBUSY ((uint8_t)(0x04))
#define ESTAT_TXABRT ((uint8_t)(0x02))
#define ESTAT_CLKRDY ((uint8_t)(0x01))
// ENC28J60 ECON2 Register Bit Definitions
#define ECON2_AUTOINC ((uint8_t)(0x80))
#define ECON2_PKTDEC ((uint8_t)(0x40))
#define ECON2_PWRSV ((uint8_t)(0x20))
#define ECON2_VRPS ((uint8_t)(0x08))
// ENC28J60 ECON1 Register Bit Definitions
#define ECON1_TXRST ((uint8_t)(0x80))
#define ECON1_RXRST ((uint8_t)(0x40))
#define ECON1_DMAST ((uint8_t)(0x20))
#define ECON1_CSUMEN ((uint8_t)(0x10))
#define ECON1_TXRTS ((uint8_t)(0x08))
#define ECON1_RXEN ((uint8_t)(0x04))
#define ECON1_BSEL1 ((uint8_t)(0x02))
#define ECON1_BSEL0 ((uint8_t)(0x01))
// ENC28J60 MACON1 Register Bit Definitions
#define MACON1_LOOPBK ((uint8_t)(0x10))
#define MACON1_TXPAUS ((uint8_t)(0x08))
#define MACON1_RXPAUS ((uint8_t)(0x04))
#define MACON1_PASSALL ((uint8_t)(0x02))
#define MACON1_MARXEN ((uint8_t)(0x01))
// ENC28J60 MACON2 Register Bit Definitions
#define MACON2_MARST ((uint8_t)(0x80))
#define MACON2_RNDRST ((uint8_t)(0x40))
#define MACON2_MARXRST ((uint8_t)(0x08))
#define MACON2_RFUNRST ((uint8_t)(0x04))
#define MACON2_MATXRST ((uint8_t)(0x02))
#define MACON2_TFUNRST ((uint8_t)(0x01))
// ENC28J60 MACON3 Register Bit Definitions
#define MACON3_PADCFG2 ((uint8_t)(0x80))
#define MACON3_PADCFG1 ((uint8_t)(0x40))
#define MACON3_PADCFG0 ((uint8_t)(0x20))
#define MACON3_TXCRCEN ((uint8_t)(0x10))
#define MACON3_PHDRLEN ((uint8_t)(0x08))
#define MACON3_HFRMLEN ((uint8_t)(0x04))
#define MACON3_FRMLNEN ((uint8_t)(0x02))
#define MACON3_FULDPX ((uint8_t)(0x01))
// ENC28J60 MICMD Register Bit Definitions
#define MICMD_MIISCAN ((uint8_t)(0x02))
#define MICMD_MIIRD ((uint8_t)(0x01))
// ENC28J60 MISTAT Register Bit Definitions
#define MISTAT_NVALID ((uint8_t)(0x04))
#define MISTAT_SCAN ((uint8_t)(0x02))
#define MISTAT_BUSY ((uint8_t)(0x01))
// ENC28J60 EBSTCON Register Bit Definitions
#define EBSTCON_PSV2 ((uint8_t)(0x80))
#define EBSTCON_PSV1 ((uint8_t)(0x40))
#define EBSTCON_PSV0 ((uint8_t)(0x20))
#define EBSTCON_PSEL ((uint8_t)(0x10))
#define EBSTCON_TMSEL1 ((uint8_t)(0x08))
#define EBSTCON_TMSEL0 ((uint8_t)(0x04))
#define EBSTCON_TME ((uint8_t)(0x02))
#define EBSTCON_BISTST ((uint8_t)(0x01))
// PHY registers
#define PHCON1 ((uint8_t)(0x00))
#define PHSTAT1 ((uint8_t)(0x01))
#define PHHID1 ((uint8_t)(0x02))
#define PHHID2 ((uint8_t)(0x03))
#define PHCON2 ((uint8_t)(0x10))
#define PHSTAT2 ((uint8_t)(0x11))
#define PHIE ((uint8_t)(0x12))
#define PHIR ((uint8_t)(0x13))
#define PHLCON ((uint8_t)(0x14))
// ENC28J60 PHY PHCON1 Register Bit Definitions
#define PHCON1_PRST ((uint16_t)(0x8000))
#define PHCON1_PLOOPBK ((uint16_t)(0x4000))
#define PHCON1_PPWRSV ((uint16_t)(0x0800))
#define PHCON1_PDPXMD ((uint16_t)(0x0100))
// ENC28J60 PHY PHSTAT1 Register Bit Definitions
#define PHSTAT1_PFDPX ((uint16_t)(0x1000))
#define PHSTAT1_PHDPX ((uint16_t)(0x0800))
#define PHSTAT1_LLSTAT ((uint16_t)(0x0004))
#define PHSTAT1_JBSTAT ((uint16_t)(0x0002))
// ENC28J60 PHY PHCON2 Register Bit Definitions
#define PHCON2_FRCLINK ((uint16_t)(0x4000))
#define PHCON2_TXDIS ((uint16_t)(0x2000))
#define PHCON2_JABBER ((uint16_t)(0x0400))
#define PHCON2_HDLDIS ((uint16_t)(0x0100))
// ENC28J60 Packet Control Byte Bit Definitions
#define PKTCTRL_PHUGEEN ((uint8_t)(0x08))
#define PKTCTRL_PPADEN ((uint8_t)(0x04))
#define PKTCTRL_PCRCEN ((uint8_t)(0x02))
#define PKTCTRL_POVERRIDE ((uint8_t)(0x01))
// SPI operation codes
#define ENC28J60_READ_CTRL_REG ((uint8_t)(0x00))
#define ENC28J60_READ_BUF_MEM ((uint8_t)(0x3A))
#define ENC28J60_WRITE_CTRL_REG ((uint8_t)(0x40))
#define ENC28J60_WRITE_BUF_MEM ((uint8_t)(0x7A))
#define ENC28J60_BIT_FIELD_SET ((uint8_t)(0x80))
#define ENC28J60_BIT_FIELD_CLR ((uint8_t)(0xA0))
#define ENC28J60_SOFT_RESET ((uint8_t)(0xFF))
#define ENC_READLOCATION_ANY (uint16_t)(~0)
#endif //ARM_ETHERNETBOARD_ENC28J60_REGISTERS_H