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