我使用的是 Ethernut 2.1 B,我需要一个 C 程序,它在定时器 1 输出 B 上输出时钟信号,换句话说,在输出 OCIB 上。时钟信号的频率应为 1.0 kHz。
任何人都知道如何做到这一点?
它似乎基于Atmel ATmega 128,因此请阅读该 CPU 的数据表以了解如何对定时器硬件进行编程。
不确定该微控制器是否支持直接驱动定时器的输出,如果不支持,您将不得不在中断服务程序的软件中执行此操作。
您需要查看COM
计时器的位。例如,对于 Timer0(8 位),这些COM
位在TCCR0
寄存器中设置。您可能感兴趣的设置是
TCCR0 |= (0<<COM1)|1<<COM0); // Toggle OC0 on compare match
当定时器达到指定值时,这将切换 OC0 (pin14) 线。
您使用哪个计时器取决于您需要的精度:显然 16 位计时器可以为您提供比 8 位计时器更精确的时间分辨率。
特定频率 (1Khz) 的寄存器设置取决于芯片的时钟速度,以及您使用的定时器:定时器使用预先调整的通用时钟信号(有关可能值,请参见数据表的表 56)。这意味着预分频器设置将取决于您的时钟速度以及您想要计数的高度。为了获得最大的精度,您将希望计数尽可能高,这意味着与定时器最大值兼容的最低预分频器设置。
至于从哪里开始,一般来说,阅读数据表是一个好地方,但谷歌搜索“AVR 计时器”也很有帮助。