我目前正在使用飞思卡尔的 9S12,我真的需要一些帮助才能了解如何正确编写 ISR。特别是,我报告了一个练习的文本,他们要求我测量两个方波之间的相位差(在微控制器的输入端)。
总线时钟为 16 MHz,我必须使用系统的定时器模块,它提供了一个自由运行的计数器(TCNT @ 16 位)。计数器必须以 500 kHz 的频率工作,这是通过从总线时钟开始设置预分频器 5 来实现的。这两个信号具有相同的频率,即给定 (25 Hz),但无论如何都需要对其进行测量。
我必须使用 INTERRUPT 过程,使用正确的寄存器(实际上没有必要使用手册中完全相同的寄存器,我可以使用我想要的任何名称,而不是我必须注释代码的每一行)和变量。
我解决问题的方法非常理论化,但我需要 C 代码。
为了解决这个问题,我必须使用 INPUT CAPTURE MODE 来测量信号 1 的上升沿和信号 2 的上升沿之间的 TCNT(TICKS)计数单位的差异。我的疑问特别关于我必须使用的变量、类型(LOCAL、GLOBAL、UNSIGNED、LONG (?))、如何正确更新 ISR 中的值以及是否应该考虑计数器的溢出和相应的溢出它们产生的中断。
我陷入了这个问题,我希望有人可以帮助我提供一些代码示例,特别是对于我必须使用的变量以及如何编写实际的 ISR。谢谢大家!