关于c5402外部中断反应慢的疑问,不解,求教!
本帖最后由 guohuimao 于 2013-9-3 22:16 编辑问了ti工程师,仍未搞明白,特向大牛们求教!
说明:dsp主频为100MHZ,int0中断中翻转标志flag, main()中据flag闪led,示波器测试上部波形为触发脉冲,下部为led变化电平。按理一个clk为10ns,怎么 着也不至于500ns后才变化led引脚电平滴。
此现象引起的最大顾虑是,如果中断响应延时过长,导致isr服务时间很有限,代码量受到限制,无法完成规定的任务(很多路DAC要转换输出波形,而每个DAC写入及转换都另需延时,同时译码电路也有几十ns延时。 为验证int0,我去除了其它任何事务,只是闪led测试,main函数中除闪灯及一句nop外,再无其它语句)。 没太看明白你的意思 你输出控制led的是GPIO吗
GPIO的最大相应时间是多少k呢 好贴需要顶一个~~~~~~~~~~~~ 需要进一步说明一下方法。
我的系统是ARM+DSP+DAC, 触发脉冲由外部生成,固定频率,接入dsp之int0. dsp在此脉冲下,读正弦表数据送DAC 生成正弦波形。附件所述为简化过程,目的是用于测试dsp的中断反应速度。
示波器实测参数在文档中画了一下,是准确的时序图。
之所以没在dsp中断中直接翻转输出引脚(C5402只有一个脚输出,且其状态受中断保护,退出中断时将还原中断前状态,因此,中断中闪灯比较麻烦。当然完全可以做,要判定相关寄存器是可以做的,麻烦没做。况且与本问题关系不是很大)。
再帮忙分析一下,究竟是什么原因导致中断反应为何推迟在500ns左右。 volatile int flag=0;
void Dsp_init()
{
while(CLKMD & 0x01) CLKMD = 0; //wait start up complete
CLKMD = 0x9007; //8M*10 , Crystal on the board is 8MHz.
PMST = 0x00A0;
SWWSR = 0x1240;
SWCR = 0x00; //x1
BSCR = 0xF800;
IFR = 0xFFFF;
IMR = 0x0201; //enable hpint,enable int0
asm(" RSBX INTM "); //(In ST1)INTM=0,enable interrupt global gate
}
void interrupt c_int0(void)
{
if(flag==0) // set a 标志寄存器, let main() blink led
{
flag=1;
}
else
{
flag=0;
}
}
void main()
{
…….// init dsp
while(1)
{
if(flag==0)
{
asm(" SSBX XF "); //on
}
else
{
asm(" RSBX XF "); //off
}
}
}
guohuimao 发表于 2013-9-5 20:36 static/image/common/back.gif
需要进一步说明一下方法。
我的系统是ARM+DSP+DAC, 触发脉冲由外部生成,固定频率,接入dsp之int0. ds ...
这个反应推迟可能与硬件自身有点原因 具体就说不好了 发现在中断中,判定一个数用"=="常常无效,而用'>='就有效.不知CCS是否有问题!
弱弱的问下,示波器把示波器两探头交换 在测下波形可以不:lol
页:
[1]