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

共14条 1/2 1 2 跳转至

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

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

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

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





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

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

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

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


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

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     打赏
4楼

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     打赏
5楼

上面是我的外部中断的程序  用的外部中断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     打赏
6楼
对 就是进入到 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-18 10:46:23     打赏
7楼

  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; 呀   我所有的程序中都没有上面两条语句  怎么会进入到这两个中断中去呢



菜鸟
2013-08-18 10:52:43     打赏
8楼
我想问的是  我下面的这个汇编 程序 为什么会跳到 关看门狗的程序关闭的那条去呢  .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-18 11:05:27     打赏
9楼

我发现 我的程序有的时候 进入到 

interrupt void ILLEGAL_ISR(void)   // Illegal operation TRAP

{
  // Insert ISR Code here


  // Next two lines for debug only to halt the processor here
  // Remove after inserting ISR Code
  asm("          ESTOP0");
  for(;;);


}




有的时候是进入到

interrupt void SEQ1INT_ISR(void)   //SEQ1 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(;;);


}

或者
// INT1.2
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(;;);


}

   为什么程序会跳到这些中断里面去   有没有可能是硬件的问题 比如片中本身中断系统的问题呢  ?


菜鸟
2013-08-18 14:22:58     打赏
10楼

(1)定时器什么也没干 已经屏蔽掉了  还是出现以前的问题  

 现在来说我的我的程序就是运行一次  然后就跳到别的中断里面了  要么是 SEQ1INT    或者 SEQ1INT 或者 ADCINT 或者 ILLEGAL 有的时候还进入到  USER  ,总之就是运行一次就跳跑了!


(2)cmd文件会出现什么情况才出现程序乱跳,难道是网上说的  空间重叠吗 ?

 (3)其实我的大的程序也不大  就是一个再main函数中SCI查询的时候,有一个外部中断 ,每当有中断的时候从外部读一个数据而已!


共14条 1/2 1 2 跳转至

回复

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