请教DM9000A读写寄存器问题

2020-01-26 12:44发布


最近用C8051F340外接12M晶振,之后倍频到48MHZ做一个以太网传输的项目,现在遇到点问题,DM9000A的读写函数不正确,测试用例是:写完一个地址,之后把这个地址里的值读出来,但是每次都读不出来....DM9000A的CMD接P3^4,数据和地址接P4口
//-------------------------------------------------
//函数名:void IOW(unsigned char uc_data,unsigned char flag)
//输入:  uc_data:地址或数据;flag=1写数据,=0写寄存器
//输出:   NULL
//返回值:  NULL
//作者:
//修改:
//备注:   写寄存器  
//-------------------------------------------------
void IOW(unsigned char uc_data,unsigned char flag)
{
        
        P4 = uc_data;
        DCMD = flag;
        DCS = 0;
        DRE =1;
        DWD =0;
        Delay(10);
        DWD=1;
        DCS =1;
        
}

//-------------------------------------------------
//函数名:unsigned char IOR(unsigned char uc_add)
//输入:  uc_add:地址
//输出:   NULL
//返回值:  uc_add地址的数据
//作者:
//修改:
//备注:   读寄存器
//-------------------------------------------------
unsigned char IOR(unsigned char flag)
{
        unsigned char uc_data;
        P4=0Xff;
        DCS =1;
        DWD=1;
        Delay(10);
        DCS =0;
        DCMD = flag;                //数据操作
        DWD=1;
        DRE =0;                        //读数据
        uc_data=P4;
        Delay(10);
        DRE=1;
        DCS=1;
        
        return uc_data;
}
//----------------------------------------------
//函数名:void Write_Reg(unsigned char uc_reg,unsigned char uc_data)
//输入: reg:寄存器,uc_data:要写入寄存器的值
//输出: NULL
//返回值:         NULL
//作者:
//修改:
//备注:  写函数
//----------------------------------------------
void Write_Reg(unsigned char uc_reg,unsigned char uc_data)
{

   IOW(uc_reg,0) ;          //写地址
   Delay_us(10);
   IOW(uc_data,1);    //写数据

}

//----------------------------------------------
//函数名:unsigned char Read_Reg(unsigned char uc_reg)
//输入:  uc_reg: 读内容的指针
//输出:   NULL
//返回值:        reg指针的内容
//作者:
//修改:
//备注:   读函数操作
//----------------------------------------------
unsigned char Read_Reg(unsigned char uc_reg)
{
        unsigned char uc_data=0;

        IOW(uc_reg,0);
        Delay(10);
        uc_data=IOR(1)        ;
        return uc_data;

}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
dy22511825
2020-01-27 03:39
twd3621576 发表于 2013-9-1 07:41
不经常进论坛 给你个群吧 这群不错 Cortex M0-M3-M4+Lwip名称    群   号:8753696

我现在程序问题是 在发送函数中 如果 单步调试 可以通过,但是全速运行时候uc_data=Read_Reg(NSR) ;        //获得NSR状态 while((uc_data & 0x0c) == 0);         // breakpoint1: 出现错误 这个值是0X40,一直等待,请问如何解决啊...

一周热门 更多>