TI中文支持网
TI专业的中文技术问题搜集分享网站

LAUNCHXL2-570LC43: 如何使用SWI(Software Interrupt)?

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中断

赞(0)
未经允许不得转载:TI中文支持网 » LAUNCHXL2-570LC43: 如何使用SWI(Software Interrupt)?
分享到: 更多 (0)