ADC簡介
ADC控制器的功能極其強大。其包含但不限于以下內(nèi)容
- 支持分辨率為12位的轉換,采樣周期支持廣范圍的配置
- 自校準,自帶校準功能以糾正數(shù)據(jù)偏移
- 基本模式,支持多種模式,不同模式可組合使用滿足多種應用
- 不同優(yōu)先權的通道,普通通道與搶占通道具備不同的優(yōu)先權
- 多種獨立的觸發(fā)源,包括TMR、EXINT、軟觸發(fā)等多種觸發(fā)選擇
- 數(shù)據(jù)后級處理,包括數(shù)據(jù)的對齊,搶占通道偏移量等多種處理
- 過采樣器,普通及搶占通道均支持過采樣
- 電壓監(jiān)測,通過對轉換結果的判定來實現(xiàn)電壓監(jiān)測
- 中斷及狀態(tài)事件,具備多種標志指示ADC狀態(tài),且某些標志還具備中斷功能
圖1. ADC1框圖
ADC功能解析
時鐘及狀態(tài)
一、功能介紹ADC的時鐘分為數(shù)字時鐘與模擬時鐘。其統(tǒng)一通過CRM_APB2EN的ADCxEN位使能。
- 數(shù)字時鐘:即PCLK2,經(jīng)HCLK分頻而來,提供給數(shù)字部分使用。
- 模擬時鐘:即ADCCLK,經(jīng)ADC預分頻器分頻而來,提供給模擬部分使用。
二、軟件接口
ADC時鐘使能,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:crm_periph_clock_enable(CRM_ADC1_PERIPH_CLOCK,TRUE);當ADC時鐘使能后,軟件即可開始進行ADC的一些相關配置。ADC預分頻設定,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:adc_clock_div_set(ADC_DIV_8);此項實際用于設定ADC模擬部分的時鐘,其由HCLK分頻而來,故ADCCLK=HCLK/div注意:1)模擬部分的ADCCLK由HCLK分頻而來,其不可大于28MHz;2)ADC數(shù)字部分掛在PCLK2上,為避免同步問題,ADCCLK頻率不可高于PCLK2;3)ADC模擬部分電源由ADC_CTRL2的ADCEN,其不受ADC的時鐘狀態(tài)影響。典型的,如果系統(tǒng)需要進入深度睡眠模式,如果不關閉ADCEN,此時ADC模擬器件將還會消耗電流;4)ADC上電有一段等待時間tSTAB,再執(zhí)行后續(xù)觸發(fā)等操作。
采樣轉換
一、功能介紹ADC可設定1.5、7.5、13.5、28.5、41.5、55.5、71.5、239.5個采樣周期。ADC對通道數(shù)據(jù)的獲取由采樣和轉換兩個部分組成。采樣先于轉換執(zhí)行,采樣期間內(nèi)選通需要轉換的通道,外部電壓對ADC內(nèi)部采樣電容充電,將持續(xù)執(zhí)行設定的采樣周期長度時間的充電。采樣結束后就會自動開始轉換,ADC采用逐次逼近的轉換方式,可有效保障轉換數(shù)據(jù)的準確性。此轉換方式需要12.5個ADCCLK的轉換時間來完成單通道的轉換,再結合數(shù)據(jù)處理,因此單個通道的整體轉換時間即單通道單次轉換時間(ADCCLK的周期)=采樣周期+12.5示例:CSPTx選擇7.5周期,一次轉換需要7.5+12.5=20個ADCCLK周期。
二、軟件接口
ADC采樣周期設定,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:adc_ordinary_channel_set(ADC1,ADC_CHANNEL_4,1,ADC_SAMPLETIME_13_5);adc_preempt_channel_set(ADC1,ADC_CHANNEL_7,1,ADC_SAMPLETIME_41_5);注意:不同通道可設定不同的采樣周期;當采用中斷或輪詢方式獲取普通通道數(shù)據(jù),為避免數(shù)據(jù)讀取不及時,建議合理增大采樣周期;為避免充電不充分導致轉換數(shù)據(jù)不準確,應用允許的條件下,建議合理增大采樣周期。
自較準
一、功能介紹ADC具備自校準能力,軟件可以執(zhí)行自校準命令,透過自校準可以計算出一個校準值。不需要軟件干預,ADC會自動將該校準值反饋回ADC內(nèi)部補償ADC基礎偏差,以保障轉換數(shù)據(jù)的準確性。自校準的軟件流程如下:
- 使能ADC
- 執(zhí)行初始化校準命令并等待初始化校準完成
- 執(zhí)行校準命令并等待校準完成
- 執(zhí)行完上述流程后,即可開始進行ADC的觸發(fā)轉換
二、軟件接口
自校準方式,其軟件實例如下:adc_enable(ADC1,TRUE);adc_calibration_init(ADC1);while(adc_calibration_init_status_get(ADC1));adc_calibration_start(ADC1);while(adc_calibration_status_get(ADC1));注意:校準值的存放不會置位CCE標志,不會產(chǎn)生中斷或DMA請求。
基本模式
一、功能介紹序列模式ADC支持序列模式設定,開啟序列模式后,每次觸發(fā)將序列中的通道依序轉換一次。用戶于ADC_OSQx配置普通通道序列,普通通道從OSN1開始轉換;于ADC_PSQ配置搶占通道序列,搶占通道是從PSNx開始轉換(x=4-PCLEN)。搶占通道轉換示例:ADC_PSQ[21:0]=10 00110 00101 00100 00011,此時掃描轉換順序為CH4、CH5、CH6,而不是CH3、CH4、CH5。圖2. 序列模式
反復模式ADC支持反復模式設定,開啟反復模式后,當檢測到觸發(fā)后就即會反復不斷地轉換普通通道組。圖3. 反復模式+搶占自動轉換模式
分割模式ADC 支持分割模式設定。對于普通通道組,分割模式可依據(jù)設定將通道組分割成長度較小的子組別。一次觸發(fā)將轉換子組別中的所有通道。每次觸發(fā)會依序選擇不同的子組別進行轉換。對于搶占通道組,分割模式直接以通道為單位進行分割,一次觸發(fā)將轉換單個通道。每次觸發(fā)會依序選擇不同的通道進行轉換。圖4. 分割模式
搶占自動轉換模式ADC 支持搶占自動轉換模式設定,開啟搶占自動轉換模式后,當普通通道轉換完成后,搶占通道將自動接續(xù)著轉換,而不需要進行搶占通道的觸發(fā)。圖5. 搶占自動轉換模式
二、軟件接口
ADC序列模式和反復模式設定,由ADC基礎部分結構體配置完成,其軟件實例如下:adc_base_struct.sequence_mode=TRUE;adc_base_struct.repeat_mode=TRUE;adc_base_config(ADC1,&adc_base_struct);注意:序列模式對普通及搶占通道組均有效;反復模式僅對普通通道組有效,搶占通道組不具備反復模式功能;反復模式與分割模式不可共用;反復模式可與搶占自動轉換模式共用,將實現(xiàn)依次反復的轉換普通通道序列及搶占通道序列。ADC分割模式設定,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:/*set ordinary partitioned mode channel count*/adc_ordinary_part_count_set(ADC1,1);/*enable the partitioned mode on ordinary channel*/adc_ordinary_part_mode_enable(ADC1,TRUE);/*enable the partitioned mode on preempt channel*/adc_preempt_part_mode_enable(ADC1,TRUE);注意:分割模式對普通及搶占通道組均有效;搶占通道組分割模式子組別長度不可設定,其固定為單個通道;分割模式與反復模式、搶占自動轉換模式不可共用。搶占自動轉換模式設定,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:/*preempt group automatic conversion after ordinary group*/adc_preempt_auto_mode_enable(ADC1,TRUE);注意:搶占自動轉換模式僅對搶占通道組有效;搶占自動轉換模式與分割模式不可共用。
不同優(yōu)先權的通道
一、功能介紹ADC設計有具備不同優(yōu)先權的兩種通道組:普通通道組與搶占通道組。普通通道組通常用于執(zhí)行常規(guī)的數(shù)據(jù)轉換。支持最多配置16個通道,轉換將按照設定的通道順序依次進行。其不具備搶占能力。搶占通道組通常用于執(zhí)行相對緊急的數(shù)據(jù)轉換。支持最多配置4個通道,轉換將按照設定的通道順序依次進行。其具備搶占能力,即搶占通道組的轉換可以打斷正在執(zhí)行的普通通道轉換,待搶占通道組轉換完畢后再恢復執(zhí)行被打斷的普通通道組轉換。
二、軟件接口
普通通道組設定,軟件包括通道數(shù)量、通道數(shù)值、轉換順序、采樣周期的設定,其軟件實例如下:/*config ordinary channel count*/adc_base_struct.ordinary_channel_length=3;adc_base_config(ADC1,&adc_base_struct);/*config ordinary channel*/adc_ordinary_channel_set(ADC1,ADC_CHANNEL_4,1,ADC_SAMPLETIME_41_5);adc_ordinary_channel_set(ADC1,ADC_CHANNEL_5,2,ADC_SAMPLETIME_41_5);adc_ordinary_channel_set(ADC1,ADC_CHANNEL_6,3,ADC_SAMPLETIME_41_5);搶占通道組設定,軟件包括通道數(shù)量、通道數(shù)值、轉換順序、采樣周期的設定,其軟件實例如下:/*config preempt channel count*/adc_preempt_channel_length_set(ADC1,3);/*config preempt channel*/adc_preempt_channel_set(ADC1,ADC_CHANNEL_7,1,ADC_SAMPLETIME_41_5);adc_preempt_channel_set(ADC1,ADC_CHANNEL_8,2,ADC_SAMPLETIME_41_5);adc_preempt_channel_set(ADC1,ADC_CHANNEL_9,3,ADC_SAMPLETIME_41_5);注意:不同通道可以設定不同的采樣周期;同一通道可以被反復編排進轉換序列進行轉換;序列模式下,普通通道組從OSN1開始轉換,搶占通道組是從PSNx開始轉換(x=4-PCLEN)。
多種獨立的觸發(fā)源
一、功能介紹ADC支持多種觸發(fā)源,包含軟件寫寄存器觸發(fā)(ADC_CTRL2的OCSWTRG與PCSWTRG)以及外部觸發(fā)。外部觸發(fā)包含定時器觸發(fā)與引腳觸發(fā)。普通通道還有一種特殊的觸發(fā)來源,即重復使能ADCEN觸發(fā)轉換。此種情況下不需要使能ADC控制寄存器2(ADC_CTRL2)的OCTEN也可導致普通通道響應轉換。注意:定時器觸發(fā)、引腳觸發(fā)、軟件觸發(fā)均需要使能觸發(fā)模式(ADC_CTRL2的OCTEN與PCTEN)。表1. 觸發(fā)源
二、軟件接口
軟件寫寄存器觸發(fā)設定,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:/*config ordinary trigger source*/adc_ordinary_conversion_trigger_set(ADC1,ADC12_ORDINARY_TRIG_SOFTWARE,TRUE);/*config preempt trigger source*/adc_preempt_conversion_trigger_set(ADC1,ADC12_PREEMPT_TRIG_SOFTWARE,TRUE);在ADC使能tSTAB后,軟件即可執(zhí)行adc_ordinary_software_trigger_enable(ADC1,TRUE);/adc_preempt_software_trigger_enable(ADC1,TRUE);來進行普通/搶占通道的觸發(fā)。外部觸發(fā)設定,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:/*config ordinary trigger source*/adc_ordinary_conversion_trigger_set(ADC12_ORDINARY_TRIG_TMR1CH1,TRUE);/*config preempt trigger source*/adc_preempt_conversion_trigger_set(ADC12_PREEMPT_TRIG_TMR3CH4,TRUE);在ADC使能tSTAB后,TMR1CH1的上升沿事件就會觸發(fā)普通通道組轉換,TMR3CH4的上升沿事件就會觸發(fā)搶占通道組轉換。注意:觸發(fā)間隔需要大于通道組轉換的時間,轉換期間發(fā)生的相同通道組的觸發(fā)會被忽略;搶占通道轉換優(yōu)先權最高,不管當前是否有普通通道轉換,其觸發(fā)后就會立即開始響應轉換;普通觸發(fā)具備記憶功能,在搶占轉換時執(zhí)行普通觸發(fā),該觸發(fā)會被記錄并在搶占轉換完畢后響應。
數(shù)據(jù)后級處理
一、功能介紹ADC具備專有的數(shù)據(jù)寄存器,普通通道轉換完成后數(shù)據(jù)存儲于普通數(shù)據(jù)寄存器(ADC_ODT),搶占通道轉換完成后數(shù)據(jù)存儲于搶占數(shù)據(jù)寄存器x(ADC_PDTx)。數(shù)據(jù)寄存器內(nèi)存儲的是經(jīng)過處理后的數(shù)據(jù)。該處理包括數(shù)據(jù)對齊、搶占數(shù)據(jù)偏移。數(shù)據(jù)對齊分左對齊和右對齊,以半字為基準擺放,如下圖6。搶占數(shù)據(jù)偏移搶占通道的數(shù)據(jù)會減去搶占數(shù)據(jù)偏移寄存器x(ADC_PCDTOx)內(nèi)的偏移量,因此搶占通道數(shù)據(jù)有可能為負值,以SIGN作為符號。圖6. 數(shù)據(jù)內(nèi)容處理
二、軟件接口
數(shù)據(jù)對齊設定,軟件由ADC基礎部分結構體配置完成,其軟件實例如下:adc_base_struct.data_align=ADC_RIGHT_ALIGNMENT;adc_base_config(ADC1,&adc_base_struct);搶占數(shù)據(jù)偏移設定,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:/*set preempt channel's conversion value offset*/adc_preempt_offset_value_set(ADC1,ADC_PREEMPT_CHANNEL_1,0x000);adc_preempt_offset_value_set(ADC1,ADC_PREEMPT_CHANNEL_2,0x111);adc_preempt_offset_value_set(ADC1,ADC_PREEMPT_CHANNEL_3,0x202);adc_preempt_offset_value_set(ADC1,ADC_PREEMPT_CHANNEL_4,0x123);
過采樣器
一、功能介紹ADC具備過采樣功能。一次過采樣是透過轉換多次相同通道,累加轉換數(shù)據(jù)后作平均實現(xiàn)的。
- 由ADC_OVSP的OSRSEL選擇過采樣率,此位用來定義過采樣倍數(shù);
- 由ADC_OVSP的OSSSEL選擇過采樣移位,此位用來定義平均系數(shù)。
若平均后數(shù)據(jù)大于16位,只取靠右16位數(shù)據(jù),放入16位數(shù)據(jù)寄存器。使用過采樣時,忽視數(shù)據(jù)對齊及搶占數(shù)據(jù)偏移的設定,數(shù)據(jù)一律靠右擺放。表2. 最大累加數(shù)據(jù)與過采樣倍數(shù)及位移系數(shù)關系
普通通道過采樣被打斷后的恢復方式普通通道過采樣中途被搶占通道轉換打斷后的恢復方式由OOSRSEL設定
- OOSRSEL=0:接續(xù)模式。保留已累加的數(shù)據(jù),再次開始轉換時將從打斷處轉換;
- OOSRSEL=1:重轉模式。累加的數(shù)據(jù)被清空,再次開始轉換時重新開始該通道的過采樣轉換。
圖7. 普通過采樣被打斷后的恢復方式
普通通道過采樣觸發(fā)模式普通通道過采樣的觸發(fā)模式由OOSTREN設定
- OOSTREN=0:關閉觸發(fā)模式。通道的所有過采樣轉換僅需一次觸發(fā);
- OOSTREN=1:開啟觸發(fā)模式。通道的每個過采樣轉換均需進行觸發(fā)。
此模式下,中途被搶占通道觸發(fā)打斷后,須重新觸發(fā)普通通道才會恢復轉換普通通道過采樣。圖8. 普通過采樣觸發(fā)模式
搶占通道過采樣搶占過采樣可與普通過采樣同時使用,也可分別使用。搶占過采樣不影響到普通過采樣的各種模式。圖9. 搶占自動轉換下的過采樣模式
二、軟件接口過采樣率、過采樣移位及過采樣使能設定,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:/*set oversampling ratio and shift*/adc_oversample_ratio_shift_set(ADC1,ADC_OVERSAMPLE_RATIO_8,ADC_OVERSAMPLE_SHIFT_3);/*enable ordinary oversampling*/adc_ordinary_oversample_enable(ADC1,TRUE);
/*enable preempt oversampling*/
adc_preempt_oversample_enable(ADC1,TRUE);
普通通道過采樣被打斷后的恢復方式設定,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:
/*set ordinary oversample restart mode*/adc_ordinary_oversample_restart_set(ADC1, ADC_OVERSAMPLE_CONTINUE);普通通道過采樣觸發(fā)模式設定,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:/*disable ordinary oversampling trigger mode*/adc_ordinary_oversample_trig_enable(ADC1, FALSE);
電壓監(jiān)測
一、功能介紹ADC具備電壓監(jiān)測功能。用以監(jiān)控輸入電壓與設定閾值的關系。當轉換結果大于高邊界ADC_VMHB[11:0]寄存器或是小于低邊界ADC_VMLB[11:0]寄存器時,電壓監(jiān)測超出標志VMOR會置起。透過VMSGEN選擇對單一通道或是所有通道監(jiān)測。對單一通道監(jiān)測的話,由VMCSEL配置通道。
二、軟件接口
監(jiān)測單一通道,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:/*config voltage_monitoring*/adc_voltage_monitor_threshold_value_set(ADC1,0x100,0x000);adc_voltage_monitor_single_channel_select(ADC1,ADC_CHANNEL_5);adc_voltage_monitor_enable(ADC1,ADC_VMONITOR_SINGLE_ORDINARY_PREEMPT);監(jiān)測所有通道,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:/*config voltage_monitoring*/adc_voltage_monitor_threshold_value_set(ADC1,0x100,0x000);adc_voltage_monitor_enable(ADC1,ADC_VMONITOR_ALL_ORDINARY_PREEMPT);注意:電壓監(jiān)測一律以轉換的原始數(shù)據(jù)與12位邊界寄存器做比較,無視搶占偏移量與數(shù)據(jù)對齊的設定;若使用過采樣器,則是以ADC_VMHB[15:0]與ADC_VMLB[15:0]完整的16位寄存器與過采樣數(shù)據(jù)作比較。
中斷及狀態(tài)事件
一、功能介紹ADC含有多種中斷及狀態(tài)標志。應用需要結合這些標志進行程序設計。
- 普通通道轉換開始標志(OCCS)指示普通通道轉換開始,由軟件對其自身寫零清除,無產(chǎn)生中斷能力。
- 搶占通道轉換開始標志(PCCS)指示搶占通道轉換開始,由軟件對其自身寫零清除,無產(chǎn)生中斷能力。
- 搶占通道組轉換結束標志(PCCE)指示搶占通道組轉換完成,由軟件對其自身寫零清除,有產(chǎn)生中斷能力。在搶占通道組轉換完成后置位,通常應用使用此標志來讀取搶占通道組的轉換數(shù)據(jù)。
- 通道轉換結束標志(CCE)指示通道序列轉換完成,由軟件對其自身寫零或讀ODT寄存器清除,有產(chǎn)生中斷能力。在普通/搶占通道序列轉換完成后置位,應用可使用此標志來讀取普通/搶占通道的轉換數(shù)據(jù)。
注意:普通通道數(shù)據(jù)寄存器只有一個,CCE標志只會在序列轉換完畢時置位,在多通道應用中,若通過查詢CCE狀態(tài)獲取數(shù)據(jù)的話,每次只能獲取序列的最后一個通道數(shù)據(jù)而造成數(shù)據(jù)丟失。因此普通通道多通道數(shù)據(jù)必須使用DMA方式獲取。DMA讀取轉換數(shù)據(jù)會同步清除CCE標志。
- 電壓監(jiān)測超出范圍標志(VMOR)指示通道電壓超出設定閾值,由軟件對其自身寫零清除,有產(chǎn)生中斷能力。在ADC的通道轉換數(shù)據(jù)超過設定閾值后置位,通常應用使用此標志來監(jiān)控通道電壓。
二、軟件接口
中斷使能設定,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:/*enable adc preempt channels conversion end interrupt*/adc_interrupt_enable(ADC1,ADC_PCCE_INT,TRUE);標志狀態(tài)獲取,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:if(adc_flag_get(ADC1,ADC_VMOR_FLAG)!=RESET)標志狀態(tài)清除,軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:adc_flag_clear(ADC1,ADC_PCCS_FLAG);
多種轉換數(shù)據(jù)的獲取方式
一、功能介紹
ADC具備多種轉換數(shù)據(jù)的獲取方式。不同通道類型可支持的數(shù)據(jù)獲取方式不同。
- CPU讀取搶占通道數(shù)據(jù)搶占通道不具備DMA能力,因此不管什么組合模式,搶占通道數(shù)據(jù)均由CPU讀取搶占數(shù)據(jù)寄存器x(ADC_PDTx)獲得。
- CPU讀取普通通道數(shù)據(jù)(單通道)這種方式只適用于普通通道數(shù)量為1的情況。軟件設置ADC_CTRL1的CCEIEN位使能通道轉換結束中斷,普通通道數(shù)據(jù)由CPU讀取普通通道數(shù)據(jù)寄存器(ADC_ODT)獲得。
- DMA讀取普通通道數(shù)據(jù)普通通道數(shù)據(jù)存儲于ADC自己獨立的數(shù)據(jù)寄存器中。軟件設置OCDMAEN位讓每次普通數(shù)據(jù)寄存器更新時產(chǎn)生DMA請求,DMA在每次收到DMA請求時讀取轉換數(shù)據(jù)。
二、軟件接口
CPU讀取搶占通道數(shù)據(jù),軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:if(adc_flag_get(ADC1,ADC_PCCE_FLAG)!=RESET){adc_flag_clear(ADC1,ADC_PCCE_FLAG);adc1_preempt_valuetab[preempt_conversion_count][0]=adc_preempt_conversion_data_get(ADC1,ADC_PREEMPT_CHANNEL_1);adc1_preempt_valuetab[preempt_conversion_count][1]=adc_preempt_conversion_data_get(ADC1,ADC_PREEMPT_CHANNEL_2);adc1_preempt_valuetab[preempt_conversion_count][2]=adc_preempt_conversion_data_get(ADC1,ADC_PREEMPT_CHANNEL_3);preempt_conversion_count++;}CPU讀取普通通道數(shù)據(jù),軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:while(adc_flag_get(ADC1,ADC_CCE_FLAG)==RESET);*(p_adc1_ordinary++)=adc_ordinary_conversion_data_get(ADC1);DMA讀取普通通道數(shù)據(jù),軟件由單獨的函數(shù)接口實現(xiàn),其軟件實例如下:/*enable dma mode*/adc_dma_mode_enable(ADC1,TRUE);dma_flexible_config(DMA1,FLEX_CHANNEL1,DMA_FLEXIBLE_ADC1);dma_default_para_init(&dma_init_struct);dma_init_struct.buffer_size=3;dma_init_struct.direction=DMA_DIR_PERIPHERAL_TO_MEMORY;…dma_init(DMA1_CHANNEL1,&dma_init_struct);dma_channel_enable(DMA1_CHANNEL1,TRUE);注意:使用CPU讀取普通轉換數(shù)據(jù)時,為避免數(shù)據(jù)讀取不及時,通道采樣周期需要足夠大。
ADC配置解析
以下對ADC的配置流程及數(shù)據(jù)獲取方法進行說明。
ADC配置流程
ADC的配置一般包括如下內(nèi)容
- 外部觸發(fā)源配置ADC外部觸發(fā)源有TMR、EXINT或軟件觸發(fā),其配置無特殊性,參考普通的TMR或EXINT配置即可。
注意:此處僅是觸發(fā)源的配置,觸發(fā)源的使能需在ADC全部配置完畢后才可進行。
- DMA配置使能ADC普通通道轉換數(shù)據(jù)可通過DMA傳輸,若應用需要DMA傳輸時,需提前進行DMA的初始化配置,其配置無特殊性,參考普通的DMA配置即可。
- 開啟ADC數(shù)字時鐘開啟ADC數(shù)字時鐘,允許進行相關功能配置。
- ADC分頻設定ADC模擬部分的時鐘,其由HCLK分頻而來,可設定2/3/4/5/6/8/12/16中的任意一種分頻。
- 內(nèi)部溫度傳感器及Vintrv(非必需)使能內(nèi)部溫度傳感器及內(nèi)部參考電壓,其分別連接到ADC1的CH16和CH17。
- ADC基礎部分結構體配置包括序列模式、反復模式、數(shù)據(jù)對齊、普通轉換序列長度。序列模式不論普通還是搶占組,只要配置有多個通道,就需要開啟序列模式。反復模式若應用需要周期性的觸發(fā)轉換時,就需要關閉反復模式,不然周期性的觸發(fā)將變得無效。當應用不想周期性的觸發(fā),而期望單次觸發(fā)后就不停的轉換設定通道組時需開啟反復模式。數(shù)據(jù)對齊設定轉換數(shù)據(jù)靠右或是靠左對齊放置于數(shù)據(jù)寄存器。普通轉換序列長度可設定1~16中的任何一個長度,指示單個普通序列包含的通道個數(shù),需與實際普通通道序列個數(shù)一致。
- 普通通道配置包含通道配置、觸發(fā)配置、數(shù)據(jù)傳輸方式。通道配置由轉換順序、通道值、采樣周期的設定組成。其中不同順序可配置相同通道值。觸發(fā)配置選擇普通通道的觸發(fā)源。數(shù)據(jù)傳輸方式可設定CPU或DMA傳輸轉換數(shù)據(jù)。
- 搶占通道配置包含通道個數(shù)、通道配置、觸發(fā)配置。通道個數(shù)可設定1~4中的任何一個長度,指示單個搶占序列包含的通道個數(shù),需與實際搶占通道序列個數(shù)一致。通道配置由轉換順序、通道值、采樣周期的設定組成。其中不同順序可配置相同通道值。觸發(fā)配置設置搶占通道的觸發(fā)源。
- 特殊模式配置(非必需)分割模式包括每次觸發(fā)轉換的普通通道個數(shù)、普通通道分割模式使能、搶占通道分割模式使能。搶占自動轉換模式用于設定普通組轉換結束后的搶占通道組自動轉換使能。
- 中斷配置使能對應中斷,包括通道轉換結束中斷、搶占通道組轉換結束中斷、電壓檢測超過范圍中斷中的一個或多個。
- ADC上電使能ADC讓ADC上電,由于上電需要穩(wěn)定時間,因此ADC上電后需等待tSTAB后才可進行后續(xù)動作。
- ADC校準為保障ADC轉換數(shù)據(jù)準確,在ADC上電后需進行校準。其包含:A/D初始化校準、等待初始化校準完成、A/D校準、等待校準完成。
至此,ADC的初始化配置就算全部完成。隨后,可通過軟件或使能硬件觸發(fā)源進行觸發(fā)轉換。
ADC數(shù)據(jù)獲取方法
ADC支持多種數(shù)據(jù)獲取方法,通常可概括為如下幾種
- CPU獲取搶占通道數(shù)據(jù)搶占通道數(shù)據(jù)不具備DMA能力,只能透過CPU獲取。推薦使用中斷獲取,方法如下1) 搶占通道組轉換結束中斷使能;
- 2) 搶占通道組轉換結束中斷函數(shù)內(nèi)將轉換數(shù)據(jù)緩存進數(shù)組內(nèi);3) 其他應用邏輯內(nèi)透過數(shù)組內(nèi)的數(shù)據(jù)進行數(shù)據(jù)的后續(xù)算法處理。
- CPU讀取普通通道數(shù)據(jù)AT32F405/402 CPU方式讀取普通通道數(shù)據(jù)僅支持普通通道數(shù)為1的情形。為保障數(shù)據(jù)讀取的實時性,同樣推薦使用中斷獲取,方法如下:
- 1) 通道轉換結束中斷使能;
- 2) 通道組轉換結束中斷函數(shù)內(nèi)將轉換數(shù)據(jù)緩存進數(shù)組內(nèi);
- 3) 其他應用邏輯內(nèi)透過數(shù)組內(nèi)的數(shù)據(jù)進行數(shù)據(jù)的后續(xù)算法處理。
- DMA讀取普通通道數(shù)據(jù)普通通道數(shù)據(jù)具備DMA能力。為避免軟件耗時,可直接采用DMA讀取轉換數(shù)據(jù),方法如下
- 1) 初始化并使能DMA;2) 使能ADC的DMA模式;
- 3) 在DMA傳輸完成中斷函數(shù)內(nèi)獲取DMA的buffer數(shù)據(jù);
- 4) 其他應用邏輯內(nèi)透過buffer數(shù)據(jù)進行數(shù)據(jù)的后續(xù)算法處理。
-
adc
+關注
關注
98文章
6514瀏覽量
545049 -
雅特力
+關注
關注
0文章
160瀏覽量
8070 -
AT32
+關注
關注
1文章
115瀏覽量
2112
發(fā)布評論請先 登錄
相關推薦
評論