介绍
客户在初次使用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采样。
审核编辑:汤梓红
评论
查看更多