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

Part Number: LAUNCHXL2-570LC43

你好,

我明白如何触发软中断,但是我怎么把软中断的异常处理函数注册呢?

  • 您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

  • Hi,

    您请先参考下section 5.1 of SPNA218,看下是否对您有帮助。

  • 非常感谢,我正在学习,如果实现了我再来回复您

  • 你好,我学习了SPNA218即相关的文档,但我现在希望主动触发软中断。

    我尝试通过向SSIR1寄存器的SSKEY1写入75h来触发软中断(在spnu563a的188页定义),然后程序跳转到了dataEntry而不是_svc。

    我的问题是如果我想在某些时刻主动触发软中断是否就是像SSIR1寄存器写入正确的key即可呢?另外为什么会触发到dataEnrty呢?

    非常感谢您提供的资料。

  • 您好,

    非常抱歉这么晚才回复您,我们这边再催促下工程师关于新问题的答复。给您带来的不便敬请谅解!

  • 您好,

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