MSPM0L1306开发板教程之ADC

描述

MSPM0L系列的ADC是一个12bit的SAR ADC,采样频率最高1.45MHz,最高可做到11.2位的实际有效位(ENOB)

 MSPM0L提供了外部的VREF+/-管脚,可以使用外部的参考电压源以获得最好的ADC性能,同时参考电压还可以选择VDD电压,或者内部的1.4/2.5V参考电压,需要注意的是,当选用内部参考电压的时候,ADC的采样率最大不能超过200KHz

ADC的采样模式分为两种,主要是采样时间的区别

自动采样:有两个采样时间窗口(Sample Window)定时器可以配置不同的采样时间给到采样通道选择,

dma

手动采样:采样时间由ADC寄存器的SC位的高电平时间决定,在这个模式下ADC不支持事件触发,只能使用软件触发采样

dma

ADC的转换模式有单次转换,序列转换,这个两个模式都支持重复模式,也就是连续采样

序列转换MSPM0L系列最大支持4个通道的配置,每一个通道都可以单独配置参考电压源和采样时间窗口,在数据手册中,可以查到每一个通道对应的映射信息

dma

dma

实操例程1

下面通过一个简单的ADC单通道单次采样来看下SYSCONFIG的配置,主要配置如下

dma

可以看到,ADC时钟用的是32MHz的ULPCLK,采样通道使用的是PA15,也就是9通道采样,

dma

使用的是自动采样模式,采样周期用的采样窗口0的配置,125us,参考电压使用的是VDDA电压,这里用的是3.3V,使用软件触发ADC,转换结果存储在结果寄存器0中(MEMRES0)

在中断设置中,设置为结果寄存器0装载中断

dma

在程序中,我写了一个串口发送ADC数据用的函数,用来检测ADC数据

dma

剩下的程序比较简单,需要注意的是,ADC单次转换完成后,需要重新使能ADC才可以继续下一次转换

dma

配套例程为ADC_UART,需要复制到SDK目录下运行

实操例程2

接下来配置一个使用DMA把ADC的转换数据搬运到指定的内存地址的程序

在ADC中使用DMA,有FIFO和非FIFO模式,主要的区别是结果存放的位置不一样,在非FIFO模式中,每个ADC通道的结果会存放在配置的结果寄存器MEMRESx中,而在FIFO模式中,结果寄存器会变成FIFO的缓冲区,MSPM0L系列最大支持4个结果寄存器,也就是最大支持4个FIFO缓冲区,这个模式下,读取结果需要从特定的FIFODAT寄存器中读取,这个寄存器会把两次转换的结果拼接在一起,所以FIFO模式下的DMA一次传输4个字节

下图是ADC传输结果数据的FIFO和非FIFO模式的总结

dma

非FIFO的DMA读写中,SAMPCNT必须为1,也就是一次结果触发一次DMA传输,以下是非FIFO的DMA配置

dma

而在FIFO模式的DMA读写中,由于FIFODAT寄存器是把两次结果拼接,所以在DMA的触发源需要选择MEM1的载入中断,而SAMPCNT的值根据实际需要填写

dma

例程采用连续单次采样模式,软件触发

dma

最后配置ADC中断为DMA传输完成中断

dma

在程序中我设置了一个10组结果的变量用于存放结果

dma

在使用DMA传输ADC的数据的时候需要注意,每次DMA完成传输后,需要在ADC的寄存器中重新使能DMAEN位,才可以再次触发DMA传输

配套例程为ADC_DMA

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
jf_50181452 2023-07-27
0 回复 举报
加油 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分