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