项目中需要使用dma+timer实现低成本pwm语音播放,CC2640可否实现
目前我做了一些尝试,没有达到预期效果:
GPT0B触发DMA向GPT0B匹配寄存器搬移音频数据,GPT0A为周期定时器频率为8k,DMA为ping-pong模式 16位数据模式,GPT0B为pwm输出频率187500hz。
我利用了两个buffer存储数据,先递增后递减。
CC2640工程为带TI-RTOS版本,debug断点发现中断中pingpong切换主辅配置都能进入
问题:抓取pwm波形发现递增的波形基本符合预期,递减的波形很乱,不是一次递减,另外还有有一段段长时间低电平,频率也不是187500了,低于这个数值,在62k左右。总体波形时间基本符合8k规律,即连续的增波形和杂乱的递减波形交替时,两端波形时间基本符合,也按8k频率进行变化。
反复尝试许多次都没有太大改进,请问是芯片不支持这种用法还是我哪边寄存器没配置好。
Viki Shi:
请参考CC26XX的PWM文档: software-dl.ti.com/…/_p_w_m_timer_c_c26_x_x_8h.html
注意limitation:
The PWM output can currently not be synchronized with other PWM outputsThe PWM driver does not support updating duty and period using DMA.When changing duty cycle there will be a period where the high level is either too short or too high since the timer match value is updated.
user3852962:
回复 Viki Shi:
你好,这个文档我看到了,他说的是固件库不支持这种方式.
我这边需要有这种应用,前面说的相关操作我是通过直接操作寄存器来实现的.
逻辑分析仪导出数据:
pingpong pwm.zip
逻辑分析仪截图:
图中时间间隔基本符合:8k定时器触发dma搬移128数据,连续那部分是搬移逐渐增大占空比数据(正常),另一段ping-pong是搬移占空比减小数据,出现杂乱波形.
请帮忙看一下,谢谢!