免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1420 | 回复: 0
打印 上一主题 下一主题

LPC1700 Coocox Lwip 调试心得 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-20 09:44 |只看该作者 |倒序浏览

LPC1700 Coocox Lwip 调试心得

Hyfeng(hyfeng18@126.com)

今天刚刚将Coocox网站上的一个基于NXP LPC1766web服务器的例程移植到了周立功公司出的SmartCortex M3-1700的开发板上面,在例程中使用的开发板是一款叫MCB1700的开发板,虽然这两块开发板使用的MCU都是NXP LPC1766,但是它们两者使用的网络收发器是不一样的,在MCB1700中使用的是DP83848C,而周立功公司生产的SmartCortex M3使用的是KSZ8041L。由于这是两款不同的网络收发器,因此必须修改例程中关于DP83848C那部分的硬件的相关代码,其实就是关于芯片的初始化函数以及相关的寄存器读写函数。具体的修改步骤如下:

1.       芯片的初始函数

由于芯片不同因此初始化函数以及寄存器的操作也会有一些不同,对于这里的初始化函数需要修改的并不是很多,主要就是添加一段确定PHY地址的代码。根据MII Mgmt地址寄存器可知MII最多只能管理31个收发控制器并且可以访问32个控制器中的寄存器,由于可以管理的数目比较少就可以通过遍历的方法去确定收发器的PHY地址。通过轮询1-3131个地址,而且对于KSZ8041L地址为02H的寄存器读出来的值是一个产品ID由于这个ID是固定并且可以根据数据手册获得,因此可以利用这个ID来判读收发器PHY地址,代码如下:

for(i=1;i<32;i++)

         {

             PHYID = 0;

             PHYID = readPHY(i, 2);

                   PHYID = PHYID&0x00FF;

             if(PHYID == 0x0022)         {

                            break;

                   }

     }

    if(i >= 32)

             while(1);

    PHYID = i;

这里PHYID实际上就是PHY地址,这样就MII接口就可以通过这个地址去访问收发器中的寄存器地址来控制收发器,例如:收发器复位、设置速度等等

2.       读取寄存器值的函数

控制通过MII接口去管理收发器的,如果确定好上面的PHY地址,那么读取收发器的值就不会很简单了,代码如下:

unsigned short readPHY(unsigned char phyadd, unsigned char PhyReg)

{

         unsigned int tout;

 

         EMAC->MADR = (phyadd<<8) | PhyReg;

         EMAC->MCMD = MCMD_READ;

 

         tout = 0;

       for (tout = 0; tout < MII_RD_TOUT; tout++) {

             if ((EMAC->MIND & MIND_BUSY) == 0) {

           break;

       }

   }

  EMAC->MCMD = 0;

  return (EMAC->MRDD);

}

3.       设置寄存器值的函数

设置寄存器的值的函数代码如下:

void writePHY(unsigned char phyadd, int PhyReg, int Value)

{

unsigned int tout;

 

EMAC->MADR = (phyadd<<8) | PhyReg;

EMAC->MWTD = Value;

 

tout = 0;

for(; tout < MII_WR_TOUT; tout++){

           if((EMAC->MIND & MIND_BUSY) == 0){

                    break;

           }

}

}

最后要想使用这个例程必须将初始化函数中那些使用write_PHYread_PHY的函数修改成使用上面添加的读写函数即可。经过上面的修改就可以在周立功的SmartCortexM3上面使用CoocoxLwip例程。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP