TI中文支持网
TI专业的中文技术问题搜集分享网站

关于AM335x的eCAP模块作为捕获使用的例子

如题,是否可以提供am335x的ecap单元作为捕获使用时的例子,谢谢。

我爱下载:

找了很多资料,都是ecap作为apwm使用的例子

Jian Zhou:

回复 我爱下载:

目前驱动层的架构是完整的,上层实现都是模拟PWM的,如果改为捕获模式,要按照TRM的描述去做改动。

我爱下载:

回复 Jian Zhou:

我按照自己的理解,和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’,技术会从当前输出开始增加,数值增加到溢出后归零,计数将不会在增加,计数器模式整个过程过没有被设置为停止模式。

请问是否可以提供给我一个初始化完整的例子,采用中断方式获取捕获周期的例子。谢谢

我爱下载:

回复 Jian Zhou:

在这个文件的启发下,现在可以实现捕获功能了,谢谢

Jian Zhou:

回复 我爱下载:

具体是修改的哪里你可以总结下,因为很多人都在问eCAP捕获的事情,谢谢。

我爱下载:

回复 Jian Zhou:

我跟踪了一下,发现主要问题在于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;}

Jian Zhou:

回复 我爱下载:

请问这是startware下的代码么?

我爱下载:

回复 Jian Zhou:

void ECAPOperatingModeSelect(unsigned int baseAdd, unsigned int modeSelect){    if(modeSelect)    {         HWREGH(baseAdd + ECAP_ECCTL2) &= ~ECAP_ECCTL2_CAP_APWM;    }    else    {         HWREGH(baseAdd + ECAP_ECCTL2) |=  ECAP_ECCTL2_CAP_APWM;    }}

这个是starterware下的代码

赞(0)
未经允许不得转载:TI中文支持网 » 关于AM335x的eCAP模块作为捕获使用的例子
分享到: 更多 (0)