📄 dm9000.c
字号:
#include <string.h>
#include <stdlib.h>
#ifndef _ETH_COMMON_H
#include "eth_header/Eth_common.h"
#endif
#ifndef _MPC555_GLOBAL_H
#include "mpc555_global.h"
#endif
UINT16 ETH_ptype;
UINT16 ETH_len;
UINT8 ETH_Rbuf[1518];
UINT8 ETH_Tbuf[1518];
UINT8 ARP_Tbuf[42];
UINT8 my_hwaddr[6];
UINT16 eth_ms;
UINT16 eth_len;
UINT16 total_len;
UINT8 const broadcast_hwaddr[] =
{
0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};
UINT8 Move_Fault_Flag;
extern ULONG const my_ipaddr;
extern CONNECTION conxn[];
extern UCHAR IP_protocol;
extern UINT IP_len;
extern NU_HISR ETH_HISR;
extern UINT32 dm9k_pointer;
UINT16 DM9000_Initializtion();
UINT8 ior(UINT16 reg);
void iow(UINT16 reg, UINT8 value);
static UINT16 phy_read(UINT16 reg);
static void phy_write(UINT16 reg, UINT16 value);
UINT8 rcve_frame(UINT16 RxEvent);
UINT8 send_frame(UCHAR *outbuf, UINT16 len);
UINT user_server_1(UCHAR *inbuf, UINT header_len, UCHAR nr, UCHAR resend);
asm void move_eth_head(UINT16 *pointer_a)
{
% reg pointer_a;
!"r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
addis r3, 0, 0x803
li r4, 0
lhbrx r5, r4, pointer_a
sth r5, 4(r3)
li r6, 2
lhbrx r5, r7, pointer_a
sth r5, 4(r3)
li r8, 4
lhbrx r5, r9, pointer_a
sth r5, 4(r3)
li r10, 6
lhbrx r5, r11, pointer_a
sth r5, 4(r3)
li r4, 8
lhbrx r5, r4, pointer_a
sth r5, 4(r3)
li r6, 10
lhbrx r5, r7, pointer_a
sth r5, 4(r3)
li r8, 12
lhbrx r5, r9, pointer_a
sth r5, 4(r3)
li r10, 14
lhbrx r5, r11, pointer_a
sth r5, 4(r3)
li r4, 16
lhbrx r5, r4, pointer_a
sth r5, 4(r3)
li r6, 18
lhbrx r5, r7, pointer_a
sth r5, 4(r3)
li r8, 20
lhbrx r5, r9, pointer_a
sth r5, 4(r3)
li r10, 22
lhbrx r5, r11, pointer_a
sth r5, 4(r3)
li r4, 24
lhbrx r5, r4, pointer_a
sth r5, 4(r3)
li r6, 26
lhbrx r5, r7, pointer_a
sth r5, 4(r3)
li r8, 28
lhbrx r5, r9, pointer_a
sth r5, 4(r3)
li r10, 30
lhbrx r5, r11, pointer_a
sth r5, 4(r3)
li r4, 32
lhbrx r5, r4, pointer_a
sth r5, 4(r3)
li r6, 34
lhbrx r5, r7, pointer_a
sth r5, 4(r3)
li r8, 36
lhbrx r5, r9, pointer_a
sth r5, 4(r3)
li r10, 38
lhbrx r5, r11, pointer_a
sth r5, 4(r3)
li r4, 40
lhbrx r5, r4, pointer_a
sth r5, 4(r3)
li r6, 42
lhbrx r5, r7, pointer_a
sth r5, 4(r3)
}
asm void move_eth_data(UINT16 *pointer_a)
{
% reg pointer_a;
!"r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
addis r4, 0, 0x804
lhz r5, 0(pointer_a)
sth r5, 4(r4)
lhz r7, 4(pointer_a)
sth r7, 4(r4)
lhz r9, 8(pointer_a)
sth r9, 4(r4)
lhz r11, 12(pointer_a)
sth r11, 4(r4)
lhz r12, 16(pointer_a)
sth r12, 4(r4)
lhz r5, 20(pointer_a)
sth r5, 4(r4)
lhz r7, 24(pointer_a)
sth r7, 4(r4)
lhz r9, 28(pointer_a)
sth r9, 4(r4)
lhz r11, 32(pointer_a)
sth r11, 4(r4)
lhz r12, 36(pointer_a)
sth r12, 4(r4)
lhz r5, 40(pointer_a)
sth r5, 4(r4)
lhz r7, 44(pointer_a)
sth r7, 4(r4)
lhz r9, 48(pointer_a)
sth r9, 4(r4)
lhz r11, 52(pointer_a)
sth r11, 4(r4)
lhz r12, 56(pointer_a)
sth r12, 4(r4)
lhz r5, 60(pointer_a)
sth r5, 4(r4)
lhz r7, 64(pointer_a)
sth r7, 4(r4)
lhz r9, 68(pointer_a)
sth r9, 4(r4)
lhz r11, 72(pointer_a)
sth r11, 4(r4)
lhz r12, 76(pointer_a)
sth r12, 4(r4)
lhz r5, 80(pointer_a)
sth r5, 4(r4)
lhz r7, 84(pointer_a)
sth r7, 4(r4)
lhz r9, 88(pointer_a)
sth r9, 4(r4)
lhz r11, 92(pointer_a)
sth r11, 4(r4)
lhz r12, 96(pointer_a)
sth r12, 4(r4)
lhz r5, 100(pointer_a)
sth r5, 4(r4)
lhz r7, 104(pointer_a)
sth r7, 4(r4)
lhz r9, 108(pointer_a)
sth r9, 4(r4)
lhz r11, 112(pointer_a)
sth r11, 4(r4)
lhz r12, 116(pointer_a)
sth r12, 4(r4)
lhz r5, 120(pointer_a)
sth r5, 4(r4)
lhz r7, 124(pointer_a)
sth r7, 4(r4)
lhz r9, 128(pointer_a)
sth r9, 4(r4)
lhz r11, 132(pointer_a)
sth r11, 4(r4)
lhz r12, 136(pointer_a)
sth r12, 4(r4)
lhz r5, 140(pointer_a)
sth r5, 4(r4)
lhz r7, 144(pointer_a)
sth r7, 4(r4)
lhz r9, 148(pointer_a)
sth r9, 4(r4)
lhz r11, 152(pointer_a)
sth r11, 4(r4)
lhz r12, 156(pointer_a)
sth r12, 4(r4)
lhz r5, 160(pointer_a)
sth r5, 4(r4)
lhz r7, 164(pointer_a)
sth r7, 4(r4)
lhz r9, 168(pointer_a)
sth r9, 4(r4)
lhz r11, 172(pointer_a)
sth r11, 4(r4)
lhz r12, 176(pointer_a)
sth r12, 4(r4)
lhz r5, 180(pointer_a)
sth r5, 4(r4)
lhz r7, 184(pointer_a)
sth r7, 4(r4)
lhz r9, 188(pointer_a)
sth r9, 4(r4)
lhz r11, 192(pointer_a)
sth r11, 4(r4)
lhz r12, 196(pointer_a)
sth r12, 4(r4)
lhz r5, 200(pointer_a)
sth r5, 4(r4)
lhz r7, 204(pointer_a)
sth r7, 4(r4)
lhz r9, 208(pointer_a)
sth r9, 4(r4)
lhz r11, 212(pointer_a)
sth r11, 4(r4)
lhz r12, 216(pointer_a)
sth r12, 4(r4)
lhz r5, 220(pointer_a)
sth r5, 4(r4)
lhz r7, 224(pointer_a)
sth r7, 4(r4)
lhz r9, 228(pointer_a)
sth r9, 4(r4)
lhz r11, 232(pointer_a)
sth r11, 4(r4)
lhz r12, 238(pointer_a)
sth r12, 4(r4)
lhz r5, 240(pointer_a)
sth r5, 4(r4)
lhz r7, 244(pointer_a)
sth r7, 4(r4)
lhz r9, 248(pointer_a)
sth r9, 4(r4)
lhz r11, 252(pointer_a)
sth r11, 4(r4)
lhz r12, 256(pointer_a)
sth r12, 4(r4)
lhz r5, 260(pointer_a)
sth r5, 4(r4)
lhz r7, 264(pointer_a)
sth r7, 4(r4)
lhz r9, 268(pointer_a)
sth r9, 4(r4)
lhz r11, 272(pointer_a)
sth r11, 4(r4)
lhz r12, 276(pointer_a)
sth r12, 4(r4)
lhz r5, 280(pointer_a)
sth r5, 4(r4)
lhz r7, 284(pointer_a)
sth r7, 4(r4)
lhz r9, 288(pointer_a)
sth r9, 4(r4)
lhz r11, 292(pointer_a)
sth r11, 4(r4)
lhz r12, 296(pointer_a)
sth r12, 4(r4)
lhz r5, 300(pointer_a)
sth r5, 4(r4)
lhz r7, 304(pointer_a)
sth r7, 4(r4)
lhz r9, 308(pointer_a)
sth r9, 4(r4)
lhz r11, 312(pointer_a)
sth r11, 4(r4)
lhz r12, 316(pointer_a)
sth r12, 4(r4)
lhz r5, 320(pointer_a)
sth r5, 4(r4)
lhz r7, 324(pointer_a)
sth r7, 4(r4)
lhz r9, 328(pointer_a)
sth r9, 4(r4)
lhz r11, 332(pointer_a)
sth r11, 4(r4)
lhz r12, 336(pointer_a)
sth r12, 4(r4)
lhz r5, 340(pointer_a)
sth r5, 4(r4)
lhz r7, 344(pointer_a)
sth r7, 4(r4)
lhz r9, 348(pointer_a)
sth r9, 4(r4)
lhz r11, 352(pointer_a)
sth r11, 4(r4)
lhz r12, 356(pointer_a)
sth r12, 4(r4)
lhz r5, 360(pointer_a)
sth r5, 4(r4)
lhz r7, 364(pointer_a)
sth r7, 4(r4)
lhz r9, 368(pointer_a)
sth r9, 4(r4)
lhz r11, 372(pointer_a)
sth r11, 4(r4)
lhz r12, 376(pointer_a)
sth r12, 4(r4)
lhz r5, 380(pointer_a)
sth r5, 4(r4)
}
/* Read a byte from register */
UINT8 ior(UINT16 reg)
{
DM9000_INDEX = reg;
return (UINT8)DM9000_DATA;
}
/* Write a byte to register */
void iow(UINT16 reg, UINT8 value)
{
DM9000_INDEX = reg;
DM9000_DATA = value;
}
/* Read a word from phyxcer */
static UINT16 phy_read(UINT16 reg)
{
/* Fill the phyxcer register into REG_0C */
iow(0xc, DM9KS_PHY | reg);
iow(0xb, 0xc); /* Issue phyxcer read command */
delay(100); /* Wait read complete */
iow(0xb, 0x0); /* Clear phyxcer read command */
/* The read data keeps on REG_0D & REG_0E */
return (ior(0xe) << 8) | ior(0xd);
}
/* Write a word to phyxcer */
static void phy_write(UINT16 reg, UINT16 value)
{
/* Fill the phyxcer register into REG_0C */
iow(0xc, DM9KS_PHY | reg);
/* Fill the written data into REG_0D & REG_0E */
iow(0xd, (value &0xff));
iow(0xe, ((value >> 8) &0xff));
iow(0xb, 0xa); /* Issue phyxcer write command */
delay(500); /* Wait write complete */
iow(0xb, 0x0); /* Clear phyxcer write command */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -