⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dm9000.c

📁 dm9000的驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -