TIMSK1 在哪里定义的?

Where is TIMSK1 defined?

我正在尝试了解 Arduino 中的定时器中断。

我发现检索文档有很大困难。

在线资源引用了明显“神奇”的常量(例如 TIMSK1),但我无法找到它们的定义位置。

它们是否来自某种头文件?

有参考文档吗?

经过一些搜索,我发现在 ATMega 处理器手册中,这些常量被命名(虽然没有详细解释)

手册的一个可能位置是:

https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf

您已经回答了,但我想补充一些空白。

这些符号并不神奇,它们是处理器的名称和 I/O 寄存器以及这些寄存器中 bit-fields 的值。如您所见,处理器数据表解释了 I/O 寄存器的布局。这是所有微控制器供应商的标准。

这是 Mega328P 的主页:https://www.microchip.com/en-us/product/ATmega328p 因为数据表 PDF 可能有一天会改变。请注意,页面下方有许多非常有用的“应用说明”,描述了如何做事...

C 程序或 Arduino 脚本如何获取寄存器和字段的值?来自供应商提供的 header 个文件。在这里查看微芯片“包”:http://packs.download.atmel.com

Arduino IDE 发行版附带的编译器包含了它支持的板的 headers。它们被埋得很深——我们去数据表查找寄存器和字段名称,通常不会去 header 文件。

对于 mega328,header 文件在此处 (macos):~/Arduino.app/Contents/Java/hardware/tools/avr/avr/include/avr/iom328p.h

我不确定你为什么说“(虽然没有详细解释)”。它真的没什么 - 它只包含一些位,当 Timer/Counter 1.

中发生某些事情时可以启用中断

根据 328P 数据表 01/2015,第 90 页描述了 TIMSK1“所有中断都使用定时器中断屏蔽寄存器 (TIMSK1) 单独屏蔽。”寄存器布局是在第 112 页。它在 I/O 寄存器中的位置在第 278 页设置。程序员不需要更多! :-)

(我希望我能附上一个 pdf...它有一个很大的 table 寄存器、字段、中断向量、DIP 引脚,...都是从那个 header 文件生成的.)