NMI中断不稳定,可能是啥原因? - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4766|回复: 1

NMI中断不稳定,可能是啥原因?

[复制链接]

21

主题

80

帖子

315

积分

中级会员

Rank: 3Rank: 3

积分
315
发表于 2014-11-12 11:21:27 | 显示全部楼层 |阅读模式
本帖最后由 shejishi0225 于 2014-11-13 09:25 编辑

1.  NMI例程初始化存在bug
void InterruptInit(void)
{
               // 初始化DSP 中断控制器
               IntDSPINTCInit();

               // 注册中断服务函数
               IntRegister(C674X_MASK_NMI, NMIIsr);        

}

上述函数初始化,在目前评估板的操作模式下,即手动按钮实现NMI中断,出问题的可能性很小
但若在此基础上,中断是外部周期的产生,此时出问题可能性极大,分析如下:
1.1 初始化DSP 中断控制器后,NMI中断被初始化为IntDefaultHandler(),此函数定义如下:
static voidIntDefaultHandler (void)
{
    while(1);
}
1.2 因外部是周期的产生NMI中断的,假若在“ 初始化DSP 中断控制器”后,在“注册中断服务函数”之前,发生了NMI中断,程序就会一直执行上述IntDefaultHandler()函数,即一直不停地循环,不会继续完成“注册中断服务函数


2.  为解决此问题,优化中断初始化如下:
void IntRegister (unsigned int cpuINT, void (*userISR)(void))
{
   unsigned int step = 0;

   /*Set ISRs to default "do-nothing" routine */
   while(step !=C674X_INT_COUNT)
       c674xISRtbl[step++] = IntDefaultHandler;

   /*Set interrupt service table pointer to the vector table */
#ifdef __TI_EABI__
    ISTP = (unsigned int)_intcVectorTable;
#else
   ISTP = (unsigned int)intcVectorTable;
#endif

/***********************************************************************************/
   /*Check the CPU maskable interrupt number */
   ASSERT(((cpuINT >= 1) && (cpuINT <= 15)));

   /*Assign the user's ISR to the CPU maskable interrupt */
   c674xISRtbl[cpuINT] = userISR;

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

   /*Clear pending CPU maskable interrupts (if any) */
   ICR = 0xFFF0;

   /*Enable NMIE bit to allow CPU maskable interrupts */
   IER = (1 << C674X_NMI);

}

可存在问题如下:
2.1  与评估板的NMI产生不一样的是,评估板通过手按键产生NMI中断;我这边是FPGA一直不停地以1ms周期发生中断;也就是说,如果按照NMI例程不做修改,很有可能在dsp未初始化完成时,NMI中断就产生了,导致程序一直不停的执行IntDefaultHandler().
2.2  现在程序已经能正常运行了,可中断不是很稳定,每进一次中断,用GPIO发信号翻转一次,有时候有,有时候没有,不知道是什么原因?


回复

使用道具 举报

21

主题

80

帖子

315

积分

中级会员

Rank: 3Rank: 3

积分
315
 楼主| 发表于 2014-11-13 11:29:30 | 显示全部楼层
本帖最后由 shejishi0225 于 2014-11-13 13:49 编辑

接上面继续:
目前时钟设置如下:
1. CPU    300MHz,EMIFA 100MHz, GPIO 300/4 MHz
2. DDR2 240MHz
cpu与DDR2等的时钟设置,相互之间有牵制么?



回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-3-29 23:10 , Processed in 0.035947 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表