【问题标题】:how interrupts works and what is the function of vectors in MSP430 ?中断如何工作以及 MSP430 中向量的功能是什么?
【发布时间】:2014-03-11 14:22:35
【问题描述】:
  • 谁能解释我如何编写 ISR 以及如何在多个程序中设置优先级?
  • 向量的作用是什么?在中断处理时是否需要考虑它们?
  • 如果可能,请提供一些示例(c 代码)。

【问题讨论】:

  • 建议你在搜索引擎中搜索“msp430中断处理”开始阅读。

标签: microcontroller msp430


【解决方案1】:

就像当你家的门铃或电话响起时,你停止你正在做的事情,处理中断,然后,理想情况下,回到你正在做的事情。

与处理器相同(msp430 或其他)。由于各种原因,有多种方法可以中断处理器。我在 uart 中有一个新字节供您使用,计时器已超时,gpio 引脚已更改状态等。您已配置为在发生时中断处理器的事情。

就像门铃一样。硬件必须有办法停止并保存一些东西以记住它在做什么,找出中断是什么并处理它,然后回到它正在做的事情。处理器通常会在指令之间中断,它们将完成当前指令(管道“当前”有点模糊)。然后基于中断和处理器的设计,硬件和软件在某个地方达成一致(硬件决定和程序员使用),以便软件可以告诉处理器处理所有中断或特定中断的代码在哪里中断的味道,取决于处理器的设计方式。一个常见的解决方案是中断向量表,通常是程序员设置的地址列表,指向处理每个事件或中断的代码,程序员和硬件都知道特定中断将导致特定地址在内存空间中读取,硬件假定地址是该中断的代码。

所以处理器得到一个中断,它保存机器的状态,至少是程序计数器,并且根据设计还可以保存状态寄存器和 gprs,但通常程序员负责保存 gprs 等如所须。然后硬件基于中断/事件从地址读取,通常该地址包含处理程序的地址,例如 0xFFF8 可能是中断处理程序的地址(不知道没有为 msp430 查找它)。所以 0xFFF8 不是代码所在的位置,但该地址的数字是代码所在的位置,例如 0xD008。这取决于处理器架构,但是当您完成处理中断时,您需要告诉处理器,以便它可以返回到中断的内容。通常这是中断指令的特殊返回,但不同的处理器有不同的解决方案。

优先级(如果有的话)由硬件设计决定,像 msp430 这样简单的东西可能没有(不确定手头)除了谁先到这里的优先级方案。并且该方案可能是在您退出处理程序之前检查是否有其他人在您处理中断您的处理程序时进入。如果设计中有优先级方案,那么它只是重复过程保存状态(中断或前台代码中断)通常使用向量表找到处理程序的入口点。当最高优先级的处理程序完成时,它返回并控制回到下一个更高优先级的事情,并最终回到前台任务(假设没有其他事情发生)。

一般来说,isr 不需要破坏前台任务正在使用的任何东西,如果需要,保留 gprs 的状态,保留状态寄存器的状态,不要弄乱前台任务使用的堆栈或内存等。理想情况下,保持 isr 精简和平均,不要在那里浪费很多时间。向量表只是您在代码重置处理程序中断处理程序等中填写入口点地址的地方。

【讨论】:

    【解决方案2】:

    中断处理程序(也称为中断服务例程或 ISR)是在需要 CPU 关注的事件 (I/O) 发生时运行的一段代码。中断事件通常是异步的,因此必须为事件注册处理程序。

    例如,在串行通信的情况下,数据由需要处理的 USCI 外设(配置为 UART)接收。在这种情况下,USCI 外设将发出中断,CPU 将从中断处理程序(由中断向量寻址)开始执行。矢量位于固定位置,并在您设备的数据表中列出。当到达中断处理程序的末尾时,CPU 将返回到它停止的地方(或服务另一个中断)。数据表/用户指南将解释中断的默认优先级。

    使用 IAR Embedded Workbench IDE 的典型中断处理程序如下所示:

    // Port 1 interrupt service routine
    #pragma vector=PORT1_VECTOR
    __interrupt void Port_1(void)
    {
        P1OUT ^= 0x01;
        // P1.0 = toggle
        P1IFG &= ~0x10;
        // P1.4 IFG cleared
    }
    

    更多阅读可here

    【讨论】:

      猜你喜欢
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多