介紹
客戶在初次使用e2 studio開發(fā)程序的時候不知道如何使用IDE,本文以RA6T2為例子,詳細地介紹了在一個新建的空程序中,通過配置實現(xiàn)ADC使用SH采樣。
本文使用的e2 studio版本是Version: 2021-10 (21.10.0),fsp版本是3.6.0。
在e2 studio中,按如下配置新建一個空程序:
這里寫的是項目名稱,可以自己取相應(yīng)的名稱。
上下滑動查看更多
點擊configuration.xml文件打開配置界面。
首先需要設(shè)置ADC的時鐘模塊,點擊Clocks調(diào)出時鐘配置界面,在ADC采集數(shù)據(jù)的時候為ADC提供時鐘源。在RA6T2中,可以將ADC的時鐘源配置成PCLKA、PCLKC、GPT定時器。這里將ADC時鐘源配置成PLCKC,使用外部時鐘XTAL 10MHZ,再通過PLL倍頻為240MHz,Clock Src將主時鐘設(shè)置為PLL時鐘,ICLK、PCLKA~PCLKD、FCLK使用的都是主時鐘,PCLKC將主時鐘4分頻變?yōu)?0MHz,ADC將PCLKC作為時鐘源,所以ADC的時鐘源是60MHz。
從下圖框圖可知,在RA6T2中AN012~AN028是普通的ADC采集,AN000~AN005可以使用PGA(可編程增益放大器)和SH(采樣保持電路),還可以用作PGA輸出。
在configuration.xml圖形界面中點擊Pins,調(diào)出引腳配置界面,可以看到左邊紅框有三個ADC的配置選項可以選擇,Analog:ADC12是普通的ADC采集,Analog:ADC12(PGA)是ADC采集后通過可編程增益放大器輸入,Analog:ADC12(PGAOUT)是ADC采集后通過可編程增益放大器輸出,本文程序不需要用到PGA,所以選擇Analog:ADC12,Operation Mode選擇Custom自定義,ADTRG0和ADTRG1表示可以使用外部引腳觸發(fā)ADC采集,AN000~AN005表示使能了五個ADC采集通道。
在configuration.xml圖形界面中點擊Stacks,調(diào)出驅(qū)動配置界面,點擊紅色框內(nèi)的New Stacks創(chuàng)建新的驅(qū)動程序,在彈出的對話框中點擊第一行Analog模擬模塊,可以看到界面中彈出三個選項,這里使用的ADC,所以點擊ADC Driver on r_adc_b生成ADC的數(shù)模轉(zhuǎn)換驅(qū)動。第二項Comparator,High-Speed(r_acmphs)是高速模擬比較器,將輸入電壓與參考電壓比較,并根據(jù)轉(zhuǎn)換結(jié)果提供數(shù)字輸出;第三項DAC(r_dac)是生成模數(shù)轉(zhuǎn)換驅(qū)動的。
點擊g_adc0 ADC Driver on r_adc_b和右上角設(shè)置圖標(biāo),可以打開ADC的屬性配置界面。
General是常規(guī)配置;
Clock Configuration配置ADC的時鐘;
Interrupts配置ADC的中斷;
Sample and Hold 配置ADC采樣保持電路;
Programmable Gain Amplifier 是配置ADC的可編程放大器;
User Offset Table是配置ADC采集偏移量;
User Gain Table是配置ADC 采集增益量;
Limiter Clipping是設(shè)置ADC采集電壓的上限和下限;
Virtual Channels使能ADC的各種采集配置;
Scan Groups是配置ADC的通道屬性,在Virtual Channels中可以選擇ADC采集通道。
在General的ADC通用參數(shù)設(shè)置中,在Mode模式下將ADC0和ADC1設(shè)置為循環(huán)采樣模式(另一個模式是單個采樣);在ADC Successive Approximation Time中設(shè)置逐次逼近采樣時間為5個時鐘周期(這個時間可以設(shè)置為3~15個時鐘周期);在Synchronous Operation使能了ADC0同步采集,同步采集周期為100;在Calibration校準(zhǔn)中,ADC采集時間為95個周期,轉(zhuǎn)換時間為5個周期,保持時間為5個周期;采樣狀態(tài)表使用默認配置,ADC模塊名稱為g_adc0。
下圖是ADC的采樣時間流程,第一步是斷開檢測電路時間;第二步是采樣時間;第三步是逐次逼近時間。
在Clock Configuration中Source選擇PCLKC為ADC的時鐘源,Divider分頻系數(shù)為1(部分頻),因為配置的PCLKC時鐘為60M,所以ADC的時鐘為60M,在Sample and Hold中將采樣保持電路勾選上,其余的參數(shù)使用默認即可。
在Virtual Channels的ADC虛擬通道配置中,在RA6T2系列的R7FA6T2BD3CFP芯片中,一共有36個虛擬通道可以用。Virtual Channels 0通道0的配置如下圖所示,Scan Group采樣組關(guān)聯(lián)到Scan Group 0;Channel Select關(guān)聯(lián)到AN000通道上,在本芯片下,AN000對應(yīng)的是PA00引腳,采樣狀態(tài)轉(zhuǎn)換表選擇的是 Entry 0;采樣分辨率選擇12 bit,其他配置不使能。
在Scan Groups采樣通道組第0組中,Voltage Selection自診斷電壓選擇Self-Diagnosis Mode 1,因為本程序使用軟件觸發(fā),所以不需要使用外部觸發(fā)、ELC事件觸發(fā)、GPT定時器觸發(fā);Enable選擇Enable,使能Scan Groups 0 通道;Converter Selection轉(zhuǎn)換器選擇ADC0;觸發(fā)延遲選擇0;打開ADC采集結(jié)束中斷;打開FIFO和FIFO中斷。
點擊Generate Project Content 生成代碼。
在ra->fsp->src->r_adc_b->r_adc_b.c文件中的g_adc_on_adc_b結(jié)構(gòu)體中可以看到自動生成的函數(shù),其中比較常用的是:
R_ADC_B_Open,這個函數(shù)是用來初始化ADC的,例如中斷優(yōu)先級、觸發(fā)源、ADC模式、回調(diào)函數(shù)指針都是在這個函數(shù)中配置的;
R_ADC_B_ScanCfg是來配置ADC的掃描參數(shù)的,選擇通道以及設(shè)置通道屬性,配置ADC通道采集所使用的引腳;
R_ADC_B_ScanGroupStart是啟動ADC掃描的函數(shù);
R_ADC_B_Close是關(guān)閉ADC掃描的函數(shù);
R_ADC_B_Read是ADC讀取數(shù)據(jù)的函數(shù);
R_ADC_B_CallbackSet是ADC的回調(diào)函數(shù),ADC的各種狀態(tài)位都可以從這個函數(shù)獲取。
在r_adc_b.c中可以看到這些API函數(shù)的代碼,鼠標(biāo)放在R_ADC_B_Open上,按住ctrl+鼠標(biāo)左鍵可以定位到R_ADC_B_Open函數(shù)的相關(guān)代碼。
在src->hal_entry.c中可以寫一個簡單的ADC采集程序,如下圖所示。
fsp_err_t err參數(shù)是用來獲取API函數(shù)執(zhí)行后的返回值的;
uint16_t g_adc_b_data使用來接收ADC的采集數(shù)據(jù);
g_adc0_ctrl、g_adc0_cfg、g_adc0_scan_cfg這個三個參數(shù)為結(jié)構(gòu)體,里面存儲的是我們在圖形界面中配置的各種參數(shù),為代碼生成工具自動的代碼。在ra_gen下的hal_data.c文件中可以看到這些參數(shù)的配置。
首先需要初始化ADC,然后配置ADC通道信息,最后啟動ADC采集。
err = R_ADC_B_Open (&g_adc0_ctrl,? &g_adc0_cfg);
err = R_ADC_B_ScanCfg (&g_adc0_ctrl, &g_adc0_scan_cfg);
err = R_ADC_B_ScanGroupStart (&g_adc0_ctrl, ADC_GROUP_MASK_ALL);
以上三步err的返回值都是FSP_SUCCESS后,就可以調(diào)用R_ADC_B_Read獲取ADC的采集數(shù)據(jù),這里獲取了ADC0的通道0、通道2、通道4的數(shù)據(jù)。
err = R_ADC_B_Read (&g_adc0_ctrl, ADC_CHANNEL_0, &g_adc_b_data);
err = R_ADC_B_Read (&g_adc0_ctrl, ADC_CHANNEL_2, &g_adc_b_data);
err = R_ADC_B_Read (&g_adc0_ctrl, ADC_CHANNEL_4, &g_adc_b_data);
結(jié)論
通過上面的設(shè)置實現(xiàn)了RA6T2的ADC使用SH采樣。
審核編輯:湯梓紅
評論