学习目标:
1、了解CTU模块特点
2、使用MCAL配置CTU模块完成PWM通道触发ADC转换的功能
CTU模块详解:
1、触发源
如下图所示为可以触发CTU的外设/外部信号,实际上项目种最常用到的就是使用PWM通道去触发ADC转换,本例中也是实现的该功能。
2、CTU功能框图详解
总结来说就是, Sequential mode 模式下只有一个外部触发源是生效的,且只能给SU单元提交一个Tri事件;Triggered mode 模式下所有外部触发源都是生效的,一个control cycle内最多提交8个Tri事件。
比如,该周期内共计提交了4个Tri事件
对应MCAL配置如下:
3、ADC命令转换列表
ADC命令列表有两种模式
List execution in Streaming mode
List execution in parallel mode
在并行模式下,最多可以同时执行两个列表。. 为了避免在执行两个并行列表时出现错误,它们不应该同时包含两个adc的命令。因此,如果列表1有针对ADC A的命令,那么列表2应该只有针对ADCB的命令。 还要注意,如果一个列表使用了共享的模拟输入,那么另一个列表不应该使用它,以避免争用,从而产生错误。A.ADC双转换命令也不应该在并行模式下使用。
MCAL配置
1、ADC General中开启CTU相关配置,这里不做赘述
2、添加ADC硬件触发信号,配置 CtuHwUnit->Input Trigger时,需要绑定对应的信号,没啥特殊的,6个外设信号全加上就行了。
3、配置CTU硬件单元
4、配置触发TGS的外设信号
4、配置输入到SU单元的Tri事件
5、ADC命令列表配置
如上图所示,笔者配置了两个ADC命令列表,SU的Tri触发ADC命令列表时会从交替转换每一个列表,如果CTU设置为 Sequential mode 模式时,需要外设触发两次才能把整个命令列表转换完成。
6、FIFO的配置
笔者每一个命令列表的长度均小于8,所以ADC转换的数据均存储到了FIFO_0中,至于FIFO_1、2、3合适会用到就不太清楚了。
以上就是CTU相关的所有配置了,至于ADC的配置和NXP其它型号的配置基本上相同,在此不做赘述。
代码
使用CTU单元时,需要开启的中断资源,当然如果你使用platform进行中断管理,这部分可以跳过
CTU单元支持通过软件模拟,通过如下代码可以实现软件触发CTU转换
转换结果的读取,注意申请数组的类型,这里边包含了ADC单元、转换通道的相关信息。
学习产出:
OK,CTU的配置和代码实现就这些了