如题,是否可以提供am335x的ecap单元作为捕获使用时的例子,谢谢。
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.
我按照自己的理解,和TRM的描述,感觉所有的配置都设置了,但是问题有两个,我用CAP0_in_pwm_out引脚作为输入,配置mux为
{"ecap0_in_pwm0_out.ecap0_in_pwm0_out", OMAP_MUX_MODE0 | AM33XX_SLEWCTRL_FAST | AM33XX_PIN_INPUT},
实际的测试信号为周期=560us的方波,可以通过示波器测试到信号输出,加到ecap0_in_pwm0_out后,没有发生我希望看到的捕捉和相应的中断;
另一个问题是,捕捉计数器如果直接初始化为‘0’的话,计数器即使初始化为“free_run”模式,也不是有计数增加,如果初始化为非‘0’,技术会从当前输出开始增加,数值增加到溢出后归零,计数将不会在增加,计数器模式整个过程过没有被设置为停止模式。
请问是否可以提供给我一个初始化完整的例子,采用中断方式获取捕获周期的例子。谢谢
我跟踪了一下,发现主要问题在于ecap的模式设置始终不正确,正确设置为cap模式就可以了。
系统提供的函数,我重新写了一下,就正确了,不知道是怎么回事。
void ECAPOperatingModeSelect(unsigned int baseAdd, unsigned int modeSelect)
{
unsigned short ecctl2 = HWREGH(baseAdd + ECAP_ECCTL2);
if(modeSelect)
{
ecctl2 &= ~ECAP_ECCTL2_CAP_APWM;
// HWREGH(baseAdd + ECAP_ECCTL2) &= ~ECAP_ECCTL2_CAP_APWM;
}
else
{
ecctl2 |= ECAP_ECCTL2_CAP_APWM;
// HWREGH(baseAdd + ECAP_ECCTL2) |= ECAP_ECCTL2_CAP_APWM;
}
HWREGH(baseAdd + ECAP_ECCTL2) = ecctl2;
}