这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » DSP28335 使用外中断 程序单步运行可以 全速运行就进不了外中断或者跑

共25条 1/3 1 2 3 跳转至

DSP28335 使用外中断 程序单步运行可以 全速运行就进不了外中断或者跑飞是什么原因

菜鸟
2013-08-16 09:37:26     打赏

DSP28335  使用外中断  程序单步运行可以 全速运行就进不了外中断或者跑飞是什么原因

  有哪位用过的分享一下使用经验  非常感谢





关键词: DSP28335 外中断 跑飞 单步运行    

菜鸟
2013-08-16 09:55:00     打赏
2楼

DSP28335  使用外中断  程序单步运行可以 全速运行就进不了外中断或者跑飞是什么原因

  有哪位用过的分享一下使用经验  非常感谢


高工
2013-08-16 12:20:45     打赏
3楼

“外中断”是指外部中断吗?单步运行能进中断?

最好把中断相关的配置发上来,才好判断


高工
2013-08-16 12:22:34     打赏
4楼
还有,跑飞是不是指进到illegal中断了?还是什么别的意思

菜鸟
2013-08-17 20:13:21     打赏
5楼
对  跑飞就是进入到 

interrupt void SEQ2INT_ISR(void)  //SEQ2 ADC

{

 

  // Insert ISR Code here

 

  // To receive more interrupts from this PIE group, acknowledge this interrupt

  // PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

 

  // Next two lines for debug only to halt the processor here

  // Remove after inserting ISR Code

 

  asm("     ESTOP0");

  for(;;);

}中了 

我的外中断程序的设置都是没有问题的,我的程序比较长,所以我单把我的外部中断程序拿出来测试了一下  发现没有问题,但是在我的整个大的程序中,每次点击 run  想要全速运行的时候 ,就只进入一次外部中断 ,其余时间不进入外中断。

有没有给点建议 这是什么原因造成的,还有就是我的程序先运行一个小的定时器程序后,在关闭这个定时器程序,那么再运行我的这个大的程序就能全速运行了,这是什么原因呢?   有人说是电源芯片的问题,但我觉得硬件都很正常啊  希望给点建议,多谢了。



菜鸟
2013-08-17 20:21:14     打赏
6楼

void main(void)

{


   InitSysCtrl();

   InitCpuTimers(); 


/*****************************/

/*第二步:I/O设置            */

/*****************************/


   InitGpio(); 

 

   InitXintf();

// 全配置为通用I/O


   DINT;


   InitPieCtrl();

// Disable CPU interrupts and clear all CPU interrupt flags:

   IER = 0x0000;

   IFR = 0x0000;

   InitPieVectTable();

   EALLOW;

   PieVectTable.XINT1 = &ISRExint3;

   EDIS;   

   PieCtrlRegs.PIEIER1.bit.INTx4= 1;

  

   IER |= M_INT1;

   EINT;   // Enable Global interrupt INTM

   ERTM;   // Enable Global realtime interrupt DBGM

 

   InitScibGpio();

  // scib_init();

/*****************************/

/*第六步:用户程序           */

/*****************************/

// 省略了中间的变量的声明部分

/*****************************/

/*主循环函数开始             */

/*****************************/

while(1)

{


    EXINTSHIYAN=GpioDataRegs.GPBDAT.bit.GPIO43;

    GpioDataRegs.GPBDAT.bit.GPIO44=EXINTSHIYAN;

   

 }

 }

interrupt void ISRExint3(void)

{


           PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;



    

}


菜鸟
2013-08-17 20:29:19     打赏
7楼

上面是我的外部中断的程序  用的外部中断1   下面是是定时器的程序  其中变量的声明我没写  我程序的内容也没写  主要写的配置部分 应该都是正确的  单独运行这样的小程序 运行都是成功地  但是 当把这些程序放到我的大的程序当中的时候就只进入一次中断,但是  如果先运行我的下面的这个定时器程序  然后再关闭的话  我的大程序就能全速顺利运行   这是什么原因呢  


     下面是我的定时器中断的小程序

#include "DSP28x_Project.h"

interrupt void ISRTimer0(void);

void main(void)

{       

/*****************************/

/*第一步:时钟设置           */

/*****************************/

   InitSysCtrl();

/*第二步:I/O设置            */

/*****************************/

   InitGpio(); 

/*第三步:中断和定时器设置   */

/*****************************/

   DINT;

   InitPieCtrl();

   IER = 0x0000;

   IFR = 0x0000;

   InitPieVectTable();

   EALLOW;

   PieVectTable.TINT0 = &ISRTimer0;

   EDIS;   

// Step 4. Initialize the Device Peripheral. This function can be

   InitCpuTimers();  

   ConfigCpuTimer(&CpuTimer0, 150, 500000);

   StartCpuTimer0();

   PieCtrlRegs.PIEIER1.bit.INTx7 = 1;

   IER |= M_INT1;

   EINT;   // Enable Global interrupt INTM

   ERTM;  

   InitXintf();

 

  while ( 1 )

         {

                  

         }

}    

interrupt void ISRTimer0(void)

{


      CpuTimer0.InterruptCount++;

// Acknowledge this interrupt to receive more interrupts from group 1

      PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

      CpuTimer0Regs.TCR.bit.TIF=1;

      CpuTimer0Regs.TCR.bit.TRB=1;

   

 

}

 能解释下 为什么   只有运行了这个定时器程序之后我的大的程序才能顺利运行吗   如果直接运行我的大的程序就会只进入一次外部中断 或者跑飞  ,或者这个定时器中断程序会影响硬件设置  然后我的大的程序就能顺利运行  ??????????



菜鸟
2013-08-17 20:33:48     打赏
8楼
对 就是进入到 illegal中断了了   有的时候  还会跳到 

 .sect "codestart"
code_start:
    .if WD_DISABLE == 1
        LB wd_disable       ;Branch to watchdog disable code
    .else
        LB _c_int00         ;Branch to start of boot.asm in RTS library
    .endif
的   这句     LB wd_disable       ;Branch to watchdog disable code  中来  是什么原因 ???

高工
2013-08-17 22:30:57     打赏
9楼
这不是程序跑飞,程序异常的时候很多情况下会进入illegal中断 
而你指的是进入了SEQ2INT_ISR中断,这个也是PIE中int1组的,SEQ2INT是Int1.2,而看你程序的意思是想进入XINT1外部中断,是INT1.4。

Int1.2的优先级更高,所以如果两个中断同时发生会优先响应Int1.2. 大程序里面是不是还配置了SEQ2触发的中断?
此外,XINT1只能使用GPIO0-31,而你的程序里面貌似是用到的43和44?


还有你提到的先运行定时器程序,再运行大程序,这两个程序是不是两个工程?正常情况下不应该有什么影响的。
最后的那段汇编是正常的,几乎所有程序编译以后都有这段,是代码入口


菜鸟
2013-08-18 10:46:23     打赏
10楼

  1)恩  我的定时器程序和这个大的程序的确是两个工程  但是现在的情况是 我只打开我的大的程序 运行就只能运行一次 然后现在的情况是 要么不进入外部中断程序 要么程序运行一次之后 整个程序都不运行了 main 函数里面放个断点  都看不到程序运行 ,你觉得定时器程序会不会影响硬件 然后再影响我的程序的运行,比如时钟电源的稳定之类的,我觉得有点扯。

  2)我用的是  GPIO 31 ,那个设置是在GPIO.C里面设置的  ,这个 43 和44 引脚是用作别的用途的  

我并没有用 SEQ1INT(ADC) 或者SEQ2INT(ADC)这两个中断啊  ,程序有时候就进入到这里面 

我大的程序里面没有用到这些中断 , 我也没有专门设置这些中断怎么能进入呢  你看我的程序中有

  PieCtrlRegs.PIEIER1.bit.INTx4= 1; 

   并没有设置  

  PieCtrlRegs.PIEIER1.bit.INTx1= 1;

  PieCtrlRegs.PIEIER1.bit.INTx2= 1; 呀   我所有的程序中都没有上面两条语句  怎么会进入到这两个中断中去呢



共25条 1/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]