Chinaunix首页 | 论坛 | 博客
  • 博客访问: 399491
  • 博文数量: 87
  • 博客积分: 1171
  • 博客等级: 少尉
  • 技术积分: 1068
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-19 14:34
文章分类

全部博文(87)

文章存档

2014年(10)

2013年(24)

2012年(53)

我的朋友

分类: 嵌入式

2013-03-14 10:08:19





 弄了几天DM9000了,一直不能正确接收数据,郁闷了几天,现在终于行了,高兴一下。


参考了这篇文章《单片机驱动DM9000网卡芯片(详细调试过程)》,文章很好写的很详细,对DM9000驱动感兴趣可以看看原文


http://hi.baidu.com/mikenoodle/blog/item/dda3a4cc034e871800e9287a.html


http://hi.baidu.com/mikenoodle/blog/item/a271def982bc6a51242df279.html


 


总结一下。


问题一 没有开MMU,中断不能开启(我的程序在内存中运行)


问题二:不能读DM9000的寄存器,


原因1,读基地址不对,在micro2440中应该是


#define DM_ADD (*((volatile unsigned short *) 0x20000300))


#define DM_CMD (*((volatile unsigned short *) 0x20000304))


原因2 ,MMU没有设置好


MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_NCNB);


bank4读写类型应该是RW_NCNB


问题三,不能正确接收数据


原因:误读了一个寄存器DM9000_MRCMD,读数据地址自动增加,误读了一次导致,地址偏移,总得不到数据。


稍后上次整个工程的代码,现在比较乱,整理一下在上传。


mirco2440  DM90000驱动


 



    以上是转载的东西。
   在此之前已经做过uip移植,而且DM9000收发数据都没有问题,现在帮朋友移植Lwip的时候,发现ucos+Dm9000跑不起,弄了一天,不得其解,后面搜索到这边博客,一条条对应,感觉也没找出问题。后面把ucos去掉,一步步查找,发现原来是调用了打印Dm9000寄存器的函数,导致读地址寄存器增加了1,以至于以后总是得不到数据。对应了上述的第三种情况,大喜,可以继续下去了。
   在搞DM9000的,不要以为没事就可以访问下寄存器,当然这也是后面才知道的,不然谁也不会去读了整个datasheet才知道,所以说经验很重要,很重要。


 


 

阅读(3804) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~