中级会员
- 积分
- 315
- 金钱
- 315
- 注册时间
- 2012-8-28
- 在线时间
- 22 小时
|
10金钱
最近上手IEEE1588协议,使用STM32F207芯片,LwIP 协议栈实现了TCP/IP通信,PTP协议使用ST官网的例程(例程是基于STM32F107的)移植到我的板子上来,基本上就是修改时钟,IO配置,DP83640 PHY配置(RMII接口),MAC/DMA几乎一样,另外PTP 系统时间校准使用细调方式(按照公式设置了加数寄存器的值和常量值),设置IP和MAC地址 板子和PC在一个局域网内,使用静态IP设置PC和板子处于同一个网段,交换机支持PTP转发俩接好板子,上电,PC可以ping通板子的IP(延迟均<1ms),PC端安装抓包软件,可以看到
有 Sync Follow_up Announce Delay_Req等消息,说明消息是真的有发送出去,打印处理的PTP状态,由开始的侦听状态,变为未校准状态,并且一直保持在这种状态,STM32也开始陷入无限的中断里面(时间戳中断,这个中断是系统时间>目标时间产生的)
程序卡死在这里! 一进中断给就目标寄存器的值在系统时间的基础上+1s,用仿真器查看目标寄存器ETH_PTPTHR 和 ETH_PTPTLR的值为0x0000000D,0x00000000 并没有更新,如果鼠标点击一下寄存器的值目标寄存器的值会更新,同时也不会在无限中断。
用这种方法使两块板不会卡死在中断里面,网络上仍然有上述同步,对时消息,可是网络上的主时钟并不能同步从时钟的本地时间,设备一直处于为校准状态。
查看F107和F207寄存器有一些差异,通过对比主要是,ETH_PTPTSCR F207有一些增加位,F207多了一些寄存器ETH_PTPTSSR, ETH_PTPPPSCR, ETH_MACDBGR, ETH_DMABMR, ETH_DMARSWTR
瞧了好久没瞧明白,有没有大神在F4或者F2平台上移植这个代码的,帮帮忙!! 急用!
|
|