本帖最后由 colddown 于 2010-7-27 13:41 编辑
本人使用的MAX系列的EPM3128A型CPLD,和TI的TMS320VC33浮点型DSP。CPLD的主要作用是根据DSP地址线的低三位对不同外部设备(磁罗盘和A/D芯片)产生片选等控制信号,磁罗盘的地址是010(完整地址0xC00002),A/D芯片的地址是1xx。
磁罗盘的写信号PNIWE由如下verilog语句描述:(RW是读写信号,高为读;AL是地址线的低三位;PAGE3是页选择信号,进行读写操作时都会变低)
assign PNIWE = ~(~RW & (AL==3'b010) & ~PAGE3);
A/D芯片的片选AD_CS和读信号AD_RD是:(AD_RD 和AD_CS 都是OD门,外接10K上拉电阻)
assign AD_OE = ~(RW & (AL[2]==1'b1) & ~PAGE3);
assign AD_RD = AD_OE ? 1'bz : 1'b0;
assign AD_CS = AD_OE ? 1'bz : 1'b0;
AD采集在定时器中断程序中进行,频率是10KHz。磁罗盘的采集函数在main函数中调用,函数内容如下:
void PNI11096_Start()
{
ENTER_CRITICAL_SECTION() //关中断
g_PNI11096_Int = 0;
*pPNI11096 = 0x71; //写磁罗盘 pPNI11096 = 0xC00006
EXIT_CRITICAL_SECTION() //开中断
}
当DSP执行 *pPNI11096 = 0x71; 这一句时,PNIWE会产生低脉冲,启动磁罗盘。
现在的问题是如果允许10KHz的A/D采集,那么有时候写磁罗盘就会失败,即PNIWE不会变低(单步运行也是)。如果关闭A/D采集,写磁罗盘就没有出现过失败。请各位高手帮忙分析一下,按理说在写磁罗盘的时候关中断了,A/D采集不应该有影响啊。
} |