找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

EPWM_AccumulatorINT_TriggerPDMA例程的疑问

[复制链接]
跳转到指定楼层
楼主
匿名  发表于 2023-11-1 18:59:50 |只看大图 回帖奖励 |倒序浏览 |阅读模式
EPWM_AccumulatorINT_TriggerPDMA例程的疑问
请问M480.M467例程,如果在PDMA例程中,要启动 发送 50000个脉冲的话,请问如何操作啊?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具

沙发
chrishu 发表于 2023-11-2 10:19:49 | 只看该作者
本帖最后由 chrishu 于 2023-11-2 16:28 编辑

累加器计数到设定值,可以产生中断、停止输出、触发PDMA。
EPWM_EnableAcc(EPWM1, 0, 50, EPWM_IFA_ZERO_POINT);  //第三个参数设置累加器的计数个数
EPWM_EnableAccInt(EPWM1, 0);//使能CH0的累计器中断
EPWM_EnableAccStopMode(EPWM1, 0);//CH0 累加中断产生后停止
EPWM_EnableAccPDMA(EPWM1, 0);//使能CH0累加器触发PDMA(内存==>寄存器)
下面这段代码实现循环延时一段时间发送10个脉冲,可以参考一下。



回复 支持 反对

使用道具 举报

板凳
匿名  发表于 2023-11-2 11:09:35
    EPWM_ConfigOutputChannel(EPWM0, EPWM_Axis, speed_cmd, 50);
    EPWM_EnableOutput(EPWM0, EPWM_CH_1_MASK);
    EPWM_EnableAcc(EPWM0, EPWM_Axis, pls, EPWM_IFA_ZERO_POINT);
    EPWM_EnableAccStopMode(EPWM0, EPWM_Axis);
//    EPWM_EnableAccPDMA(EPWM0, EPWM_Axis);       
    EPWM_Start(EPWM0, EPWM_CH_1_MASK);
这样的话,提前配置好PDMA,不使能ACCPDMA也可以?这是为什么?
回复 支持 反对

使用道具

地板
匿名  发表于 2023-11-2 11:30:00
我的需求是,仅仅需要控制发送预设频率以及预设脉冲个数(小于2^16);是不是不用开启PDMA,也可以?甚至不用开启ACC中断也行?

回复 支持 反对

使用道具

5#
chrishu 发表于 2023-11-2 16:39:06 | 只看该作者
本帖最后由 chrishu 于 2023-11-2 16:40 编辑
游客 121.29.111.x 发表于 2023-11-2 11:30
我的需求是,仅仅需要控制发送预设频率以及预设脉冲个数(小于2^16);是不是不用开启PDMA,也可以?甚至不 ...

之前有说过累加器设定的计数时间到了后,可以产生中断、停止PWM、还可以触发PDMA搬运数据。
至于你希望用到哪些功能就使能哪些就好了。之前的回复里有给出使能每一种功能调用什么函数。

如果只需要累加停止功能可以参考例程EPWM_AccumulatorStopMode。前面回复的截图图片里也有给出循环延时一段时间发送10个脉冲的参考。

回复 支持 反对

使用道具 举报

6#
匿名  发表于 2023-11-2 18:56:00
chrishu 发表于 2023-11-2 16:39
之前有说过累加器设定的计数时间到了后,可以产生中断、停止PWM、还可以触发PDMA搬运数据。
至于你希望用 ...

谢谢!明白了!
很感谢您的耐心解答!
回复 支持 反对

使用道具

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU