DSP28335 使用外中断 程序单步运行可以 全速运行就进不了外中断或者跑飞是什么原因
有哪位用过的分享一下使用经验 非常感谢
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 想要全速运行的时候 ,就只进入一次外部中断 ,其余时间不进入外中断。
有没有给点建议 这是什么原因造成的,还有就是我的程序先运行一个小的定时器程序后,在关闭这个定时器程序,那么再运行我的这个大的程序就能全速运行了,这是什么原因呢? 有人说是电源芯片的问题,但我觉得硬件都很正常啊 希望给点建议,多谢了。
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;
}
上面是我的外部中断的程序 用的外部中断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;
}
能解释下 为什么 只有运行了这个定时器程序之后我的大的程序才能顺利运行吗 如果直接运行我的大的程序就会只进入一次外部中断 或者跑飞 ,或者这个定时器中断程序会影响硬件设置 然后我的大的程序就能顺利运行 ??????????
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; 呀 我所有的程序中都没有上面两条语句 怎么会进入到这两个中断中去呢
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |