|
【从零开始做示波器第一步之搞定DSP——初代示波器诞生!】
[复制链接]
今天一直弄到晚上九点,差点累趴下,还没吃饭,晕~
不过还是挺值得的,初代示波器已诞生,现在还没功能,也没加按键调整的功能。不过带宽还可以。
采样率:12.5MS/s 用的DSP内部的AD
下图是频率为1.25MHz的方波,来自示波器,采用的是后触发方式。
由于只是作为学习DSP练手之作,没有信号调理电路,也没有其他别的功能。至此,DSP学习告一段落。
接下来进入第二步:DSP+FPGA核心板的制作,敬请期待。。
下面是部分调试版程序,还没时间整理,大家将就看吧。
DELAY_US(30000);
for(i=0;i<128;i++)
{
display.all=0;
}
for(i=0;i<256;i++)
{
buffer=DMABuf1;
}
for(temp3=0;temp3<256;temp3++)
{
if((buffer[temp3+1]-buffer[temp3])>400&&buffer[temp3+1]>buffer[temp3])
break;
}
#ifdef TRIG
if(temp3<128)
{
for(i=0;i<128;i++)
{
j=buffer[i+temp3]>>6;
if(j>32)
display.all=0xFFFFFFFFFFFFFFFF>>(63-j);
else
display.all=~(0xFFFFFFFFFFFFFFFF<<(1+j));
}
}
#else
for(i=0;i<128;i++)
{
j=buffer>>6;
if(j>32)
display.all=0xFFFFFFFFFFFFFFFF>>(63-j);
else
display.all=~(0xFFFFFFFFFFFFFFFF<<(1+j));
}
#endif
for(i=0;i<64;i++)
{
if(i==0)
{
temp1.all=display[0].all ^ (display[0].all>>1);
if(display[1].all != display[0].all)
temp2.all=display[1].all ^ display[0].all;
else
temp2.all=display[1].all ^ (display[0].all>>1);
}
else
{
if(display[2*i].all != display[2*i-1].all )
temp1.all=display[2*i].all ^ display[2*i-1].all;
else
temp1.all=display[2*i].all ^ (display[2*i-1].all>>1);
if(display[2*i+1].all != display[2*i].all )
temp2.all=display[2*i+1].all ^ display[2*i].all;
else
temp2.all=display[2*i+1].all ^ (display[2*i].all>>1);
}
temp3=temp1.bit.Page0;
temp3<<=8;
display_r[0]=temp3 | temp2.bit.Page0;
temp3=temp1.bit.Page1;
temp3<<=8;
display_r[1]=temp3 | temp2.bit.Page1;
temp3=temp1.bit.Page2;
temp3<<=8;
display_r[2]=temp3 | temp2.bit.Page2;
temp3=temp1.bit.Page3;
temp3<<=8;
display_r[3]=temp3 | temp2.bit.Page3;
temp3=temp1.bit.Page4;
temp3<<=8;
display_r[4]=temp3 | temp2.bit.Page4;
temp3=temp1.bit.Page5;
temp3<<=8;
display_r[5]=temp3 | temp2.bit.Page5;
temp3=temp1.bit.Page6;
temp3<<=8;
display_r[6]=temp3 | temp2.bit.Page6;
temp3=temp1.bit.Page7;
temp3<<=8;
display_r[7]=temp3 | temp2.bit.Page7;
}
|
|