我知道注册了中断号以后,用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中断)
谢谢
如果不用的话,那我怎么获取在A.cpp文件里申请过的中断号呢??
(我的文件执行顺序是先B文件,再A文件,A文件代码负责处理中断事件。我想在某些时候在B文件里把EINT0请求清掉,不让它在A文件里处理EINT0中断)
谢谢
#4
你从什么什么地方,引进的中断输入信号了。还有就是中断控制寄存器当中不是有个使能寄存器,这个应该可以控制的!可以试试看看,个人观点,可能不对!
#5
A和B是不是同一个驱动啊?如果是的话就直接extern不就可以了嘛
#6
不是同一驱动啊!!!比较麻烦
#7
我在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的
s2440IOP->rEINTMASK |= 0x4000;
s2440IOP->rEINTPEND = 0x4000;
s2440INT->rSRCPND = BIT_EINT8_23;
if (s2440INT->rINTPND & BIT_EINT8_23)
s2440INT->rINTPND = BIT_EINT8_23;
上面的是我清理EINT14的
#9
EINT0不在子中断里头,不用再操作EINTPEND了啊。
#1
自己顶一下~~~~~~~~~~~~~~~~~~~~~~~~
#2
你这样是不行的,必须通过InterruptDone。InterruptDone是告诉操作系统中断处理已经完成,从而使操作系统能够准备处理其他的中断。你单单清除中断寄存器是不行的
#3
那我在A.cpp文件里申请了EINT0的中断号,在B.cpp文件里也要用InterruptDone清除EINT0请求的话,也要重新申请中断号吗??
如果不用的话,那我怎么获取在A.cpp文件里申请过的中断号呢??
(我的文件执行顺序是先B文件,再A文件,A文件代码负责处理中断事件。我想在某些时候在B文件里把EINT0请求清掉,不让它在A文件里处理EINT0中断)
谢谢
如果不用的话,那我怎么获取在A.cpp文件里申请过的中断号呢??
(我的文件执行顺序是先B文件,再A文件,A文件代码负责处理中断事件。我想在某些时候在B文件里把EINT0请求清掉,不让它在A文件里处理EINT0中断)
谢谢
#4
你从什么什么地方,引进的中断输入信号了。还有就是中断控制寄存器当中不是有个使能寄存器,这个应该可以控制的!可以试试看看,个人观点,可能不对!
#5
A和B是不是同一个驱动啊?如果是的话就直接extern不就可以了嘛
#6
不是同一驱动啊!!!比较麻烦
#7
我在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的
s2440IOP->rEINTMASK |= 0x4000;
s2440IOP->rEINTPEND = 0x4000;
s2440INT->rSRCPND = BIT_EINT8_23;
if (s2440INT->rINTPND & BIT_EINT8_23)
s2440INT->rINTPND = BIT_EINT8_23;
上面的是我清理EINT14的
#9
EINT0不在子中断里头,不用再操作EINTPEND了啊。