我在程序中要处理GPIO外部中断和定时器。定时器和GPIO中断感觉相互之间有影响。并且发现以下几个问题:
1.通过观察寄存器,每当进入中断服务程序时,CPU全局中断使能都是关闭的,当中断服务程序返回后,全局中断打开。但是我在GPIO中断服务程序结束后要专门使能CPU全局中断,即CSR寄存器的最低位,否则就再不能进中断了,这是为什么?(定时器中断不存在这个问题,我不需要在服务程序中专门关闭或启动全局中断)
2.如果在定时器中断服务程序中专门用一条代码使能了全局中断,GPIO中断就不再产生了;但是如果不在定时器中断内使能全局中断,每当GPIO中断产生,定时器中断就再也没有了。
3.如果在每个中断服务程序中都有以下代码操作: 关闭全局中断—>清当前事件标志和中断标志—>使能全局中断。就会产生GPIO中断响应丢失的现象(GPIO中断是通讯的外部中断,频率比较高,定时器是1ms周期),我想这是不是中断过于频繁导致相互干扰?
请问我的处理方法有什么问题,如何让这两个中断正常运行?
Tony Tang:
MaoChao,
#1. 程序是在DSP端是吧,因为看到你提到CSR。
#2. 请问是否用了DSPBIOS或者SYSBIOS?
#3. 请问在ISR函数前是否加了interrupt关键字?
#4. 你说的没错,进入ISR关闭GIE是自动的,返回时自动打开GIE,所以不需要人为干预,除非想做中断嵌套。
你的这种使用场景是常用声景,所以使用是没有问题的,应该是哪里的处理不对。可以把代码贴上来看一下。
TI中文支持网


