目录
1、SRAM测试
1.1 SRAM读写功能测试
1.2 EDAC测试
2、ADC测试
3、DSP喂狗测试
调试的前期准备可以参考前面的博文:DSP篇--C6701功能调试系列之前期准备_nanke_yh的博客-CSDN博客https://blog.csdn.net/nanke_yh/article/details/128277631
1、SRAM测试
1.1 SRAM读写功能测试
目的:测试SRAM的读写功能。
方法:向SRAM的地址区域(0x0200,0000~0x0201,FFFF)不停的写入数值,再从头到尾读取写入的数,测试其是否存在读写错误。读写数值有:0x0,0x5555,5555,0xffff,ffff,0xaaaa,aaaa。
代码示例:
Uint32* dwdCurAddr_ptr = (Uint32* )dwdStartAddr;
/*SRAM 写0 */
for (i=0; i<dwdDataLen_dwd; i++)
{
(*dwdCurAddr_ptr) = 0;
dwdCurAddr_ptr++;
}
/*读SRAM 0*/
dwdCurAddr_ptr = (Uint32* )dwdStartAddr;
for (i=0; i<dwdDataLen_dwd; i++)
{
if(0 !=(*dwdCurAddr_ptr))
error++;
dwdCurAddr_ptr++;
}//通过返回error值来判断读写过程中是否出错
注意:读写过程中,指针地址需重新赋值。
1.2 EDAC测试
目的:测试SRAM的自检功能,当写入的数被记录后,再次读时,如果不相等则会出错。
方法:不停的读取SRAM的地址区域内的数值,通过示波器观察是否出现高频信号(错误信号)。
注意:写入的数不能覆盖全片SRAM时,从头到尾的读取则会出现错误信号。因为上电启动搬运数据,未写部分就会出现错误。
代码示例:
while(1)//不停读SRAM值(实际写入长度0x40,全长0x1fffff)
{
dwdCurAddr_ptr = (Uint32* )0x02000000;
for (i=0; i< 0x1fffff; i++)// 出错而for (i=0; i< 0x40; i++)//不出错
{
error = (*dwdCurAddr_ptr);
dwdCurAddr_ptr++;
}
}
2、ADC测试
目的:采集5路电压值。
方法:向0x03030004位置写数值,再从0x03030008读取写入的数。读写数值有:0x05,0x06,0x07,0x08,0x09。
注意:读写的间隔需要较长的时间延迟,否则会导致。
代码示例:
ADvalue = ADtest(0x05);
Candelay(5000);
dwSrcAddr_ptr = (Uint32* )ADRtest;
ADvalue = (*dwSrcAddr_ptr)&0xFFFFFFFF;
ADValueC = ADValueChange(ADvalue);//转换值
Uint32 ADtest(Uint32 value1)//调用函数
{
Uint32 value=0;
Uint32* dwSrcAddr_ptr;
write_8data(ADWtest,value1);
Candelay(10000);
dwSrcAddr_ptr = (Uint32* )ADRtest;
value = (*dwSrcAddr_ptr)&0xFFFFFFFF;
return value;
}
//通过代码转换直接在软件中判读,减少人工手动计算,提高效率
double ADValueChange(Uint32 ADvalue)
{
Uint32 temp[14];
Uint32 i = 0,value = 0;
double Cvalue = 0.0;
value = ADvalue & 0x3FFF;//取低14位
//value值14位位置颠倒
for(i = 0;i < 14;i++)
{
Uint32 j = 14-1-i;
temp[j]=(value >> j) & 0x00000001;
}
for(i = 0;i < 14;i++)
{
Uint32 j = 14-1-i;
Cvalue += temp[i] << j;
}
Cvalue = Cvalue*5/16383;//输入电压就是5V,十四位(0x3FFF)的值16383
return Cvalue;
}
3、DSP喂狗测试
目的:测试FPGA的复位功能,若不停的写入值,则不复位,若在一段时间内(t)没有收到该值,则会复位,程序会跑飞。
方法:向0x0303,000C位置不停的写入0x03d39000。
注意:①t值应当考虑上电到测试程序运行的时间差,太小则上电就在复位无法达到测试效果,测试中t设置为20s。
②每次喂狗的时间间隔根据硬件师要求设置(100ms)。
代码示例:
dwdDestAddr_ptr = (Uint32*) 0x0303000C;
(*dwdDestAddr_ptr) = 0x03d39000 & 0xffffffff;
Candelay(2778);//100ms延迟约为2778