DM365裸跑中断
DM365上裸跑,现在无法进入中断服务程序,能否给出实现中断的步骤和例程?
1, CPSR 全能中断, 在特权模式下能设置它吗?如何用C语言设置
2, 特权模式下是否影响中断的产生?
3, IRQ的服务程序地址可以放什么地方?必须是内部RAM的某一处吗?
4, 跳转,还是地址? 中断向量表存放的是地址还是某条跳转指令?是不是不同的工作模式,会有所不同。如果是地址,那为什么 中断向量表 需要设置 每条记录大小,4bytes,8bytes,16byutes...
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.
中断测试代码如下:为什么我的中断不能过滤,不管什么中断都产生了。还有,开中断后,DiableIRQ为什么不能关中断?0x01C48000到底设置中断是否起作用?
DiableIRQ();
Int_Reg = (INTC_REGS*)0x01C48000;
// Mask all interrupts
Int_Reg->INTCTL = 0x4;
Int_Reg->EABASE = 0x0;
Int_Reg->EINT0 = 0x0;
Int_Reg->EINT1 = 0x0;
// Clear all interrupts
Int_Reg->FIQ0 = 0xFFFFFFFF;
Int_Reg->FIQ1 = 0xFFFFFFFF;
Int_Reg->IRQ0 = 0xFFFFFFFF;
Int_Reg->IRQ1 = 0xFFFFFFFF;
Int_Reg->INTCTL = 0x0002;
Int_Reg->EABASE = 0x0000;
Int_Reg->EINT0 |= 0x001 << 12;
EnableIRQ();
其中
void EnableIRQ(void) {
int r0;
__asm {
MRS r0, cpsr
EOR r0, r0, #0xC0
MSR cpsr_c, r0
NOP
NOP
}
}
void DiableIRQ(void) {
int r0;
__asm {
MRS r0, cpsr
ORR r0, r0, #0xC0
MSR cpsr_c, r0
NOP
NOP
}
}