MSPM0L系列的ADC是一個12bit的SAR ADC,采樣頻率最高1.45MHz,最高可做到11.2位的實際有效位(ENOB)
MSPM0L提供了外部的VREF+/-管腳,可以使用外部的參考電壓源以獲得最好的ADC性能,同時參考電壓還可以選擇VDD電壓,或者內部的1.4/2.5V參考電壓,需要注意的是,當選用內部參考電壓的時候,ADC的采樣率最大不能超過200KHz
ADC的采樣模式分為兩種,主要是采樣時間的區別
自動采樣:有兩個采樣時間窗口(Sample Window)定時器可以配置不同的采樣時間給到采樣通道選擇,
手動采樣:采樣時間由ADC寄存器的SC位的高電平時間決定,在這個模式下ADC不支持事件觸發,只能使用軟件觸發采樣
ADC的轉換模式有單次轉換,序列轉換,這個兩個模式都支持重復模式,也就是連續采樣
序列轉換MSPM0L系列最大支持4個通道的配置,每一個通道都可以單獨配置參考電壓源和采樣時間窗口,在數據手冊中,可以查到每一個通道對應的映射信息
實操例程1
下面通過一個簡單的ADC單通道單次采樣來看下SYSCONFIG的配置,主要配置如下
可以看到,ADC時鐘用的是32MHz的ULPCLK,采樣通道使用的是PA15,也就是9通道采樣,
使用的是自動采樣模式,采樣周期用的采樣窗口0的配置,125us,參考電壓使用的是VDDA電壓,這里用的是3.3V,使用軟件觸發ADC,轉換結果存儲在結果寄存器0中(MEMRES0)
在中斷設置中,設置為結果寄存器0裝載中斷
在程序中,我寫了一個串口發送ADC數據用的函數,用來檢測ADC數據
剩下的程序比較簡單,需要注意的是,ADC單次轉換完成后,需要重新使能ADC才可以繼續下一次轉換
實操例程2
接下來配置一個使用DMA把ADC的轉換數據搬運到指定的內存地址的程序
在ADC中使用DMA,有FIFO和非FIFO模式,主要的區別是結果存放的位置不一樣,在非FIFO模式中,每個ADC通道的結果會存放在配置的結果寄存器MEMRESx中,而在FIFO模式中,結果寄存器會變成FIFO的緩沖區,MSPM0L系列最大支持4個結果寄存器,也就是最大支持4個FIFO緩沖區,這個模式下,讀取結果需要從特定的FIFODAT寄存器中讀取,這個寄存器會把兩次轉換的結果拼接在一起,所以FIFO模式下的DMA一次傳輸4個字節
下圖是ADC傳輸結果數據的FIFO和非FIFO模式的總結
非FIFO的DMA讀寫中,SAMPCNT必須為1,也就是一次結果觸發一次DMA傳輸,以下是非FIFO的DMA配置
而在FIFO模式的DMA讀寫中,由于FIFODAT寄存器是把兩次結果拼接,所以在DMA的觸發源需要選擇MEM1的載入中斷,而SAMPCNT的值根據實際需要填寫
例程采用連續單次采樣模式,軟件觸發
最后配置ADC中斷為DMA傳輸完成中斷
在程序中我設置了一個10組結果的變量用于存放結果
在使用DMA傳輸ADC的數據的時候需要注意,每次DMA完成傳輸后,需要在ADC的寄存器中重新使能DMAEN位,才可以再次觸發DMA傳輸
配套例程為ADC_DMA
-
接口
+關注
關注
33文章
8526瀏覽量
150861 -
SAR
+關注
關注
3文章
414瀏覽量
45901 -
adc
+關注
關注
98文章
6452瀏覽量
544147 -
dma
+關注
關注
3文章
559瀏覽量
100446 -
開發板
+關注
關注
25文章
4959瀏覽量
97214
原文標題:MSPM0L1306開發板教程8 - ADC
文章出處:【微信號:創易棧,微信公眾號:創易棧】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論