1 |
/*********************************************************************
|
2 |
*
|
3 |
* MAC Module Defs for Microchip Stack
|
4 |
*
|
5 |
*********************************************************************
|
6 |
* FileName: MAC.h
|
7 |
* Dependencies: StackTsk.h
|
8 |
* Processor: PIC18, PIC24F, PIC24H, dsPIC30F, dsPIC33F
|
9 |
* Complier: Microchip C18 v3.02 or higher
|
10 |
* Microchip C30 v2.01 or higher
|
11 |
* Company: Microchip Technology, Inc.
|
12 |
*
|
13 |
* Software License Agreement
|
14 |
*
|
15 |
* Copyright © 2002-2007 Microchip Technology Inc. All rights
|
16 |
* reserved.
|
17 |
*
|
18 |
* Microchip licenses to you the right to use, modify, copy, and
|
19 |
* distribute:
|
20 |
* (i) the Software when embedded on a Microchip microcontroller or
|
21 |
* digital signal controller product (“Device”) which is
|
22 |
* integrated into Licensee’s product; or
|
23 |
* (ii) ONLY the Software driver source files ENC28J60.c and
|
24 |
* ENC28J60.h ported to a non-Microchip device used in
|
25 |
* conjunction with a Microchip ethernet controller for the
|
26 |
* sole purpose of interfacing with the ethernet controller.
|
27 |
*
|
28 |
* You should refer to the license agreement accompanying this
|
29 |
* Software for additional information regarding your rights and
|
30 |
* obligations.
|
31 |
*
|
32 |
* THE SOFTWARE AND DOCUMENTATION ARE PROVIDED “AS IS” WITHOUT
|
33 |
* WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT
|
34 |
* LIMITATION, ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
35 |
* PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
36 |
* MICROCHIP BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR
|
37 |
* CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF
|
38 |
* PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
|
39 |
* BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE
|
40 |
* THEREOF), ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER
|
41 |
* SIMILAR COSTS, WHETHER ASSERTED ON THE BASIS OF CONTRACT, TORT
|
42 |
* (INCLUDING NEGLIGENCE), BREACH OF WARRANTY, OR OTHERWISE.
|
43 |
*
|
44 |
*
|
45 |
* Author Date Comment
|
46 |
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
47 |
* Nilesh Rajbharti 4/27/01 Original (Rev 1.0)
|
48 |
* Nilesh Rajbharti 11/27/01 Added SLIP
|
49 |
* Nilesh Rajbharti 2/9/02 Cleanup
|
50 |
* Nilesh Rajbharti 5/22/02 Rev 2.0 (See version.log for detail)
|
51 |
* Howard Schlunder 6/28/04 Added ENC28J60 specific features
|
52 |
* Howard Schlunder 11/29/04 Added Get/SetLEDConfig macros
|
53 |
********************************************************************/
|
54 |
#ifndef __MAC_H
|
55 |
#define __MAC_H
|
56 |
|
57 |
|
58 |
#if (!defined(ENC_CS_TRIS)) && \
|
59 |
(defined(__18F97J60) || defined(__18F96J65) || defined(__18F96J60) || defined(__18F87J60) || defined(__18F86J65) || defined(__18F86J60) || defined(__18F67J60) || defined(__18F66J65) || defined(__18F66J60) || \
|
60 |
defined(_18F97J60) || defined(_18F96J65) || defined(_18F96J60) || defined(_18F87J60) || defined(_18F86J65) || defined(_18F86J60) || defined(_18F67J60) || defined(_18F66J65) || defined(_18F66J60))
|
61 |
#include "TCPIP Stack/ETH97J60.h"
|
62 |
#else
|
63 |
#include "TCPIP Stack/ENC28J60.h"
|
64 |
#endif
|
65 |
|
66 |
#if !defined(STACK_USE_SLIP)
|
67 |
// The MAC_TX_BUFFER_COUNT must be equal to MAX_TCP_SOCKETS + 1
|
68 |
// (1 reserved for high priority messages), or else calls to
|
69 |
// TCPPut may fail when multiple TCP sockets have data pending
|
70 |
// in the output buffer that hasn't been ACKed. Changing this
|
71 |
// value is recommended only if the rammifications of doing so
|
72 |
// are properly understood.
|
73 |
#if defined(NON_MCHP_MAC)
|
74 |
#define MAC_TX_BUFFER_SIZE (1024ul)
|
75 |
#define MAC_TX_BUFFER_COUNT (1u)
|
76 |
|
77 |
#if (MAC_TX_BUFFER_SIZE <= 0 || MAC_TX_BUFFER_SIZE > 1500 )
|
78 |
#error Invalid MAC_TX_BUFFER_SIZE value specified.
|
79 |
#endif
|
80 |
#else
|
81 |
#define MAC_TX_BUFFER_SIZE (1500ul)
|
82 |
#endif
|
83 |
|
84 |
// A generic structure representing the Ethernet header starting all Ethernet
|
85 |
// frames
|
86 |
typedef struct _ETHER_HEADER
|
87 |
{
|
88 |
MAC_ADDR DestMACAddr;
|
89 |
MAC_ADDR SourceMACAddr;
|
90 |
WORD_VAL Type;
|
91 |
} ETHER_HEADER;
|
92 |
#else
|
93 |
/*
|
94 |
* For SLIP, there can only be one transmit and one receive buffer.
|
95 |
* Both buffers must fit in one bank. If bigger buffer is required,
|
96 |
* you must manually locate tx and rx buffer in different bank
|
97 |
* or modify your linker script file to support arrays bigger than
|
98 |
* 256 bytes.
|
99 |
*/
|
100 |
#define MAC_TX_BUFFER_SIZE (250ul)
|
101 |
#define MAC_TX_BUFFER_COUNT (1u)
|
102 |
|
103 |
|
104 |
typedef struct _ETHER_HEADER
|
105 |
{
|
106 |
} ETHER_HEADER;
|
107 |
#endif
|
108 |
// Rest are Receive Buffers
|
109 |
|
110 |
|
111 |
#define MAC_IP (0x00u)
|
112 |
#define MAC_ARP (0x06u)
|
113 |
#define MAC_UNKNOWN (0xFFu)
|
114 |
|
115 |
|
116 |
|
117 |
/*
|
118 |
* Microchip Ethernet controller specific MAC items
|
119 |
*/
|
120 |
#if !defined(RESERVED_TCP_MEMORY)
|
121 |
#define RESERVED_TCP_MEMORY 0ul
|
122 |
#endif
|
123 |
|
124 |
// MAC RAM definitions
|
125 |
#define RAMSIZE 8192ul
|
126 |
#define TXSTART ((RAMSIZE-1ul) - (1ul+1514ul+7ul) - RESERVED_TCP_MEMORY)
|
127 |
#define RXSTART (0ul) // Should be an even memory address; must be 0 for errata
|
128 |
#define RXSTOP ((TXSTART-2ul) | 0x0001ul) // Odd for errata workaround
|
129 |
#define RXSIZE (RXSTOP-RXSTART+1ul)
|
130 |
|
131 |
#define BASE_TX_ADDR (TXSTART + 1ul)
|
132 |
#define BASE_TCB_ADDR (BASE_TX_ADDR + (1514ul+7ul))
|
133 |
|
134 |
#if RXSIZE < 1400
|
135 |
#error Warning, Ethernet RX buffer is tiny. Reduce MAX_TCP_SOCKETS, TCP_TX_FIFO_SIZE, or TCP_RX_FIFO_SIZE
|
136 |
#endif
|
137 |
|
138 |
|
139 |
WORD MACCalcRxChecksum(WORD offset, WORD len);
|
140 |
WORD CalcIPBufferChecksum(WORD len);
|
141 |
|
142 |
void MACPowerDown(void);
|
143 |
void MACPowerUp(void);
|
144 |
void WritePHYReg(BYTE Register, WORD Data);
|
145 |
PHYREG ReadPHYReg(BYTE Register);
|
146 |
void SetRXHashTableEntry(MAC_ADDR DestMACAddr);
|
147 |
|
148 |
// ENC28J60 specific
|
149 |
void SetCLKOUT(BYTE NewConfig);
|
150 |
BYTE GetCLKOUT(void);
|
151 |
|
152 |
/******************************************************************************
|
153 |
* Macro: void SetLEDConfig(WORD NewConfig)
|
154 |
*
|
155 |
* PreCondition: SPI bus must be initialized (done in MACInit()).
|
156 |
*
|
157 |
* Input: NewConfig - xxx0: Pulse stretching disabled
|
158 |
* xxx2: Pulse stretch to 40ms (default)
|
159 |
* xxx6: Pulse stretch to 73ms
|
160 |
* xxxA: Pulse stretch to 139ms
|
161 |
*
|
162 |
* xx1x: LEDB - TX
|
163 |
* xx2x: LEDB - RX (default)
|
164 |
* xx3x: LEDB - collisions
|
165 |
* xx4x: LEDB - link
|
166 |
* xx5x: LEDB - duplex
|
167 |
* xx7x: LEDB - TX and RX
|
168 |
* xx8x: LEDB - on
|
169 |
* xx9x: LEDB - off
|
170 |
* xxAx: LEDB - blink fast
|
171 |
* xxBx: LEDB - blink slow
|
172 |
* xxCx: LEDB - link and RX
|
173 |
* xxDx: LEDB - link and TX and RX
|
174 |
* xxEx: LEDB - duplex and collisions
|
175 |
*
|
176 |
* x1xx: LEDA - TX
|
177 |
* x2xx: LEDA - RX
|
178 |
* x3xx: LEDA - collisions
|
179 |
* x4xx: LEDA - link (default)
|
180 |
* x5xx: LEDA - duplex
|
181 |
* x7xx: LEDA - TX and RX
|
182 |
* x8xx: LEDA - on
|
183 |
* x9xx: LEDA - off
|
184 |
* xAxx: LEDA - blink fast
|
185 |
* xBxx: LEDA - blink slow
|
186 |
* xCxx: LEDA - link and RX
|
187 |
* xDxx: LEDA - link and TX and RX
|
188 |
* xExx: LEDA - duplex and collisions
|
189 |
*
|
190 |
* Output: None
|
191 |
*
|
192 |
* Side Effects: None
|
193 |
*
|
194 |
* Overview: Writes the value of NewConfig into the PHLCON PHY register.
|
195 |
* The LED pins will beginning outputting the new
|
196 |
* configuration immediately.
|
197 |
*
|
198 |
* Note:
|
199 |
*****************************************************************************/
|
200 |
#define SetLEDConfig(NewConfig) WritePHYReg(PHLCON, NewConfig)
|
201 |
|
202 |
|
203 |
/******************************************************************************
|
204 |
* Macro: WORD GetLEDConfig(void)
|
205 |
*
|
206 |
* PreCondition: SPI bus must be initialized (done in MACInit()).
|
207 |
*
|
208 |
* Input: None
|
209 |
*
|
210 |
* Output: WORD - xxx0: Pulse stretching disabled
|
211 |
* xxx2: Pulse stretch to 40ms (default)
|
212 |
* xxx6: Pulse stretch to 73ms
|
213 |
* xxxA: Pulse stretch to 139ms
|
214 |
*
|
215 |
* xx1x: LEDB - TX
|
216 |
* xx2x: LEDB - RX (default)
|
217 |
* xx3x: LEDB - collisions
|
218 |
* xx4x: LEDB - link
|
219 |
* xx5x: LEDB - duplex
|
220 |
* xx7x: LEDB - TX and RX
|
221 |
* xx8x: LEDB - on
|
222 |
* xx9x: LEDB - off
|
223 |
* xxAx: LEDB - blink fast
|
224 |
* xxBx: LEDB - blink slow
|
225 |
* xxCx: LEDB - link and RX
|
226 |
* xxDx: LEDB - link and TX and RX
|
227 |
* xxEx: LEDB - duplex and collisions
|
228 |
*
|
229 |
* x1xx: LEDA - TX
|
230 |
* x2xx: LEDA - RX
|
231 |
* x3xx: LEDA - collisions
|
232 |
* x4xx: LEDA - link (default)
|
233 |
* x5xx: LEDA - duplex
|
234 |
* x7xx: LEDA - TX and RX
|
235 |
* x8xx: LEDA - on
|
236 |
* x9xx: LEDA - off
|
237 |
* xAxx: LEDA - blink fast
|
238 |
* xBxx: LEDA - blink slow
|
239 |
* xCxx: LEDA - link and RX
|
240 |
* xDxx: LEDA - link and TX and RX
|
241 |
* xExx: LEDA - duplex and collisions
|
242 |
*
|
243 |
* Side Effects: None
|
244 |
*
|
245 |
* Overview: Returns the current value of the PHLCON register.
|
246 |
*
|
247 |
* Note: None
|
248 |
*****************************************************************************/
|
249 |
#define GetLEDConfig() ReadPHYReg(PHLCON).Val
|
250 |
|
251 |
|
252 |
void MACInit(void);
|
253 |
BOOL MACIsLinked(void);
|
254 |
|
255 |
BOOL MACGetHeader(MAC_ADDR *remote, BYTE* type);
|
256 |
void MACSetReadPtrInRx(WORD offset);
|
257 |
WORD MACSetWritePtr(WORD address);
|
258 |
WORD MACSetReadPtr(WORD address);
|
259 |
BYTE MACGet(void);
|
260 |
WORD MACGetArray(BYTE *val, WORD len);
|
261 |
void MACDiscardRx(void);
|
262 |
WORD MACGetFreeRxSize(void);
|
263 |
void MACMemCopyAsync(WORD destAddr, WORD sourceAddr, WORD len);
|
264 |
BOOL MACIsMemCopyDone(void);
|
265 |
|
266 |
void MACPutHeader(MAC_ADDR *remote, BYTE type, WORD dataLen);
|
267 |
BOOL MACIsTxReady(void);
|
268 |
void MACPut(BYTE val);
|
269 |
void MACPutArray(BYTE *val, WORD len);
|
270 |
void MACPutROMArray(ROM BYTE *val, WORD len);
|
271 |
void MACFlush(void);
|
272 |
|
273 |
|
274 |
#if defined(STACK_USE_SLIP)
|
275 |
#define NICCurrentTxBuffer (0u)
|
276 |
#endif
|
277 |
|
278 |
|
279 |
|
280 |
#endif
|