找回密码
 立即注册
查看: 757|回复: 10

有8051U关于PWMA-DMA的详细说明吗?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

977

积分

高级会员

积分
977
发表于 2024-10-4 20:10:09 | 显示全部楼层 |阅读模式
数据手册好像没有明示。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2024-10-4 20:31:00 | 显示全部楼层
回复 支持 0 反对 1

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

977

积分

高级会员

积分
977
发表于 2024-10-4 23:22:45 | 显示全部楼层
本帖最后由 health 于 2024-10-4 23:36 编辑

PWM-DMA 驱动 WS2812彩灯@Ai8051U,最多1365个灯同时, 32K SRAM - BLDC/144MHz-PWM-硬件移相/45路PWM+3路CCP/7组不同周期的PWM/DAC
正是看了这个例子才有本帖疑问。
  1. void PWMAT_DMA_TRIG(u8 xdata *TxBuf, u16 num)
  2. {
  3.         u16        i;
  4.     PWMA_DBA   = 0x0D;        //DMA传输目标起始地址(offset代码), 0x0d对应的就是PWM1_CCR1H, 请参考“基地址DBA与实际占空比寄存器对应关系表.jpg”
  5.     PWMA_DBL   = 0x00;        //DMA传输通道数为1通道(n+1)                DBL=DMA burst length = N+1
  6.     PWMA_DER   = 0x01;        //DMA传输数据触发条件为更新请求,即每个PWM周期开始后就触发DMA发送一次
  7.     PWMA_DMACR = 0x14;        //Bit4(DSKIP)=1:跳过保留字节, Bit3(DDIR)=0:传输方向XRAM到PWMA,BIt2(DMAEN)=1:允许PWMA_DMA, dsize{1:0]=1:每个通道发送字节数为2字节。
  8.         i = (u16)TxBuf;        //取首地址
  9.         DMA_PWMAT_TXAH = (u8)(i >> 8);                //发送地址寄存器高字节
  10.         DMA_PWMAT_TXAL = (u8)i;                                //发送地址寄存器低字节
  11.         DMA_PWMAT_AMTH = (u8)((num-1)/256);        //设置传输总字节数 = n+1
  12.         DMA_PWMAT_AMT  = (u8)((num-1)%256);        //设置传输总字节数 = n+1
  13. //        DMA_PWMA_ITVH  = (u8)(2460/256);        //增加的间隔时间,N+1个系统时钟
  14. //        DMA_PWMA_ITVL  = (u8)(2460%256);
  15.         DMA_PWMAT_STA  = 0x00;
  16.         DMA_PWMAT_CFG  = DMA_PWMATIE | DMA_PWMATIP | DMA_PWMATPTY;
  17.         DMA_PWMAT_CR   = DMA_ENPWMAT | PWMAT_TRIG;
  18.         B_PWMAT_DMA_busy = 1;        //标志PWMAT-DMA忙,PWMAT DMA中断中清除此标志,使用PWMAT DMA前要确认此标志为0
  19. }
复制代码

基地址DBA与实际占空比寄存器对应关系表.jpg》在哪里可以得到?
为什么要写PWM1_CCR1H,不应该是PWM1_CCR1L吗?

PWMA_DMACR = 0x14; //保留字节是啥,size又是啥?

DMA_PWMA_ITV间隔时间有什么作用?

点评

dma_pwma_itv是用来给dma过程中,每次改变pwm寄存器后的间隔时间,用来手动控制插入独立可调的延时,方便速度的适配。  详情 回复 发表于 2024-10-5 06:17
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-05-02 21:17:31
已绑定手机
已实名认证

110

主题

2223

回帖

5464

积分

版主

积分
5464
发表于 2024-10-5 06:17:35 | 显示全部楼层
hea*** 发表于 2024-10-4 23:22
PWM-DMA 驱动 WS2812彩灯@Ai8051U,最多1365个灯同时, 32K SRAM - BLDC/144MHz-PWM-硬件移相/45路PWM+3路CC ...

dma_pwma_itv是用来给dma过程中,每次改变pwm寄存器后的间隔时间,用来手动控制插入独立可调的延时,方便速度的适配。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

977

积分

高级会员

积分
977
发表于 2024-10-5 13:51:12 来自手机 | 显示全部楼层
王昱顺 发表于 2024-10-5 06:17
dma_pwma_itv是用来给dma过程中,每次改变pwm寄存器后的间隔时间,用来手动控制插入独立可调的延时,方便 ...

触发事件后等待这个间隔时间才写入寄存区?
或者,写入一次寄存器后,在间隔时间内忽略触发事件,过了间隔期,有事件触发则立即写寄存器。

点评

这个是内部电路操作的,测试不出来。一般PWMA-DMA都用更新事件触发,间隔时间写0。  详情 回复 发表于 2024-10-9 10:24
这个就不清楚了,等技术手册详细补充吧。 不过大概是用来插入固定的间隔时间的  详情 回复 发表于 2024-10-5 15:36
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-05-02 21:17:31
已绑定手机
已实名认证

110

主题

2223

回帖

5464

积分

版主

积分
5464
发表于 2024-10-5 15:36:16 | 显示全部楼层
hea*** 发表于 2024-10-5 13:51
触发事件后等待这个间隔时间才写入寄存区?
或者,写入一次寄存器后,在间隔时间内忽略触发事件,过了间 ...

这个就不清楚了,等技术手册详细补充吧。
不过大概是用来插入固定的间隔时间的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-10-9 10:24:26 | 显示全部楼层
hea*** 发表于 2024-10-5 13:51
触发事件后等待这个间隔时间才写入寄存区?
或者,写入一次寄存器后,在间隔时间内忽略触发事件,过了间 ...

这个是内部电路操作的,测试不出来。一般PWMA-DMA都用更新事件触发,间隔时间写0。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

977

积分

高级会员

积分
977
发表于 2024-10-9 12:17:08 来自手机 | 显示全部楼层
地址可以发一下吗?
两个通道,16位,应该怎么写?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

977

积分

高级会员

积分
977
发表于 2024-10-15 14:12:22 | 显示全部楼层
写个测试程序穷举,得到结果如下:
基地址DBA与实际占空比寄存器对应关系
0x0D       PWM1_CCR1H和PWM1_CCR1L
0x0E       PWM1_CCR2H和PWM1_CCR2L
0x0F       PWM1_CCR3H和PWM1_CCR3L
0x10       PWM1_CCR4H和PWM1_CCR4L

PWMA_DBL为写入通道数-1
为0时写一个通道,为1时写两个通道。。。

dsize为每个通道写入字节数-1
为0时写PWM1_CCRxL,为1时写2个字节,先写PWM1_CCR1H后写PWM1_CCR1L。

例如要DMA写通道1和通道2的16位占空比,则
PWMA_DBA   = 0x0D;
PWMA_DBL   = 0x01;
PWMA_DER   = 0x01;
PWMA_DMACR = 0x15;

缓冲区数据按照【CCR1H, CCR1L, CCR2H, CCR2L, CCR1H, CCR1L,,,,,,,,,,,,】排列。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-10-16 21:44:27 | 显示全部楼层

寄存器详细介绍:
截图202410162144087173.jpg
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 22:10 , Processed in 0.149179 second(s), 109 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表