请问如何清除中断请求??

时间:2021-10-25 19:35:56
如题。
我知道注册了中断号以后,用InterruptDone(中断号)可以清除对应的中断请求并且使能中断,但这里我想在别的地方直接操作中断寄存器把中断请求清掉,而不想申请中断号然后用InterruptDone。
我是在某些条件下想要撤销EINT0的中断操作。
我试了这样:SRCPND1 |= 0x1; INTPND1 |= 0x1;
结果无效。
想请教一下应该怎样解决??
谢谢

9 个解决方案

#1


自己顶一下~~~~~~~~~~~~~~~~~~~~~~~~

#2


你这样是不行的,必须通过InterruptDone。InterruptDone是告诉操作系统中断处理已经完成,从而使操作系统能够准备处理其他的中断。你单单清除中断寄存器是不行的

#3


那我在A.cpp文件里申请了EINT0的中断号,在B.cpp文件里也要用InterruptDone清除EINT0请求的话,也要重新申请中断号吗??

如果不用的话,那我怎么获取在A.cpp文件里申请过的中断号呢??
(我的文件执行顺序是先B文件,再A文件,A文件代码负责处理中断事件。我想在某些时候在B文件里把EINT0请求清掉,不让它在A文件里处理EINT0中断)

谢谢

#4


你从什么什么地方,引进的中断输入信号了。还有就是中断控制寄存器当中不是有个使能寄存器,这个应该可以控制的!可以试试看看,个人观点,可能不对!

#5


引用 3 楼 larryk 的回复:
那我在A.cpp文件里申请了EINT0的中断号,在B.cpp文件里也要用InterruptDone清除EINT0请求的话,也要重新申请中断号吗??

如果不用的话,那我怎么获取在A.cpp文件里申请过的中断号呢??
(我的文件执行顺序是先B文件,再A文件,A文件代码负责处理中断事件。我想在某些时候在B文件里把EINT0请求清掉,不让它在A文件里处理EINT0中断)

谢谢

A和B是不是同一个驱动啊?如果是的话就直接extern不就可以了嘛

#6


引用 5 楼 veabol 的回复:
A和B是不是同一个驱动啊?如果是的话就直接extern不就可以了嘛


不是同一驱动啊!!!比较麻烦

#7


引用 3 楼 larryk 的回复:
那我在A.cpp文件里申请了EINT0的中断号,在B.cpp文件里也要用InterruptDone清除EINT0请求的话,也要重新申请中断号吗??

如果不用的话,那我怎么获取在A.cpp文件里申请过的中断号呢??
(我的文件执行顺序是先B文件,再A文件,A文件代码负责处理中断事件。我想在某些时候在B文件里把EINT0请求清掉,不让它在A文件里处理EINT0中断)

谢谢


我在B文件中把intpnd1和scrpnd1的值打印出来,发现EINT0对应的第0位都为0,就是说没有中断请求,为什么到A文件的时候,EINT0会响应呢??真是奇怪啊~~~~~~~~

#8


两个文件的东西,情况比较复杂吧,也许是你设定的变量因为缓冲的关系,都没有被中断更新。试试把外部中断寄存器也设置一下。

s2440IOP->rEINTMASK |= 0x4000;
s2440IOP->rEINTPEND = 0x4000;
s2440INT->rSRCPND = BIT_EINT8_23;
if (s2440INT->rINTPND & BIT_EINT8_23) 
s2440INT->rINTPND = BIT_EINT8_23;
上面的是我清理EINT14的

#9


引用 8 楼 halfboy 的回复:
两个文件的东西,情况比较复杂吧,也许是你设定的变量因为缓冲的关系,都没有被中断更新。试试把外部中断寄存器也设置一下。


EINT0不在子中断里头,不用再操作EINTPEND了啊。

#1


自己顶一下~~~~~~~~~~~~~~~~~~~~~~~~

#2


你这样是不行的,必须通过InterruptDone。InterruptDone是告诉操作系统中断处理已经完成,从而使操作系统能够准备处理其他的中断。你单单清除中断寄存器是不行的

#3


那我在A.cpp文件里申请了EINT0的中断号,在B.cpp文件里也要用InterruptDone清除EINT0请求的话,也要重新申请中断号吗??

如果不用的话,那我怎么获取在A.cpp文件里申请过的中断号呢??
(我的文件执行顺序是先B文件,再A文件,A文件代码负责处理中断事件。我想在某些时候在B文件里把EINT0请求清掉,不让它在A文件里处理EINT0中断)

谢谢

#4


你从什么什么地方,引进的中断输入信号了。还有就是中断控制寄存器当中不是有个使能寄存器,这个应该可以控制的!可以试试看看,个人观点,可能不对!

#5


引用 3 楼 larryk 的回复:
那我在A.cpp文件里申请了EINT0的中断号,在B.cpp文件里也要用InterruptDone清除EINT0请求的话,也要重新申请中断号吗??

如果不用的话,那我怎么获取在A.cpp文件里申请过的中断号呢??
(我的文件执行顺序是先B文件,再A文件,A文件代码负责处理中断事件。我想在某些时候在B文件里把EINT0请求清掉,不让它在A文件里处理EINT0中断)

谢谢

A和B是不是同一个驱动啊?如果是的话就直接extern不就可以了嘛

#6


引用 5 楼 veabol 的回复:
A和B是不是同一个驱动啊?如果是的话就直接extern不就可以了嘛


不是同一驱动啊!!!比较麻烦

#7


引用 3 楼 larryk 的回复:
那我在A.cpp文件里申请了EINT0的中断号,在B.cpp文件里也要用InterruptDone清除EINT0请求的话,也要重新申请中断号吗??

如果不用的话,那我怎么获取在A.cpp文件里申请过的中断号呢??
(我的文件执行顺序是先B文件,再A文件,A文件代码负责处理中断事件。我想在某些时候在B文件里把EINT0请求清掉,不让它在A文件里处理EINT0中断)

谢谢


我在B文件中把intpnd1和scrpnd1的值打印出来,发现EINT0对应的第0位都为0,就是说没有中断请求,为什么到A文件的时候,EINT0会响应呢??真是奇怪啊~~~~~~~~

#8


两个文件的东西,情况比较复杂吧,也许是你设定的变量因为缓冲的关系,都没有被中断更新。试试把外部中断寄存器也设置一下。

s2440IOP->rEINTMASK |= 0x4000;
s2440IOP->rEINTPEND = 0x4000;
s2440INT->rSRCPND = BIT_EINT8_23;
if (s2440INT->rINTPND & BIT_EINT8_23) 
s2440INT->rINTPND = BIT_EINT8_23;
上面的是我清理EINT14的

#9


引用 8 楼 halfboy 的回复:
两个文件的东西,情况比较复杂吧,也许是你设定的变量因为缓冲的关系,都没有被中断更新。试试把外部中断寄存器也设置一下。


EINT0不在子中断里头,不用再操作EINTPEND了啊。