最近用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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我现在程序问题是 在发送函数中 如果 单步调试 可以通过,但是全速运行时候uc_data=Read_Reg(NSR) ; //获得NSR状态 while((uc_data & 0x0c) == 0); // breakpoint1: 出现错误 这个值是0X40,一直等待,请问如何解决啊...
一周热门 更多>