器件型号: AM625
你好
我使用计时器 MCU_TIMER1 并使用寄存器 DMTIMER1MS_TCAR1 (0481 0050h) 和 DMTIMER1MS_TCAR2 (0481 0058h) 来计算 PWM 信号的频率。 它旨在获得 3Hz 至 10kHz 范围内的信号频率。
我们实现信号频率计算的方式如下:
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
器件型号: AM625
你好
我使用计时器 MCU_TIMER1 并使用寄存器 DMTIMER1MS_TCAR1 (0481 0050h) 和 DMTIMER1MS_TCAR2 (0481 0058h) 来计算 PWM 信号的频率。 它旨在获得 3Hz 至 10kHz 范围内的信号频率。
我们实现信号频率计算的方式如下:
仅供参考、如果此常见问题解答有用: e2e.ti.com/.../faq-processor-sdk-am64x-how-to-create-a-pwm-using-a-timer
您好:
我正在根据给定的脚本处理这个主题、因此如果我遇到问题、我会道歉。
我们使用以下参数:
TIMER_INPUT_CLOCK_HZ=25000000
REG_SIZE=32
CFG_TCLR_REG=0x4810038
CFG_TCAR1_REG=0x4810050
CFG_TCAR2_REG=0x4810058
IRQSTATUS_REG=0x04810028
IRQSTATUS_SET_REG=0x481002C
MCU_SPI0_CS1_PIN_REG=0x4084004
AR_VALUE=1 # Auto reload mode
PTV_VALUE=0 # Prescaler Trigger Value
PRE_VALUE=0 # Prescaler Enable
TCM_VALUE=1 # Capture of rising edge
CAPT_MODE=1 # Capture input mode
GPO_CFG_VALUE=1
TCLR_REG_VALUE=(({AR_VALUE} << 1 | {PTV_VALUE} << 4 | {PRE_VALUE} << 5 | {TCM_VALUE} << 9 | {CAPT_MODE} << 13 | {GPO_CFG_VALUE} << 14))
busybox devmem {CFG_TCLR_REG} {REG_SIZE} {TCLR_REG_VALUE}
我尝试使用计时器来计算信号的频率。
```μ s
#清除捕获中断请求
Busybox devmem ${IRQSTATUS_REG}${REG_SIZE}0x04
#读取计时器捕捉值
TCAR1_VALUE=$(busybox devmem ${CFG_TCAR1_REG}${REG_SIZE})
TCAR2_VALUE=$(busybox devmem ${CFG_TCAR2_REG}${REG_SIZE})
measured_ticks=$(( TCAR2_value - TCAR1_value ))
#计算频率
ENGINE_STATE_FREQ=$(${TIMER_INPUT_CLOCK_Hz}/${measured_ticks})
```μ s
这种方法适用于大多数频率、频率为+/–1Hz、但如果信号频率较低(45Hz 或更低)、这种方法会给出一些不一致的值。
下面是一个示例、我们尝试读取 30Hz。

0481 0050h 是用于这种情况的正确计时器、还是有另一个更正确的计时器?
感谢您的关注、
Francisco
您好、Francisco、
若要确认、TCAR1 的寄存器地址 0x04810050 和 TCAR2 的寄存器地址 0x04810058 对于 MCU_Timer1 是正确的。 这不是问题的根源。
低频率不一致是软件同步问题。 您的脚本会在开始时清除捕获中断标志、但随后立即读取 TCAR1 和 TCAR2、而无需等待下一个捕获周期完成。 在高频率下、这会被忽视、因为硬件捕获新边缘的速度比软件读取寄存器的速度快。 在低频率下、情况恰恰相反、您的软件在下一个边沿到达之前读取这两个寄存器、因此 TCAR2 仍保留上一个捕获周期的值。 由于该值比 TCAR1 旧、因此您会得到 TCAR2 < TCAR1、这会导致下溢和您在输出中看到的频率值错误。
修复方法是使用捕获中断标志 (IRQSTATUS 中的 TCAR_IT_FLAG 位 2) 作为同步机制。 更正后的顺序应为:
这可以确保每次读取 TCAR1 和 TCAR2 都会反映一个全新且有效的连续捕获对、无论输入频率有多低。
此致、
Harshith