【问题标题】:Why there are several stages to enable pin change interrupts in AVR architecture为什么在 AVR 架构中有几个阶段来启用引脚更改中断
【发布时间】:2019-06-14 03:41:06
【问题描述】:

在 AVR 架构中有一些中断,我们需要几行代码来启用它们。例如,引脚更改中断。但是有些中断有一个步骤,不包括全局中断使能。例如 timer0 溢出中断,只需要设置 TIMSK0 寄存器的第 0 位。那么,这样设计架构有什么优势呢?

【问题讨论】:

  • 一些中断只是有更多的配置设置分布在不同的寄存器中。或者你到底在问什么?
  • 是的。一些中断需要设置更多配置。我的问题是为什么会这样?例如在 AVR atmega328p MCU 中。要激活端口 B 的引脚 0,我们同时设置 PCICR 的 PCIE0 位和 PCMSK0 的 PCINT0。为什么喜欢这两个步骤来启用中断。定义是什么。

标签: arduino embedded avr


【解决方案1】:

通常,中断将具有它们所需的配置位/寄存器,仅此而已。一般来说,每个中断向量只有一个enable位。

举个例子:

引脚更改中断非常简单,只需要每个向量一个启用位和一个位掩码寄存器(每个引脚一个位)。

定时器更复杂 - 虽然你说要启用 timer0 溢出中断你只需要在TIMSK0 中设置TOIE0,但你仍然需要正确设置定时器才能使用它您的应用程序,这可能需要几行代码才能完成。

在这两种情况下,都有一个设置步骤和一个启用步骤。

这样做的好处是您可以设置中断,但仅在需要时启用它们。这意味着:

  • 在不需要时运行的中断不会浪费处理器周期或 RAM
  • 在不需要时运行中断不会浪费电力
  • 可以在运行时重新配置中断,方法是禁用中断、更改配置并重新启用它

所有这些对于嵌入式软件应用程序都很有用。

【讨论】:

    【解决方案2】:

    一般来说,jfowkes 解释了每个中断(ADC、定时器、引脚更改、数据 tx、EEPROM 等)的设置可能有何不同,但实际上只有一行代码启用每个单独的中断。

    如果你有一个反例,那就更容易澄清了。


    很多关于引脚变化中断的信息都浓缩在这个页面上:
    http://medesign.seas.upenn.edu/index.php/Guides/MaEvArM-pcint

    它特定于一个 AVR 芯片组,但它应该可以为您提供更多信息。

    通常,架构设计会尽可能简单,因为这也是在晶体管级设计和蚀刻最容易的方法。如果您观看 MIT 6.004 讲座,specifically #20,他们详细说明了指令集的设计方式/原因。或者,您可以查看http://www.avr-tutorials.com/interrupts/about-avr-8-bit-microcontrollers-interrupts。基本上,一个专用的中断电路(一个位控制每个中断信号是否通过)可以很容易地存储当前的程序计数器并为中断服务。

    【讨论】:

      猜你喜欢
      • 2019-04-29
      • 1970-01-01
      • 2021-01-29
      • 2019-08-14
      • 1970-01-01
      • 2011-10-18
      • 2022-11-14
      • 1970-01-01
      • 2011-04-03
      相关资源
      最近更新 更多