AVR/Arduino:读取定时器切换端口引脚

Posted

技术标签:

【中文标题】AVR/Arduino:读取定时器切换端口引脚【英文标题】:AVR/Arduino: reading timer toggled port pin 【发布时间】:2011-06-16 19:29:58 【问题描述】:

我已将定时器 2 配置为 CTC 模式并在比较匹配时切换端口引脚 (TCCR2A=0x42, TCCR2B=0x02, OCR2A=0x20) 并将 DDR3 设置为输出。因此,根据 ATmega328P 文档(第 158-163 页)。 OC2A(又名 PB3)应在每次比较匹配时切换。不幸的是,我无法读取 PORTB 的引脚状态。这是预期的吗?我假设,即使将端口配置为输出,我也可以读取设置值。

【问题讨论】:

【参考方案1】:

有两个问题:

    在 AVR Studio 4.18 中,我不能使用模拟器 1,因为它有一个定时器 2 的错误,因此无法正确切换端口引脚。我需要使用 Simulator 2 或 AVR Studio 5。

    我需要读取 PINB 而不是 PORTB(尽管切换是一种输出操作)。

【讨论】:

【参考方案2】:

我不知道具体的微控制器,但在某些架构中,在更改端口引脚和更新锁存器之间至少需要一个NOP(以便您可以读取更改)。

还有一个引脚可以切换的最大频率(比微控制器 CPU 时钟慢很多倍)。确保不要超过这个频率。

【讨论】:

ATmega 处理器可以通过定时器直接切换端口引脚。不必手动执行此操作,也无需等待 nops。

以上是关于AVR/Arduino:读取定时器切换端口引脚的主要内容,如果未能解决你的问题,请参考以下文章

使用定时器提高读/写串行端口的速度

STM32F103C8T6的定时器PWM复用引脚从哪查看

time输入捕获编码器a,b,可以用不同定时器吗

Arduino定时器中断,无引脚控制

结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程

proteusstm32仿真无法进入定时器中断