YTM32的模数转换器ADC外设模块详解

简介ytm32的adc转换器外设最多可以集成32个输入通道,最高12b转换精度,最快可以支持2m sps的12b采样。adc转换器外设内部的主要结构,如图x所示,包括adc输入通道复用器、adc转换器、fifo等。
图x adc外设模块框图
ytm32b1me上集成了两个adc转换器,每个转换器实际仅对外开放了24个输入通道,并且adc0还在芯片内部绑定了若干采样点(所谓的external channel)。如图x所示。
图x adc在芯片内部绑定的采样信号
adc作为一个模拟外设,通常会使用两个时钟源:使用总线时钟驱动数字部分的电路,例如通过总线访问寄存器等;通过功能时钟驱动模拟部分的adc转换器工作。如图x所示。
图x adc外设的总线时钟和功能时钟
这里有两个要点:
通过ipc可以选择adc转换器的输入时钟源。实际上,adc的模拟电路部分也不一定能消化掉来自于ipc的时钟源,内部还专门设计的分频器。模拟电路对频率敏感,因此特定的电路也会要求能够处理的频率信号在一定范围内。ytm32的adc转换器最高可以使用16mhz的时钟信号作为adc转换器的时钟源。模拟和数字部分在交换数据时,需要处理同步(同支持高频率的定时器)。adc采样的时序,通常包含采样(sampling)和保持(holding)两个阶段,如图x所示。采样和保持在adc的时钟驱动下工作,时间越长,采样的结果越接近真实值,但速度也会变慢。若用户需要使用更快的采样速度,只要提高adc转换时钟和缩短采样保持阶段的时间即可,但产生的转换结果就可能损失一些准确度了。
图x adc转换中的采样保持时间
ytm32的adc外设,为了有效地使用电能,将adc转换器上电和掉电的控制接口也开放给用户了。要知道,adc作为一个模拟外设,是个耗电大户(另一个耗电大户是pll),如果在不需要执行adc转换任务的阶段停电,可能有效减少功耗,也能控制芯片的发热。但是,adc上电和下电过程,也都是需要一定时间的,上电过程需要等待供电稳定后才能启动adc转换任务,adc需要把正在执行的任务执行完毕,清理好工作现场之后才能顺利下电。这些时间,都将会在使用adc转换器的过程中由用户配置。
原理与机制adc转换器的上下电和省电模式mcu上电后,软件通过ipc模块,为adc外设模块开放了总线时钟供应,但此时,adc转换器的供电还没有加上,adc外设模块处于掉电模式(off state,power-down mode)。若要启用adc转换器,需由用户先设定adc_ctrl[aden]=1,开始为adc转换器供电,待t_startup(约2us)后,adc转换器供电稳定,硬件置寄存器位adc_ctrl[adrdy]=1,告知用户可以启动转换。此时请求adc开始转换,软件触发设定寄存器adc_ctrl[adstart]=1,才正式启动adc转换。如图x所示。
图x adc转换器的信号时序
注意,图x中的adstart信号在adrdy之前置位,同前文讲述等待adrdy置位后才拉起adstart不同。这展示了一种典型的情况:adstart只是请求不是命令,只有当adrdy置位之后,adc转换器才能启动。
adc_ctrl[addis]=1可以直接给adc转换器断电。但为了确保adc内部的状态机不会被打乱,建议先通过adc_ctrl[adstop]=1请求停止转换任务,在确保adc转换器已经不再执行任何转换任务后,再给adc转换器断电。
关于给adc转换器断电的操作,ytm32的adc外设还设计了一些“自动化”的供电管理机制,自动断电auto-off模式,对应寄存器开关adc_cfg0[autooff]。
默认未启动自动断电模式时,用户一为adc转换器建立稳定的供电后,若无人为停用,则对adc转换器持续供电。下次启动转换也不需要等上电稳定。若启用自动断电模式,则一旦adc转换器闲下来就自动断电,在下次转换任务的触发信号到来时可自动唤醒恢复供电。此时,每次启动转换任务,adc转换器都要等上电稳定(t_startup)后再启动转换。这个模式下,原本硬件反馈供电稳定的adc_ctrl[adrdy]标志位将不再起作用(置位)。启用自动断电模式后,执行每次转换任务之前,都需要重新等待供电稳定的时间t_startup,这无疑影响了adc的连续转换速率。但大多数情况下,应用对连续转换速率没有特别高的要求,使用启动断电模式可以在简化用户操作的前提下(不需要人工上电断电),有效降低adc转换器的动态功耗。
adc转换结果和fifoadc外设内部设计了一个32-bit x 16 的fifo,按照转换完成的顺序,依次存入转换完成的结果。用户从寄存器adc_fifo作为读fifo的入口,可以依次读出转换结果。
fifo中的数据单元包含转换结果对应的通道adc_fifo[chid]和转换数值adc_fifo[data],无论设定的转换分辨率(adc_cfg[res])是多少,数值固定右对齐的。如图x所示。
adc fifo中的转换结果
当fifo填满了未能及时读走的转换数据,adc外设设计了两种机制处理后来的数据,一种是overrun mode,另一个是wait mode:
overrun mode描述的是,当新的转换结果到来时,是覆盖fifo中最近一次转换结果,还是直接抛弃掉新的转换结果。由寄存器adc_cfg0[ovrmd]控制启用。wait mode描述的是,当fifo满的时候,直接给adc转换器断电(类似于auto-off模式)。只有当fifo有空位的时候,才能给adc转换器供电。由寄存器adc_cfg0[wait]控制启用。adc转换队列的工作模式adc的转换过程,是由多个单通道的转换任务串起来的转换队列,由寄存器字段adc_cfg0[seqlen]由触发信号驱动执行转换过程。ytm32的adc外设模块中,设计了多种触发机制,以不同的节奏执行转换队列中的转换任务。通过配置寄存器位adc_cfg0[discen]和adc_cfg0[cont],对应有single模式、continuou模式和discontinuous模式。
表x adc转换队列的工作模式
图x adc转换队列的工作模式
adc转换器的触发信号adc外设模块可以捕获软件触发和硬件触发信号(一个上升沿脉冲信号),以启动转换任务。触发信号无论是来自于软件触发还是硬件触发,对于启动转换的作用是完全相同的,但adc仅允许使用其中一种触发模式,由寄存器adc_cfg0[trigmd]选定。
当adc_cfg0[trigmd]=0,软件触发可由用户写寄存器adc_ctrl[adcstart]=1产生。当adc_cfg0[trigmd]=1,还需要设定寄存器adc_ctrl[adcstart]=1解锁硬件触发信号(同步),硬件触发的信号可以来自于芯片上的其它外设模块。硬件触发信号大多来自于tmu(trigger multiplexer module)或者ptu模块(programmable trigger unit),可以通过cim(chip integration module)模块的寄存器cim_ctrl[adcn_trig_sel]选择adc外设外部的触发信号源:
raw signal which from the ptu module (cim->ctrl[adcn_trig_sel]=0)signal from the tmu module and synchronized by bus clock (cim->ctrl[adcn_trig_sel]=1)signal from the tmu module and synchronized by function clock (cim->ctrl[adcn_trig_sel]=2)adc转换器的看门狗ytm32微控制器的adc外设设计了看门狗的功能,这个功能在同类的设计中,还有一个更直观的名字,“硬件自动比较”。意思是通过为采样转换结果设置一个高限adc_wdth[high]和低限adc_wdth[low]框起来的正常数值区间,每次adc执行转换完成后,硬件都自动将转换结果同预设的正常数值区间进行比较,当采样结果过高(高于高限)或者过低(低于底限),都会触发一个超出预设范围的事件(可以触发中断)。这个功能通常用于实现对传感器的监控。某些mcu上设计adc可以使用异步时钟在低功耗模式下继续存活,就会用到这个硬件自动判定超限的机制,只有当出现异常采样时,才唤醒cpu对环境做进一步的判断。
然而,当下的这款adc最多可以保存16个转换结果(在fifo中)和24个采样通道,但没有为16个转换结果或者24个采样通道分别安排上限值寄存器和下限值寄存器。 这里有个机制,通过寄存器adc_wdctrl[wdsgl]选择:
当adc_wdctrl[wdsgl]=0时,硬件比较的机制会作用于fifo的入口,任何通道的转换结果进入fifo时,都会被比较,有可能触发超事件。当adc_wdctrl[wdsgl]=1时,硬件自动比较会现定于某个指定的通道,通道号设置于寄存器字段adc_wdctrl[wdchsel]中。另外,还有控制位adc_wdth[thmd],可以设定在adc转换的结果是限定区域之内触发超限事件还是在限定区域之外。如图x所示。
图x 硬件自动比较的有效范围
中断事件和dmaadc转换器能够触发中断的事件,主要是面向转换任务和转换队列的执行转换任务完成的情况,adc外设甚至对adc转换器上电成功和采样阶段结束也设计中断事件。
adc的dma是基于fifo设计的。用户可以在寄存器adc_cfg0[wm]中设定产生dma触发信号的fifo有效数据数量的阈值,当fifo中已经填入的转换结果数量达到预设的阈值时,adc外设会向dmamux发出dma触发信号,预设的dma搬运任务将一次性从adc的fifo中搬运走预设数量(可以小于等于预设的数量阈值)的转换结果、
fifo的阈值事件是可以产生dma的触发信号的同时,也可以产生中断的触发信号。根据设计惯例,当同一个事件的dma和中断触发开关同时打开时,dma的优先级更高,中断信号不会发出。否则,如果在中断服务程序中将fifo中的数据读走了,给dma搬运的数据不够多,fifo就会产生下溢错。
应用要点(软件)ytmicro sdk中包含了ytm32的adc外设模块的驱动程序adc_driver,并提供了关于adc外设的样例工程,包括:adc、adc_dma、adc_all_channels等。
总结ytm32的手册对adc外设模块进行了基本的介绍,列写了adc外设模块开放给用户的资源,本文对ytm32的adc外设模块的功能进行演绎,更为细致地讲解了adc外设模块及各功能的运行机制,方便用户充分理解adc外设模块并结合应用利用好在adc中设计的硬件资源。同时,本文也是对一种adc外设模块的系统架构设计进行了较为细致的分析,推演了adc外设模块的设计方法,可以为从事芯片设计的系统架构设计师们在设计ip时提供参考。

AEC-Q102与AEC-Q101有什么区别?
试验桌对辐射骚扰试验测量结果的影响分析
了解芯片贴装热性能
苹果13promax什么时候发布 苹果13promax有什么颜色
金蝶并购加速进军 PLM 市场
YTM32的模数转换器ADC外设模块详解
河套IT WALK(总第73期):华为领跑5G通信,元宇宙掀起新一轮科技革命,谷歌让你用文字画画
C语言变量的存储类别有哪些详细资料介绍
SpaceX 首个商业载人航天任务飞船成功降落
智慧食堂助力社区服务,让人工智能为老年生活保驾护航
华为发布麒麟980,刷新六项世界纪录!
我国家电产业竞争优势明显,为出口增长奠定了坚实的基础
看完丰田章男的"5S办公桌",你会怎么做?
二极管具有单向导通性的原因
智慧城市哪一些趋势暂时不会改变
XenomatiX将在欧洲和美国部署新的6D道路扫描业务
如何选择传感器输出模式—电流输出还是电压输出?
空气净化器的独特设计可以满足不同用户的需求
WIFI的无线覆盖系统应该如何来设计
HDI的CAM制作方法大全