Part Number:LAUNCHXL2-570LC43
你好,
我明白如何触发软中断,但是我怎么把软中断的异常处理函数注册呢?
Cherry Zhou:
您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!
,
Cherry Zhou:
Hi,
您请先参考下section 5.1 of SPNA218,看下是否对您有帮助。
,
?? ?:
非常感谢,我正在学习,如果实现了我再来回复您
,
Cherry Zhou:
好的。
,
?? ?:
你好,我学习了SPNA218即相关的文档,但我现在希望主动触发软中断。
我尝试通过向SSIR1寄存器的SSKEY1写入75h来触发软中断(在spnu563a的188页定义),然后程序跳转到了dataEntry而不是_svc。
我的问题是如果我想在某些时刻主动触发软中断是否就是像SSIR1寄存器写入正确的key即可呢?另外为什么会触发到dataEnrty呢?
非常感谢您提供的资料。
,
Cherry Zhou:
您好,
非常抱歉这么晚才回复您,我们这边再催促下工程师关于新问题的答复。给您带来的不便敬请谅解!
,
Cherry Zhou:
您好,
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);
}
,
?? ?:
非常感谢,是我没在VIM RAM中仔细看,没发现SSI中断