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.

omap l138 arm 工作模式问题 arm默认是什么工作模式, 默认模式不响应中断吗?



arm端我配置好了中断,绑定了中断响应函数,但是下载进去后我用dsp来触发中断,arm并不响应,同样arm设置中断寄存器也不能触发dsp。

请问这个默认工作模式有关吗?why?如果更改工作模式的话,代码应该怎么写,希望不要用到ti的库,程序我最后要移植到linux下的。

我配置中断的代码如下

aintcRegs->ECR1 = 0xFFFFFFFF;
aintcRegs->ECR2 = 0xFFFFFFFF;
aintcRegs->ECR3 = 0xFFFFFFFF;
aintcRegs->ECR4 = 0xFFFFFFFF;

//Clear system interrupts status 0:100
aintcRegs->SECR1 = 0xFFFFFFFF;
aintcRegs->SECR2 = 0xFFFFFFFF;
aintcRegs->SECR3 = 0xFFFFFFFF;
aintcRegs->SECR4 = 0xFFFFFFFF;

sysISRtbl[AINTC_SYSCFG_CHIPINT1] = SYSCFG_CHIPINT1_isr; /* Assign SYSCFG_CHIPINT1 ISR to SYSCFG_CHIPINT1 system interrupt */

aintcRegs->VBR = (unsigned int) sysISRtbl; /* Assign address of ISR table to VBR */
aintcRegs->VSR = 0; /* Function pointers size = 4 bytes */

CSL_FINS(aintcRegs->CMR7, AINTC_CMR7_CHNL_NPLUS1, 2); /* Map SYSCFG_CHIPINT1 Interrupts to Channel 2*/

CSL_FINS(aintcRegs->EISR, AINTC_EISR_INDEX, AINTC_SYSCFG_CHIPINT1); /* Enable SYSCFG_CHIPINT1 Interrupt */

CSL_FINS(aintcRegs->HIEISR, AINTC_HIEISR_INDEX, 1); /* Enable IRQ Interrupts */
CSL_FINS(aintcRegs->GER, AINTC_GER_ENABLE, 1);

通过这个寄存器来触发

KICK0Ra = 0x83e70b13; //Open Permissions to SYSCFG Registers
KICK1Ra = 0x95A4F1E0; //Note: DSP may close the Permissions

SYS_REGS->CHIPSIG = 0X00000004; //Assert CHIPINT2

  • 你可以看一下syscfg寄存器是否可以改写,如果不能说明不是在supervisor mode下。

    也可以通过仿真器在CCS里看一下CPSR寄存器确认状态。

    如果是用CCS各TI的ARM编译器,裸跑条件下可以调用intrinsic函数_call_swi()来切换模式。可以在CCS里手动更改CPSR后再运行程序也一样的效果。

    在Linux下,这些初始化代码都是在内核态运行的,不会存在这个问题的。