到最后什么中断都进不去了

2019-07-14 14:34发布

我都要疯了!SVPWM 软件法,弄了一周了,下溢中断进不去,我换了文件(vectors.asm)到最后什么中断都进不去了,这是怎么回事?!求帮助。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
17条回答
zhaoxqi
2019-07-16 08:56

DSP2407有两级中断:
第一级是来自外设的中断请求(PIRQ)
第二级是内核级中断请求(INTn)
中断原理为:当CPU接收到一个内核级中断INTn请求时,它并不知道具体是那个外设中断事件引起的,因此为了使CPU响应正确的中断,DSP为每个外设中断分配了一个惟一的中断向量。当PIE接收到CPU控制器发出中断应答信号后,PIE控制器将外设中断的中断向量值放入中断向量寄存器PIVR中,通过判断PIVR中的地址值来确定是那个外设中断响应的。在DSP2407中的define.asm文件中有这样的语句:
;建立中断向量表         
            .sect     ".vectors"           
RSVECT      B     _c_int0 //地址为0000h
INT1      B  PHANTOM       //地址为0002h
INT2      B       _c_int2//地址为0004h
INT3        B       PHANTOM  //地址为0006h
INT4  B  PHANTOM//地址为0008h
INT5        B  PHANTOM//地址为000ah
INT6  B       PHANTOM//地址为000ch
当一个内核级中断发生时 就执行到相应的通用中断服务程序中:
如INT2      B       _c_int2//地址为0004h
就执行_c_int2对应的地址:也就是C语言中的c_int2;
在C语言和汇编语言中差一个下划线,即汇编语言中的_c_int2和C语言中的c_int2是一样的。
我们在MAIN.C中找到:void interrupt c_int2()              
{
   if(PIVR!=0x27)
  {   asm(" CLRC INTM ");
   return;
  }
T1CNT=0;
numled++;
   
EVAIFRA=0x80;
asm(" CLRC INTM ");  

}
也就是说中断发生时执行这段服务程序:
用if(PIVR!=0x27)来判断具体是哪一个外设触发。

一周热门 更多>