目的 :完成网口收发调试
 
过程 : 
    
1、网口初始化,根据芯片数据手册配置
 
2、网口发数,先向DM9000中的TX FIFO存入数据,然后出发发送寄存器完成发送;
 
3、网口接收 。
 
    1) 中断方式 :DM9000的中断可以通过主动查询DM9000中断寄存器的方式,以及通过DM9000INT引脚来中断DSP系统,在去查询中断类型的方式。
                             
                              使用DM9000 INT方式出发DSP中断的好处有:可以避免cpu不断的查询DM9000中断寄存器;优化收数掉帧的情况
 
    2)MAC地址过滤 :    配合DM9000中RCR(接受控制寄存器)寄存器以及DM9000物理地址和广播地址寄存器共同实现对非匹配MAC地址包的过滤功能
        
                             
        
 
                    
       
 
                            配置说明 :
                            假设配置的本地MAC地址为 28 5b 6d 5c 58 73 。注意mac地址的首位需要为偶数
 
                            将RCR寄存器的值配置为0X33 : 即打开DM9000的混杂模式,此时DM9000能够接受到所有的网络包,包括以
                            广播帧    :  FF FF FF FF FF FF XX XX XX XX XX XX..  
                            其他MAC地址包 : 28 5b 6d 5c 58 74 XX XX XX XX XX XX...
                            多播帧  :33 33 01 00 02 00 XX XX XX XX XX XX...
                            当前匹配mac地址包 :28 5b 6d 5c 58 73 XX XX XX XX XX XX...
 
                           将RCR寄存器的值配置为0X31 : 即关闭DM9000的混杂模式,此时DM9000能够接受到广播包、多播包、匹配本地MAC地址包
                            广播帧    :  FF FF FF FF FF FF XX XX XX XX XX XX..  
                            多播帧  :33 33 01 00 02 00 XX XX XX XX XX XX...
                            当前匹配mac地址包 :28 5b 6d 5c 58 73 XX XX XX XX XX XX...
 
                           将RCR寄存器的值配置为0X39 : 即关闭DM9000的多包模式,貌似无效,还是能够接受到广播包、多播包、匹配本地MAC地址包
 
                           如果需要进一步过滤掉广播包和多播包,需要借助广播寄存地址;从网上资料查询得到,此处的广播寄存器地址就等效于一个校验位,能对通过的MAC地址计算并校验,
                           符合校验值得则通过MAC产生中断,不符合的则被过滤掉(自己未验证过);本次设置该广播寄存地址全部为零;经测试发现,能够将其他的多播包和广播包去除,只接收匹配本地MAC地址的
                            数据
 
        3) DSP移植 : 
                            
                            DM9000接受到的数据是进过MAC组帧过后的值,具体格式如下所示 : 
                            
                            
                            第一个byte为接受包有效标志位 ; status为状态位;数据长度;后面其实还有两位校验位
                            
                            假设上位机PC端发送一组数据长度为1040的数据 格式为 :FF FF FF FF FF FF 28 5b 6d 5c 58 73 保留为(4byte)   数据为(1024byte) 总共长度为  1040 byte
 
                            网口接受到的包格式为 : 
                            
                            01  XX 14 04    FF FF FF FF FF FF 28 5b 6d 5c 58 73 保留为(4byte)   数据为(1024byte) CRC(4byte);
 
                            接受包中的数据长度为0X414 即1044个;多出的4byte就是后面跟随的CRC
 
                            在移植过程中出现了一个关于读数的问题 : 
                            1、程序移植到FLASH后发现接受到的数据出现错误。
                            
                            原因 : DM9000内部设置从RX FIFO中将数据读取出来采用的是指针自动递增的模式;如果在有数据到来没有按照接受包的帧长度(1044)全部将数据读取出来,那么RX SRAM的自动指针是不会自动跳转回到初始位置;导致在进入中断时数据将会读取错误;
 
                            
 
                            上图代码段想从接受到的数据中直接将信号提取出来;
                            rx_state = inw();
 
                            phy_addr[0] = inw(); .....
 
                            由于这些定义的变量只是为了将占据数据包中相应部分去除,使得读取RX FIFO 指针依次移动至有效数据位置上。然后获取有效数据位;
                            由于DSP程序代码打开了最高级别的优化,使得这些未使用的代码段直接被优化掉,使得RX FIFO指针在操作时没有移位到数据位上。
                            通过对变量添加volatile 关键字也不是全部都有效;所以将代码做了如下修改
                            
           
 
    如有错误请指正

最新文章

  1. 【工具使用】mac电脑使用技巧
  2. Visual Studio 2015里面汇编工具Asm Dude的配置!
  3. WCF之常见异常整理(不断更新中...)
  4. UVALive 6264 Conservation --拓扑排序
  5. [转]NSTimer和CADisplayLink的基本用法
  6. Xpert 基础
  7. struts2+hibernate+poi导出Excel实例
  8. 新手不了解Xcode和mac系统可能犯得错误和我的建议
  9. 文件同步工具BT Sync介绍和使用说明
  10. 关于sql server 代理(已禁用代理xp)
  11. IO流+数据库课后习题
  12. 将GridView中的数据导出到Excel代码与注意事项
  13. mysql 5.7.9(GA) 安装
  14. [LeetCode]题解(python):109-Convert Sorted List to Binary Search Tree
  15. 播放器: AVPlayer
  16. 2015 北京网络赛 E Border Length hihoCoder 1231 树状数组 (2015-11-05 09:30)
  17. ubuntu 增加一个用户 并赋予权限
  18. Rxjs之创建操作符(Angular环境)
  19. java注解使用
  20. MySQL Disk--磁盘相关参数

热门文章

  1. 在Eclipse中使用Git提交到远程仓库
  2. Spring操作指南-IoC基础环境配置(基于注解手动装配)
  3. ASP.NET corrupt assembly “Could not load file or assembly App_Web_*
  4. TCP/IP、Http、Socket的区别
  5. 【转】Win8下安装SQL Server 2005无法启动服务
  6. python requests的安装与简单运用
  7. c语言第2次作业
  8. Leetcode: Bomb Enemy
  9. 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分
  10. zjuoj 3773 Paint the Grid