NXP MCU 技术论坛
直播中

王鹏

7年用户 1342经验值
私信 关注
[问答]

“Icu_GetDutyCycleValues()”通道2配置为使用计数器F时,为什么在状态寄存器S2中设置溢出位?

我已经配置了 2 个通道,EMIOS0_2 和 EMIOS0_15 用于捕获时间周期以测量 PWM 频率。
#Configuration using Davinci Configurator:
EMIOS0_channel-2 --> 配置为使用总线计数器 F --> 当使用“Icu_GetDutyCycleValues()”读取值时 --> 当在状态寄存器 S2 中设置溢出位时,API 跳过读取。
EMIOS0_channel-15 --> 配置为使用总线计数器 F --> 当使用“Icu_GetDutyCycleValues()”读取值时 --> API 不会跳过并读取值(因为溢出位对于通道 15 无效)。
#reading values:
// 读取前清除
channel_2.ActiveTime = 0u;
channel_2.PeriodTime = 0u;
Icu_GetDutyCycleValues(..);
// 读取前清除
channel_15.ActiveTime = 0u;
channel_15.PeriodTime = 0u;
Icu_GetDutyCycleValues(..);

# 几个问题:
1) 当通道 2 配置为使用计数器 F 时,为什么在状态寄存器 S2 中设置溢出位?
2) 为什么在 Icu_GetDutyCycleValues(..) 中有一个溢出位检查,当有一些像 Channel-2 这样的通道可能被配置为不使用内部计数器时?

回帖(1)

余温重顾

2023-10-26 10:24:31
这是因为使用总线计数器 F 时,计数器会在达到最大值时出现溢出。当状态寄存器 S2 中设置溢出位时,表示计数器到达了最大值并重新从零开始计数。这会对计算 PWM 占空比等参数造成影响。因此,在读取通道 2 的值时,API 会跳过该通道并等待下一次计数器循环。而对于通道 15,由于其不受溢出位的影响,API 可以直接读取其值。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分