garfield

【原创】在 Kinetis K 系列上使用 DMA 模拟ADC 灵活扫描模式

0
阅读(3449)

    如上篇博文所讲,今天接着介绍kinetis的外设使用,今天研究以下ADC吧。

    Kinetis K 系列微控制器所提供的模数转换器(ADC)支持针对两条以上输入通道的嵌入式扫描模式。通道数由ADCx_SCA 和 ADCx_SCB 寄存器定义,且转换后,转换结果位于 ADCx_RA 和 ADCx_RB 寄存器中。Kinetis K 系列微控制器还可提供强大、复杂的 DMA 外设(具有多达16 条通道),该外设与 ADC 组合后可扫描两条以上通道。

介绍几个概念:

  在次循环中,每一个请求启动一个传输组。次循环可以基本单位的形式传输 1-4 GB。基本传输单位为 8位。因此,对于 16 位数据,1 个次循环支持 2 次传输。

   主循环可将多个次循环链接在一起。主循环可以修改源地址和目标地址;主循环完成之后,还支持循环缓冲区模式。中断请求可用来异步地结束主循环传输与半传输事件。半周期传输和全周期传输完成一起可使用双缓冲原则实施。

  链接是一种可以链接一个以上 DMA 通道的特殊 eDMA 功能。链接通道之后,您可以通过定义要转换的通道顺序使用单个请求启动一个以上的传输。该请求将启动 1 条 DMA 通道上的传输,当该通道上的传输完成后,启动下 1 条通道上的传输。可以为主循环和次循环完成单独定义通道链接。

ADC 灵活扫描模式流程

ADC 灵活扫描模式要求 1 个 ADC 转换器应具有 2 条 DMA 通道。优先级较高的 DMA 通道 1 将 ADCx_RA 寄存器中的 ADC 结果数据传输至 SRAM 中的存储缓冲区。优先级较低的 DMA 通道 0 将常量缓冲器中下一个 ADC 通道设置(输入多路复用器通道和单端/差分模式)存储在 SRAM 或 flash 存储器中。在灵活扫描模式下,将会执行以下步骤:

1. 转换完成标志 ADCxSC1A.COCO 请求通道 1 进行 DMA 传输。

2. 通道 1 传输完成后,将结果值传输至 SRAM 缓冲器。

3. 由于通道 1 和通道 0 相连,因此,通道 1 完成将请求在通道 0 上启动传输。

image

DMA设置:

1 通道优先级

DMA 通道优先级设置非常重要,因为在 ADC 软件触发模式下,写入 ADCn_SC1A 即可启动转换;因此,必须先读取结果数据,然后再写入下一个通道设置,因为写入 ADC 即会启动下一个转换。DMA 通道 1 用于将 ADC 结果数据传输至 SRAM 缓冲器。DMA 通道 0 用于更改 ADC 输入多路复用。

2 主循环和次循环链接

单次扫描模式(某些 ADC 通道仅需进行一次测量)应只使用次循环链接。如 DMA_TCDx_BITER_ELINKNO 和DMA_TCDx_CITER_ELINKNO 寄存器中的定义。持续扫描模式(某些 ADC 通道需要进行循环测量)需要使用主循环和次循环链接。如DMA_TCDx_BITER_ELINKNO、DMA_TCDx_CITER_ELINKNO 和 DMA_TCD1_CSR 寄存器中的定义。持续扫描模式必须使用主循环和次循环链接,因为主循环完成后不会生成次循环完成请求。

 

使用 Freescale TRW-K60N512 开发板和 IAR Embedded Workbench®版本 6.30.1.3142 开发一个程序并进行测试。

流程

· 每条通道将被测量四次,因此,SRAM 结果缓冲器大小为 3×4=12(实际缓冲器大小为 16,以便演示仅写入 12个数据字段)。

· ADC 在硬件触发器模式下工作,且 PDB 定时器用作触发源。

· 在持续模式下执行扫描;因此,主循环完成之后,将会重新加载结果缓冲器指针 address_0,并且从缓冲器起始地址再次启动转换。

image

 

好了,就讲到这里吧,代码各位先开发下试试。