APAX-5017PG 项目开发全程记录 - 调试篇

APAX-5570的utility(自写)已可以向APAX-5017PG下发配置命令

 
    example_apax5570,使用vs c# 2005写的utility,目前在APAX-5570上运作良好,可以向APAX-5017PG下发set channel mask以及set channel range这两条命令,虽然两条命令都被5017PG成功接受,并完成配置任务,但是utility调用的set channel mask API会时常返回错误,原因还需和台北咨询

 
关于在离线模式无法正确通信的问题

 
    在测试过程中发现,在DEBUG模式中5017PG的IP地址是20.0.1.11,而离线模式时5017PG的IP地址是20.0.1.1,IP地址的最后一个数字是根据5017PG的switchID来决定的,如果switchID是10,那么IP地址就是20.0.1.11(即switchID加1)。

 
    经验证发现,switchID在离线模式中首次读入时总是0,因此导致5017PG的IP地址总是20.0.1.1,导致无法与5570建立通信。

 
    我们采用点亮LED的测试手段来验证switchID是否读取正确,在代码中插入test_led()这个函数,它是一个死循环,不断的读取switchID,如果读到的数值与5017PG设定的switch id一直,则点亮LED(闪烁),否则继续下一次读取。

 
    离线模式(非Debug模式)下,LED一直无法点亮,调试过程是这样的,将test_led这一句CODE放到读SWID处(LINE 1230),不亮,再采样/通信循环处(LINE 1563),可以点亮,说明问题在LINE 1230~1563之间。

 
    随即,将test_led不断从1563行向前一点点移动,每移动几行就编译并下载,直到定位到某一行,即导致LED无法点亮的位置,经过测试,发现test_led放在FreqSet()这个函数后面就可以点亮LED,放在其之前就无法点亮LED,因此断定,FreqSet()这个函数导致了LED无法点亮。

 
    同理,采样相同的办法,继续在FreqSet()内部进行定位,确定是其内部哪一行CODE的问题,经定位发现,对LOCAL BUS进行写操作后,LED就可以点亮了,比如在FreqSet()内部有一个函数调用是FuncDat(),FuncDat()中有一句*pCPLD_CLR_INT = 0xff,这句CODE的实质是对LOCAL BUS进行写操作,通知CPLD清FIFO中断。同样,其它对LOCAL BUS进行写操作的CODE也是问题所在,即在对LOCAL BUS进行了正确的写操作后(注意,是正确的写操作),LED就可以被点亮了。

 
    具体的硬件原因是由于switch id的控制电路中,那些和ID相关的电阻阻值过高,导致无法有效驱动LOCAL BUS读回switch id的数值,周工将电阻阻值降低了一些,目前switch id可以正确读回了,整个通信也已经成功建立,可以通过ethereal工具抓到报文(需要等上一会)。

 

 
关于FIFO中的数据存在通道号串位的问题  

    。。。。。。FifoVerify();

    目前FIFO已经可以拿到正确A/D采样数据,通道号在最高字节,低两字节是A/D采样数据,没有通道号串位现象。

 
    之前的通道号串位问题,是因为误开启了trigger,Aduc7027并没有使用trigger功能,将trigger功能至为OFF,同时取消采样个数的设定,直接AQUISITION_START,采600个数(12通道的整数倍),然后AQUISITION_STOP,将采样数据print输出,数据正常,通道号OK!

 

本文出自 “千里之行,始于足下” 博客,转载请与作者联系!

你可能感兴趣的:(项目开发,职场,调试,休闲,APAX)