aurix中AD采样

原创 2015年07月06日 21:16:48

ADC的频率也是连接SPB频率的。
这里写图片描述
AD转换过程通过background 请求、Timer单元请求、外部请求三种来请求AD转换。如下:
这里写图片描述
这里写图片描述
而来自Backgroud的请求,只能是在没有任何一个AD group被占用时请求响应。其具有转换的最低优先级。

同时对于请求源的仲裁采用优先级的方式,而对中断优先级的处理有如下几种:
1、cancel-inject-repeat mode直接中断当前转换,高优先级抢占低优先级
2、wait-for-startmode等待当前AD转换完成后立即转换
3、wait-for-read mode如果结果寄存器没被读,则延迟等待读完后再AD转换。
而AD转换的方式有三种通道仲裁方式:
1、fixed channel conversion
2、Auto scan conversion
3、Channel sequence conversion
中断事件(也就是在如下各个阶段都可以触发事件给CPU或DMA):
Source events—-》转换序列排列完成后触发事件,可以用在建立新的转换顺序
Channel event—》指定通道转换完成后触发事件,中断后可以获取转换完的值
Result event—-》当结果寄存器中更新新值时在data reduction mode下触发事件
AD相关的时钟源
AD时钟基于SPB频率,设置GLOBCFG寄存器
这里写图片描述
由图可以看到,AD的时钟涉及两部分:
DIVA:模拟时钟(AD转换时钟,默认是20M)
DIVD:数字时钟(仲裁时钟,设置和SPB频率一致)
ADC模块还包含一些保护策略,防止adc的寄存器位发生不可预知的写访问。

对AD补偿的设置:
1、在GLOBCFG中设置了SUSL位,startup了calibration
2、需要检测查看对应AD group中的ARBCFG寄存器中CAL位是否被激活,激活表明calibration开启成功。
通过ACCPROT0/1对一些寄存器的写访问权限可以进行控制。
对于AD Group 的设置:
首先是请求源,包括如下几种请求源:
这里写图片描述
通过GxARBPR寄存器可以设置:
三个请求源的优先级(数字越大优先级越高)、是否加入仲裁round、启动AD转换的模式。
这里写图片描述
关于请求源仲裁时间:
The duration of an arbitration slot is configurable tSlot = (DIVD+1) / fADC.
The duration of an arbitration round, therefore, is tARB = 4 × tSlot (or 8×tSlot).
上图显示的仲裁时间,就是在一个仲裁周期中划分仲裁时间,可以分为4、8、12个等分,每个等分的时间也会缩短。

请求方式:
Queue source
scan source
其中scan 方式有分为group-specify和global
在Request queue中,仲裁器按照优先级中仲裁的序列组成队列,如果在cancel-inject-repeat mode模式下直接被中断,原来未转换完的并不会被丢弃,而是backup等待下一次转换。
开启触发方式分为软件触发和外部触发

在配置时,需要按想要的顺序将请求源加入队列,
然后根据需求设置Gate 和trigger的模式和源
这里写图片描述
设置触发源和触发方式
在Request scan中,则是从按照通道号逐个扫描。
首先scan mode下,存在的请求源包括group request source 和background source。
这里写图片描述
AD中结果寄存器:
这里写图片描述
在GxRESx寄存器中放结果值

关于执行请求转换的条件:
Queue 下,如果要能转换,可以选择不判断Gate input(GxQSR0寄存器),queue0值直接pending就转化,也可以加个Gate input条件。根据mode设置来进行

IfxVadc_GatingMode_disabled   = 0,  /**< \brief Gating is disabled, no conversion request are issued */
    IfxVadc_GatingMode_always     = 1,  /**< \brief Conversion request is issued if at least 1 conversion pending bit is set */
    IfxVadc_GatingMode_gatingHigh = 2,  /**< \brief Conversion request is issued if at least 1 conversion pending bit is set and the gating signal is high */
    IfxVadc_GatingMode_gatingLow  = 3   /**< \brief Conversion request is issued if at least 1 conversion pending bit is set and the gating signal is low */

等于说在转换着加了一个与逻辑,由Gate控制,也可以选择不控制。
而Gate input的来源参考下表:
这里写图片描述
其中在Backgroud scan模式下也有这样的Gate
同时触发源则是按照如上的列表:

默认没有使用Gate,只有触发源输入,触发源见下表,常用pwm作为触发源进行ad采样这里写图片描述
初始化channel
转换模式:
1、标准转换模式
2、Fast compare mode
对于最终值的处理包括:
FIFO:关于结果寄存器的使用,可以一一对应channel,也可以用结果寄存器组成FIFO。
通过设置GxRCRy.FEN = 01B,将相邻的结果寄存器联系起来
累加、滤波、限幅检测三种处理
需要滤波处理,修改如下寄存器:
这里写图片描述
边界限幅检测,在大于或小于边界时会产生flag的变化。
这里写图片描述
AD数据对齐方式就如下面的方式:
这里写图片描述
配置好channel将channel加入到queue中,然后等待触发事件

也可以通过
IFX_INLINE void IfxVadc_startQueue(Ifx_VADC_G *group)
{
group->QMR0.B.TREV = 1;
}
手动触发产生软件事件。

关于AD中断的设置,代码中演示了转换完后触发中断的函数,制定中断触发的CPU。

AD相关的事件触发,每个AD 有4个group-specific service request output signals和4个shared service request output signals。
能触发cpu中断或DMA:
有如下的三个典型事件能产生AD事件触发中断:
Request source events(请求源完成请求转换的序列排序)
Channel events(转换完成触发)
Result events(结果寄存器值更新触发)
一般只用后两个
因为每个AD规定的典型事件都需要通过某个service request output signal去连接SRN,
所以还需要按照下面的表,设置对应service request output signal接口的寄存器SRC
这里写图片描述
并行采样的同步转换:
确保相关通道的采样阶段同步开启。
需要定义一个AD为master 一个为Slave,同步采样触发。
这里写图片描述
Master的配置:
1、需要将仲裁器一直打开(GxARBCFG (x = 0 - 3).ARBM = 0)
2、需要设置GxSYNCTR寄存器中STSEL位,设置master和slave.
3、同时AD master在收到请求某个通道的时候,slave也会被请求。注意对应channel中GxCHCTRy的SYNC要被置1。
这里写图片描述
等间隔采样:
设置GxQCTRL0 (x = 0 - 3) 或者GxASCTRL (x = 0 -3) )中的TMEN位,开启等间隔模式,出现如下效果:
这里写图片描述
如何用结果寄存器组成FIFO?
只能配置序号连续的结果寄存器把他们组合起来,如下图:
这里写图片描述
从上图可以看到去result值是从index序号较小的reg读,至于存放的顺序,则
主要就是设置结果寄存器的控制寄存器GxRCRy,配置对应的结果寄存器。
主要就是GxRCRy寄存器中的FEN位

相关文章推荐

aurix编译环境

aurix作为infineon全新系列的32位单片机,采用tricore架构,相对价格低廉,打算广泛应用在汽车、工业等领域。 目前infineon也在从audo系列逐渐往aurix系列进行转变。 ...

aurix编译环境

aurix作为infineon全新系列的32位单片机,采用tricore架构,相对价格低廉,打算广泛应用在汽车、工业等领域。 目前infineon也在从audo系列逐渐往aurix系列进行转变。 ...

调试休眠和唤醒

原文链接http://blog.csdn.net/skywalkzf/article/details/7913887

【原创】zstack - 协议栈程序精简日志- AD 采样试验

【原创】zstack - 协议栈程序精简日志- AD 采样试验闲来无事测试zstack协议栈的记录。zstack协议栈中已经有完整的AD采样接口api,位于hal_adc文件中,提供的接口如下:/* ...

模拟信号采样与AD转换

1 著名的Nyquist采样定理 尽管大家都知道,但还是提一提。大牛奥本海姆的《信号与系统》中是这样描述的: Let x(t) be a band-limited signal with X(j...

AD采样实现AC计量之算法实现与流程

网上的资料还是很少的,把半个月的成果给大家分享吧,先上代码,以后有空对其分析。 measure.c /*********************************************...

关于Stm32定时器+ADC+DMA进行AD采样的实现

Stm32的ADC有DMA功能这都毋庸置疑,也是我们用的最多的!然而,如果我们要对一个信号(比如脉搏信号)进行定时采样(也就是隔一段时间,比如说2ms),有三种方法: 1、使用定时器中断每隔一定...

开两个中断,一个周期5ms,另一个周期10s;5毫秒中断中采样AD按键,根据不同的电压让不同的LED灯闪烁;10s中断让一个LED灯每20s闪烁一次

原任务是“开两个中断,一个周期5ms,另一个周期10s;5毫秒中断中采样AD按键,根据不同的电压让不同的LED灯闪烁;10s中断让一个LED灯每20s闪烁一次。“但是至今我对于时间的gannianre...

AD采样的软件滤波

转载地址:http://blog.sina.com.cn/s/blog_4a367bf5010091sl.html 今天看到了一篇介绍软件滤波的文章,感觉很有用。在读取AD采样值后,可以使用...

TQ2440 AD采样数据滤波处理

上次用到了AD转换芯片TLC2543,采样的数据有时候偶尔会有毛刺和噪声,没有打算用硬件滤波的方法,所以参考了很多软件滤波的方案,针对自己设计的系统,决定采用滑动加权滤波的方法。    优点:相比限...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:aurix中AD采样
举报原因:
原因补充:

(最多只允许输入30个字)