mikroSDK Reference Manual
sam9263_eth_driver.h
Go to the documentation of this file.
1
31#ifndef _SAM9263_ETH_DRIVER_H
32#define _SAM9263_ETH_DRIVER_H
33
34//Number of TX buffers
35#ifndef SAM9263_ETH_TX_BUFFER_COUNT
36 #define SAM9263_ETH_TX_BUFFER_COUNT 3
37#elif (SAM9263_ETH_TX_BUFFER_COUNT < 1)
38 #error SAM9263_ETH_TX_BUFFER_COUNT parameter is not valid
39#endif
40
41//TX buffer size
42#ifndef SAM9263_ETH_TX_BUFFER_SIZE
43 #define SAM9263_ETH_TX_BUFFER_SIZE 1536
44#elif (SAM9263_ETH_TX_BUFFER_SIZE != 1536)
45 #error SAM9263_ETH_TX_BUFFER_SIZE parameter is not valid
46#endif
47
48//Number of RX buffers
49#ifndef SAM9263_ETH_RX_BUFFER_COUNT
50 #define SAM9263_ETH_RX_BUFFER_COUNT 72
51#elif (SAM9263_ETH_RX_BUFFER_COUNT < 12)
52 #error SAM9263_ETH_RX_BUFFER_COUNT parameter is not valid
53#endif
54
55//RX buffer size
56#ifndef SAM9263_ETH_RX_BUFFER_SIZE
57 #define SAM9263_ETH_RX_BUFFER_SIZE 128
58#elif (SAM9263_ETH_RX_BUFFER_SIZE != 128)
59 #error SAM9263_ETH_RX_BUFFER_SIZE parameter is not valid
60#endif
61
62//EMAC controller base address
63#define AT91C_BASE_EMAC AT91C_BASE_MACB
64
65//RMII signals
66#define AT91C_EMAC_RMII_MASK_C AT91C_PC25_ERXDV
67
68#define AT91C_EMAC_RMII_MASK_E (AT91C_PE30_EMDIO | \
69 AT91C_PE29_EMDC | AT91C_PE28_ETXEN | AT91C_PE27_ERXER | AT91C_PE26_ERX1 | \
70 AT91C_PE25_ERX0 | AT91C_PE24_ETX1 | AT91C_PE23_ETX0 | AT91C_PE21_ETXCK)
71
72//PHY maintenance register (EMAC_MAN)
73#define AT91C_EMAC_SOF_01 (1 << 30)
74#define AT91C_EMAC_RW_01 (1 << 28)
75#define AT91C_EMAC_RW_10 (2 << 28)
76#define AT91C_EMAC_CODE_10 (2 << 16)
77
78//TX buffer descriptor flags
79#define AT91C_EMAC_TX_USED 0x80000000
80#define AT91C_EMAC_TX_WRAP 0x40000000
81#define AT91C_EMAC_TX_ERROR 0x20000000
82#define AT91C_EMAC_TX_UNDERRUN 0x10000000
83#define AT91C_EMAC_TX_EXHAUSTED 0x08000000
84#define AT91C_EMAC_TX_NO_CRC 0x00010000
85#define AT91C_EMAC_TX_LAST 0x00008000
86#define AT91C_EMAC_TX_LENGTH 0x000007FF
87
88//RX buffer descriptor flags
89#define AT91C_EMAC_RX_ADDRESS 0xFFFFFFFC
90#define AT91C_EMAC_RX_WRAP 0x00000002
91#define AT91C_EMAC_RX_OWNERSHIP 0x00000001
92#define AT91C_EMAC_RX_BROADCAST 0x80000000
93#define AT91C_EMAC_RX_MULTICAST_HASH 0x40000000
94#define AT91C_EMAC_RX_UNICAST_HASH 0x20000000
95#define AT91C_EMAC_RX_EXT_ADDR 0x10000000
96#define AT91C_EMAC_RX_SAR1 0x04000000
97#define AT91C_EMAC_RX_SAR2 0x02000000
98#define AT91C_EMAC_RX_SAR3 0x01000000
99#define AT91C_EMAC_RX_SAR4 0x00800000
100#define AT91C_EMAC_RX_TYPE_ID 0x00400000
101#define AT91C_EMAC_RX_VLAN_TAG 0x00200000
102#define AT91C_EMAC_RX_PRIORITY_TAG 0x00100000
103#define AT91C_EMAC_RX_VLAN_PRIORITY 0x000E0000
104#define AT91C_EMAC_RX_CFI 0x00010000
105#define AT91C_EMAC_RX_EOF 0x00008000
106#define AT91C_EMAC_RX_SOF 0x00004000
107#define AT91C_EMAC_RX_OFFSET 0x00003000
108#define AT91C_EMAC_RX_LENGTH 0x00000FFF
109
110//C++ guard
111#ifdef __cplusplus
112extern "C" {
113#endif
114
115
120typedef struct
121{
122 uint32_t address;
123 uint32_t status;
125
126
131typedef struct
132{
133 uint32_t address;
134 uint32_t status;
136
137
138//SAM9263 Ethernet MAC driver
139extern const NicDriver sam9263EthDriver;
140
141//SAM9263 Ethernet MAC related functions
142error_t sam9263EthInit(NetInterface *interface);
143void sam9263EthInitGpio(NetInterface *interface);
144void sam9263EthInitBufferDesc(NetInterface *interface);
145
146void sam9263EthTick(NetInterface *interface);
147
148void sam9263EthEnableIrq(NetInterface *interface);
149void sam9263EthDisableIrq(NetInterface *interface);
150void sam9263EthIrqHandler(void);
151void sam9263EthEventHandler(NetInterface *interface);
152
153error_t sam9263EthSendPacket(NetInterface *interface,
154 const NetBuffer *buffer, size_t offset, NetTxAncillary *ancillary);
155
156error_t sam9263EthReceivePacket(NetInterface *interface);
157
158error_t sam9263EthUpdateMacAddrFilter(NetInterface *interface);
159error_t sam9263EthUpdateMacConfig(NetInterface *interface);
160
161void sam9263EthWritePhyReg(uint8_t opcode, uint8_t phyAddr,
162 uint8_t regAddr, uint16_t data);
163
164uint16_t sam9263EthReadPhyReg(uint8_t opcode, uint8_t phyAddr,
165 uint8_t regAddr);
166
167//Wrapper for the interrupt service routine
168void emacIrqWrapper(void);
169
170//C++ guard
171#ifdef __cplusplus
172}
173#endif
174
175#endif
error_t
Error codes.
Definition error.h:43
Structure describing a buffer that spans multiple chunks.
Definition net_mem.h:89
NIC driver.
Definition nic.h:283
Receive buffer descriptor.
Definition sam9263_eth_driver.h:132
Transmit buffer descriptor.
Definition sam9263_eth_driver.h:121