瑞萨RA6M4系列DMAC和ADC的详细介绍(2)

描述

2.4 触发源

● 软件触发 

● 来自事件链接控制器(ELC)的同步触发器 

● 由外部触发引脚ADTRG0(单元0)和ADTRG1(单元1)异步触发

2.5 ADC转换时间

ADC时钟

ADC输入时钟ADCLK由PCLKC经过分频产生,最大值是四分频50MHz,PCLKA和PCLKC (ADCLK) 的分频比可以设置为 1:1, 2:1, 4:1, 8:1, 1:2, 1:4。

ADC转换时间

ADC允许的最大值频率值是50MHz,使用50 MHz的时候12-bit转换时间为0.4 μs。

2.6 数据寄存器

ADDRn寄存器是16位只读寄存器,用于存储AD转换结果。

以下条件决定了AD数据寄存器中的数据格式:

● AD数据寄存器格式选择位(ADCER.ADRFMT)的设置(左对齐或右对齐);

● AD转换精度 选择位(ADCER.ADPRC[1:0])中的设置(可选择12位、10位、8位。);

● 加法平均计数选择位(ADADC.ADC[2:0])的设置(1、2、3、4或16次);

● 设置平均模式启用位(ADADC.AVEE)(加法或平均)。

未选择AD转换值加法平均模式时:

表40.5显示了12位精度的位分配示例。

adc

点击可查看大图

选择AD转换值平均模式时:

当A/ D转换值加法指定2次或4次时,可选择A/D转换值平均模式。这样可以提高A/D转换的有效位。

选择AD转换值相加模式时:

对于12位、10位、8位精度,可以在A/D转换值相加模式中选择1、2、3或4次。在该转换精度下A/D转换结果以2bit扩展值存储在A/D数据寄存器中。对于12位精度,在A/D转换值相加模式中也可以选择16次。在AD转换值相加模式中,这些寄存器指示值,通过在特定通道上添加A/D转换值获得。A/D转换结果以4bit扩展值存储在A/D数据寄存器中。

2.7 电压转换

模拟电压经过ADC转换后,是一个12位的数字值,如果通过串口以16进制打印出来的话,可读性比较差,那么有时候我们就需要把数字电压转换成模拟电压,也可以跟实际的模拟电压(用万用表测)对比,看看转换是否准确。

设计原理图的时候会把ADC的输入电压范围设定在:0~3.3v,这时需要将采样的参考电压硬件VREFH0/VREFL0引脚分别接到VCC和VSS上,因为ADC是12位的,那么12位满量程对应的就是3.3V,12位满量程对应的数字值是:2^12。数值0对应的就是0V。如果转换后的数值为 X对应的模拟电压为Y,那么会有这么一个等式成立:2^12 / 3.3 = X / Y , Y = (3.3 * X ) / 2^12。这样便可以计算出对应采样的电压值了。

实现程序设计

3.1 硬件设计

如下图DEMO板上的ADC采样原理图P000端口连接在一个可调电位器上

adc

3.2 软件设计

1

新建工程

adcadc

如上图,1选择板上对应MCU型号,2处选择工程类型:e2 studio / IAR / Keil,然后默认下一步直到完成。

2

FSP配置

第一步选择并配置时钟,请确认板子上的外部时钟,当板子上的外部时钟为8M时,进行选择并按要求分配好对应的时钟。

adc

依次点击 “Stacks” -> “Pins”-> “Peripherals” ->“ADC0” 来配置通道AN000对应的引脚为P000。如下图所示:

adc

然后依次点击 “Stacks”  ->“New Stack” -> “Analog”  ->ADC-DMAC Integration(r_adc)” 来配置ADC模块。如下图所示:

adc

ADC的属性配置:

勾选“Input”  -> “Channel Scan Mask” -> “Channel 0” 通道0,并设置中断函数名及优先级。“Interrupts”  -> “Callback”  & “Scan End interrupt Priority” 

adc

DMAC的属性设置:

设置中断函数名及优先级。

“Callback” & “Transfer End Interrupt Priority” 

adc

3

程序实现

外设初始化:

● ADC初始化

adc

R_ADC_Open()为整个外设设置操作模式、触发源、中断优先级和配置。如果启用了中断,该函数将注册一个回调函数指针,以便在扫描完成时通知用户。

R_ADC_ScanCfg()配置ADC扫描参数,通道特定设置是在这个函数中设置的。

● DMA初始化

adc

R_DMAC_Open()初始化DMAC函数。

R_DMAC_Enable()使能DMAC中断。

中断处理函数:

adc

设置传输目的地址到DMA0_ADC0数据输入寄存器,然后开始数据传输。

adc

DMA传输完成,记录传输次数。

hal_entry入口函数:

adc

点击可查看大图

达到设定次数ADC_count再求平均值,当然DEMO也可以通过定时器进行更为精准的控制采样的间隔。

 

总结

当然DEMO还有更多要优化的地方,这里只学习FSP配置基础的功能样例,若有陈述不严谨之处,欢迎大家指正。谢谢!

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分