你好,
我明白如何触发软中断,但是我怎么把软中断的异常处理函数注册呢?
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.
您好,
Hercules的系统模块支持使用 SSIR1、SSIR2、SSIR3、SSIR4寄存器生成四个软件中断(IRQ 或 FIQ)。 此外,ARM 内核有一个内置软件中断,此中断将生成一个 CPU 中止(SWI/SVC)。
所有四个 SSI 中断被组合成一个到 VIM 的single request line。 您可以同时激活全部4个 SSI。 SSIVEC 寄存器将显示最高挂起 SSI 中断。 与其他外设中的向量寄存器类似,在 SSI ISR 中读取向量寄存器时,相应的标志将被清除。
SSI 将生成 IRQ 或 FIQ 中断,而不是 SVC。
请参阅以下工程师的示例。 在对 SSIR 进行编程(写入0x75密钥)后,系统硬件会向 CPU 产生 IRQ 中断。 CPU 停止执行 main()中的代码并跳转到由您在 VIMRAM 中输入的名称(在以下示例中为 ssiInterrupt())标识的中断服务例程。 在中断例程结束时,CPU 返回到其关闭的位置,并继续执行原始代码。
不会生成数据中止。
#pragma CODE_STATE(ssiInterrupt, 32)
#pragma INTERRUPT(ssiInterrupt, IRQ)
void ssiInterrupt(void)
{
uint32 vec = systemREG1->SSIVEC;
if ((vec & 0xFF) == 0x1){
asm(" nop");
printf("SSI Interrupt 1 \n\r");
}
}
/* USER CODE END */
int main(void)
{
_enable_IRQ();
systemREG1->SSIR1 = 0x7500 | (0xff & 0x2);
}