本帖最后由 JasonLee27 于 2020-7-2 16:26 编辑
软件环境:keil 5.23硬件环境:AC7801x 通用开发板
看到有网友关于电位器调LED的分享,并通过autoGen只需要一句代码就搞定,当时就提出通过DMA的方式可以不用写代码。这里多次试验后终于完成,特此分享一下
这里用到了5个模块(DMA在ADC中配置),配置了两个引脚,一个用于电位器AD输入,一个用于PWM输出控制LED。
CTU模块用于配置Timer0溢出触发ADC采样,这么做的原因是,如果ADC按1M 速率采样,那么写入PWM CHnV寄存器的频率太快,而PWM模块在不使用同步的情况下,要等上一次计数结束才能加载新值,所以这里通过Timer0触发ADC,并将Timer0设置为10ms周期,这样ADC就每10ms采一次,并写入到CHnV寄存器中。
ADC模块使用了IN8,使用Mode1(单通道单次采样)使能规则组DMA。DMA的配置如下,startAddress填写的PWM1的CH6V寄存器地址。这个是CH6的匹配值寄存器。
这里采用的是DMA的外设到内存的搬运模式,我们可以把CH6V就当作一个普通的内存地址来看(目前来看这个设想是成立的)。
一切配好后,生成代码,编译下载运行。效果杠杠的。
吐槽一下,生成的工程不能仿真,DMA配置的数据总是丢掉。@dengyonglei 有空的给看看
最后附上工程:
pwmout.rar
(1.5 MB)
|