ISTP = 0x00800000;
IER|=0x00000603;//enable interrupt: reset, NMI,INT9
CSR |= 0x1; //enable interruput
INT_MUX(INT9,RINT1);
EVTSET = 0x800;
EVTCLR = 0X800;
为什么我这样不能进入中断服务程序,这个是使用Event Combiner
Event Mask Registers都是全零,没有被屏蔽。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
ISTP = 0x00800000;
IER|=0x00000603;//enable interrupt: reset, NMI,INT9
CSR |= 0x1; //enable interruput
INT_MUX(INT9,RINT1);
EVTSET = 0x800;
EVTCLR = 0X800;
为什么我这样不能进入中断服务程序,这个是使用Event Combiner
Event Mask Registers都是全零,没有被屏蔽。
RINT1对应的的事件号是42, EVTSET1应设成0x400.
"IFR寄存器没变"是什么意思?IFR相应位也手动置1了吗?
你本来就是手动设置中断,所以没有硬件中断将IFR置1.
你要IFR自动置1的话,需要用硬件中断事件来触发。
Event flag registers (EVTFLAGx)
Clear flag registers (EVTCLRx)
Set flag registers (EVTSETx)
这三个寄存器不是操作IFR的吗?我搞糊涂了,设置EVTSEG相应的位不就来了事件吗?
The event flag registers capture all system events that are received by the Interrupt Controller
Use the event set registers to
manually set any bit(s) within the event flag registers (e.g., it may be beneficial to use the event set
registers to generate interrupts when testing interrupt service routines).
这是文档中的话
C6455中断机制是两级的:
中断事件->INTC->CPU interrupt
所以EVTCLR, EVTSET寄存器是置的只是INTC控制器的EVTFLAG的标识寄存器。
而IFR属于CPU级的标识寄存器,由ISR, ICR手动置。