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.
大家好、
以下是客户提出的问题、可能需要您的帮助:
很清楚软中断是如何触发的、但客户不知道如何注册软中断异常处理函数。
您可以帮助检查此案例吗? 谢谢。
此致、
樱桃
您好、Cherry、
请看 一下 SPNA218的第5.1节。请告诉我这是否有帮助。
您好 QJ、
感谢你的帮助。
客户已检查您提供的文件、并且他们当前希望主动触发软件中断。
他们尝试通过将75h 写入 SSIR1寄存器(在 spnu563a 的第188页定义)中的 SSKEY1来触发软件中断、但程序跳转到 DataEntry 而不是_Svc。
如果用户想要在某个时刻主动触发软件中断、可以通过向 SSIR1寄存器写入正确的密钥来实现吗? 为什么触发 dataEnrty?
谢谢、此致、
樱桃
您好!
我是否可以知道有任何更新?
谢谢、此致、
樱桃
您好、Cherry、
赫丘利斯器件的系统模块支持使用 SSIR1、SSIR2、SSIR3、SSIR4寄存器生成四个软件中断(IRQ 或 FIQ)。 此外、ARM 内核 有一个内置软件中断、此中断将生成一个 CPU 中止(SWI/SVC)。
所有四个 SSI 中断被组合成一个到 VIM 的单一请求线路。 您可以同时激活全部4个 SSI。 SSIVEC 寄存器将显示最高挂起 SSI 中断。 与其他外设中的向量寄存器类似、当在 SSI ISR 中读取向量寄存器时、相应的标志将被清除。
SSI 将生成 IRQ 或 FIQ 中断、而不是 SVC。
请参阅下面的示例。 在对 SSIR 进行编程(写入0x75密钥)后、系统硬件会向 CPU 产生 IRQ 中断。 CPU 停止执行 main()中的代码并跳转到由您在 VIMRAM 中输入的名称(在我的示例中为 ssiInterrupt())标识的中断服务例程。 在中断例程结束时、CPU 返回到其关闭的位置、并继续执行原始代码。
不会生成数据中止。
#pragma CODE_STATE (siInterrupt、32)
#pragma INTERRUPT (siInterrupt、IRQ)
void sisInterrupt (void)(空)
{
uint32 vec = systemREG1->SSIVEC;
if ((VEC & 0xFF)=0x1){
asm (" nop");
printf ("SSI 中断1 \n\r");
}
}
/*用户代码结束*/
int main (空)
{
_enable_IRQ ();
systemREG1->SSIR1 = 0x7500 |(0xff & 0x2);
}