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.

DM365裸跑中断问题?

DM365裸跑中断

DM365上裸跑,现在无法进入中断服务程序,能否给出实现中断的步骤和例程?

1, CPSR 全能中断, 在特权模式下能设置它吗?如何用C语言设置
2, 特权模式下是否影响中断的产生?
3, IRQ的服务程序地址可以放什么地方?必须是内部RAM的某一处吗?
4, 跳转,还是地址? 中断向量表存放的是地址还是某条跳转指令?是不是不同的工作模式,会有所不同。如果是地址,那为什么 中断向量表 需要设置 每条记录大小,4bytes,8bytes,16byutes...

  • 问题已经解决了。

    但 为什么中断 不是按照 DM365 的文档说明的进行硬跳转, 跳转的EABASE + IRQ_NUM * SIZE,而是 跳转到 0x18 , 

    是不是跟我选择的工作模式有关。  

  • 中断测试代码如下:为什么我的中断不能过滤,不管什么中断都产生了。还有,开中断后,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
            }
           
    }