搜索
bottom↓
回复: 5

请教DM9000A读写寄存器问题

[复制链接]

出0入0汤圆

发表于 2013-8-30 09:12:58 | 显示全部楼层 |阅读模式

最近用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;

}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2013-8-30 10:51:47 | 显示全部楼层
。。。。怎么还没人。。。

出0入0汤圆

发表于 2013-9-1 07:41:09 | 显示全部楼层
不经常进论坛 给你个群吧 这群不错 Cortex M0-M3-M4+Lwip名称    群   号:8753696

出0入0汤圆

 楼主| 发表于 2013-9-11 11:47:24 | 显示全部楼层
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,一直等待,请问如何解决啊...

出0入0汤圆

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

出0入0汤圆

发表于 2013-11-14 11:53:30 | 显示全部楼层
严重建议:
MICREL KSZ8851SNL 性能、价格比台系芯片强很多,特别插拔不能link的bug不存在。另外SPI接口,硬件线路及软件驱动都容易。

WIZNET W5500 ,硬件集成TCP/IP协议栈。不要哪么费心费力去调试uIP lwIP之类的东东,硬件SPI接口,线路简单。

还有SMSC的相关芯片,性能超强。

哪些用台系芯片的,要好好考虑一下芯片BUG,及原厂及代理商是否能出质量承诺书,及硬件软件的复杂程度。有更好的,为什么选它 ?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 16:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表