不中断的自动排序流程图如下:
一旦 转换启动(SOC)触发器 被排序器收到后,转换立即开始 。
SOC触发器载入在SEQCNTRn位 。在CHSELSEQn寄存器指定的通道已预先决定的顺序进行转换。每个转换结束后,SEQCNTRn位自动减少1。当SEQCNTRn达到0时
,将根据ADCTRL1寄存器的连续运行(CONT RUN)位状态,发生以下事情:
(1)如果CONT RUN位置1,转换排序自动再次启动(
SEQCNTRn重载MAXCONV1中的初始值,且SEQ1状态被置于CONV00)。
在这种情况下,必须确保在下一次转换排序之前读取结果寄存器。
在ADC模块向结果寄存器写入数据而用户却想从结果寄存器读取数据时,ADC的仲裁逻辑 确保结果寄存器不会崩溃。
(2)如果 CONT RUN位 没有被置位,则排序会停留在过去的状态(例如CONV06),并且SEQCNTRn继续保持0
值。
因为每次SEQCNTRn位达到0时,中断标志会被置1。如果需要,用户可使用ADCTRL2寄存器的RSTSEQn位,在中断服务程序(ISR)中手动复位排序器,以便下一次转换启动时,SEQCNTRn位可以重载MAXCONV1的初始值,且SEQ1状态被设置为CONV00。
这一特性在排序器的启动/停止操作中很有用,本例也可用于SEQ2的级联的16状态排序器SEQ。
7.2.3 排序器的启动/停止模式除不中断的自动排序模式外,任何一个排序器都可工作在启动/停止模式,在此模式,可实现和多个转换
/启动触发器时间上同步。这种模式和上例基本相同,
但是排序器完成一个转换序列之后,可以在没有复位到初始状态CONV00情况下,被重触发。因此当一个转换排序结束后,排序器停留在当前的转换状态。
ADCTRL1寄存器的连续运行位必须设置为0(禁止)。
例 排序器的启动/停止操作使用触发器1(下溢)启动3个自动转换(V1,V2,V3) 。
触发器1和触发器2时间间隔为25微妙,且由事件管理器A提供,如下图所示。本例只用了SEQ1。
注意,触发器1和2可以是事件管理器A(EVA)的转换启动(SOC)信号、外部引脚或软件。相同的触发器信号源要产生两次,以满足本实例双触发器的要求。
在这种情况下,MAX CONV1的值被设置为2,并且ADC模块的输入通道选择排序控制寄存器(CHSELSEQn)应置
1。如表7-4所示。
表7-4
位15-12 位11-8 位7-4 位3-0
70A3h V3 I3 I2 I1 CHSELSEQ1
70A4h x x V2 V1 CHSELSEQ2
70A5h x x x x CHSELSEQ3
70A6h x x x x CHSELSEQ4
复位和初始化之后,SEQ1等待一个触发源信号。第一个触发源到来之后,执行通道选择值为CONV00( I1 )、
CONV01(I2 )和CONV02(I 3 )的3个转换,然后,SEQ1
在当前状态等待另一个触发源信号。当第二个触发源到来后25为微秒,ADC模块开始另外3个转换,通道选择值为CONV03(V 1)、CONV04(V 2)和CONV05(V 3)。
在两种触发源的情况下,MAX CONV1的值被自动装入到
SEQ CNTV1中。如果第二个触发源信号到来时,要求转换的数目和第一个触发源时不一样,则用户必须
(在第二个触发源到来之前)通过软件改变MAX CONV1
的值,否则重新使用当前的MAX CONV1的值(初始载入的),改变MAX CONV1的值可以在适当的时候由中断服务程序(ISR)来完成。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-29489-37.html
面子上都过得去