DSP之信号采集

      信号采集类的外设包括采集模拟信号的模/数转换器和提供数字信号输入、输出功能的通用输入/输出接口。模/数转换器为DSP提供了多通道模拟/数字转换能力,通用输入、输出接口可以完成数字信号的采集,当其被设置为输出模式时,可以通过这些接口对其他设备进行控制。
1 模数转换器(ADC)
TMS320C5509内部集成了一个10位的连续逼近式ADC.
1.1 模数转换器结构和时序
      在数字信号处理器的具体应用中往往需要采集一些模拟信号量,如电池电压、面板旋钮输入值等,模数转换器就是用来将这些模拟量转化 为数字量来供 DSP 使用。 DSP 所提供的模数转换器一次转换可以在四路输入中任选一路进行采样,采样结果为十位,最高采样速率为 21.5kHz

DSP之信号采集_第1张图片

        模数转换器采用连续逼近式结构,在模数转换器内部用了三个可 编程分频器来灵活地产生用户需要的采样率。
        整个模数转换过程分为两个周期 —— 采样 / 保持周期及转换周 期,如下图所示。

DSP之信号采集_第2张图片

采样 / 保持周期是采样 / 保持电路采集模拟信号的时间,这个周期 大于或等于 40 μ s
转换周期是阻容比较网络在一次采样中完成逼近处理并输出 A/D 转换结果的时间,这需要 13 个转换时钟周期。内部转换时钟的最 大频率为 2MHz
 
模数转换主时钟:
ADC Clock = ( System Clock ) / ( SystemClkDiv + 1) ;
模数转换时钟:
ADC Conversion Clock =
      (ADC Clock) / (2 × (ConvRateDiv + 1))
模数转换时钟必须等于或小于 2 MHz
         模数采样 / 保持周期:
ADC Sample and Hold Period =
(1 / ( ADC Clock )) / (2 × ( ConvRateDiv + 1 + SampTimeDiv ))
模数采样 / 保持周期必须大于等于 40 μ s
        整个转化周期:
ADC Total Conversion Time =
       ( ADC Sample and Hold Period ) + (13 × (1 / ( ADC Conversion      Clock )))
      应当注意的是模数转换器不能工作于连续模式下,每次开始转换 前, DSP 必须将模数转换控制寄存器( ADCR )的 ADCStart 位置 1 ,来命令模数转换器开始转换。当开始转换后, DSP 必须通过查 询模数转换数据寄存器( ADDR )的 ADCBusy 位来确定采样是否 结束。当 ADCBusy 位从 1 变为 0 时标志转换完成,采样数据已经被 存放在数模转换器的数据寄存器中。
1.2 模数转换器的寄存器
模数转换器的寄存器包括控制寄存器( ADCR )、数据寄存器( ADDR )、时钟分频寄存器( ADCDR )和时钟控制寄存器( ADCCR
在模数转换开始之前需要对模数转换控制寄存器进行设置,选择所要采集的通道,并通过将 ADCStart 位设置为 1 命令转换开始。
 
接下来给出一个设置模数转换器的例子,在该例子中 DSP 系统主时钟为 144MHz
1 )首先对系统主时钟分频,产生模数转换器时钟,该时钟应尽 量运行在较低频率下,以降低功率消耗,在本例中模数转换器 时钟是通过对系统主时钟 36 分频产生的,则此时模数转换时钟 =144MHz/36=4MHz ,根据公式
            ADC Clock = ( System Clock ) / ( SystemClkDiv + 1)
              得出 SystemClkDiv=35
2 )对模数转换器时钟分频产生模数转换时钟,该时钟最大值为 2MHz ,为了获得 2MHz 的模数转换时钟,则需要对模数转换 器时钟 2 分频,由
         ADC 转换时钟 = ( ADC Clock ) / (2 × ( ConvRateDiv + 1))
          得出 ConvRateDiv = 0
          ADC 转换时间 = 13 × (1 / ADC Conversion Clock )
          ADC 转换时间 = 13 × (1 / (2 MHz)) = 6.5 μ s
3 )对采样和保持时间进行设置,这个值必须大于 40 μ s
                     ADC 采样和保持时间 =
                       (1 / (ADC Clock)) / (2 × (ConvRateDiv + 1 + SampTimeDiv))
                     = (1 / (4 MHz)) / (2 × (0 + 1 + SampTimeDiv))
                     = 250 ns × (2 × (0 + 1 + 79)) = 40 μ s
                     SampTimeDiv=79
4 )整个转换时间为 40 μ s 的采样和保持时间加上 6.5 μ s 的转换时 间等于 46.5 μ s ,采样率 =1/46.5 μ s =21.5 kHz
 
1.3使用方法及实例
          C55x 芯片支持库为模数转换器提供了相应的函数,应用这些函数 可以对模数转换器进行配置、读取采样数据。使用片支持函数与 直接用汇编语言对外设操作相比,片支持函数采用标准模式对外 围设备进行编程,而汇编语言对外设操作没有统一的模式,需要 对不同的外设采用不同的编程方式;片支持函数可以用 open close 函数控制外设资源,这样对操作多通道外设更加有利;片支 持函数采用完整的符号描述所有外设寄存器和寄存器字段,而不 是只针对特定的器件,更加有利于硬件升级时代码的继承性。
          使用模数转换器片支持库首先要在头文件中包含 csl_adc.h 件,接下来就可以调用模数转换库函数了。
用片支持库配置模数转换器有两种方式 —— 以寄存器为基础的配 置和以参数为基础的配置方式,首先介绍以寄存器为基础的配置 方式:
          以寄存器为基础的配置方式首先要声明 ADC 配置结构,具体 声明如下:
ADC_Config Config = {
0x0000, /* ADCR , 0 通道采样 */
0x0023, /* ADCCR SystemClkDiv=35 */
0x4F00  /* ADCDR SampTimeDiv=79 ConvRateDiv=0*/
}
接下来运行配置函数:
ADC_config(&Config);
以参数为基础的配置方式通过 ADC_setFreq 函数进行,该函数定 义如下:
void ADC_setFreq(
int cpuclkdiv, // 数值范围 0-255
int convratediv, // 数值范围 0-16
int sampletimediv); // 数值范围 0-255
接着给出调用的例子:
int i=35,j=0,k=79;
ADC_setFreq(i,j,k);
配置好模数转换器后就可以用 ADC_read 函数完成采样过程,下面 给出例子:
int channel=0,samplenumber=3;
Uint16 samplestorage[3]={0,0,0};
ADC_read(channel,samplestorage,samplenumber);
/* 对模拟输入 0 通道进行 3 次采样, */
/* 采样的结果放在 samplestorage 数组中 */
 
2 通用输入/输出端口GPIO
  1 GPIO口概述
        TMS320VC5510 提供了 8 个专门的通用输入 / 输出引脚 IO0 IO7 ,每个引脚的方向可以由 I/O 方向寄存器 IODIR 独立地配置, 引脚上的输入 / 输出逻辑状态由 I/O 数据寄存器 IODATA 反映,见下 表。
GPIO 方向寄存器 IODIR
   
   
   
15 8
Reserved

 

保留位
7 0
IO x DIR *
0
1
IOx 方向控制位
IOx 配置为输入
IOx 配置为输出
GPIO 数据寄存器 IODATA
     
   
   
15 8
Reserved

 

保留位
7 0
IOxD*
0
1
IOx 逻辑状态位
IOx 引脚上的信号为低电平
IOx 引脚上的信号为高电平
2 上电模式设定
C55x 系列 DSP 通用输入 / 输出端口的另一个作用是在 DSP 上电时通 过测试这些端口的高低电平来决定上电引导模式。
        TMS320VC5510 为例,其 IO1 IO3 引脚的另一个功能是 BOOTM0 BOOTM2 ,它们和 BOOTM3 引脚通过上下拉方式决 定如何引导,接下来给出了 C5510 的引导方式。
C5510 的引导方式
BOOTM[3:0]
0000
0001
McBSP0 口用 24 位地址采用 SPI 模式引导(串行 EEROM
0010 0111
保留
1000
1001
McBSP0 口用 16 位地址采用 SPI 模式引导(串行 EEROM
1010
通过并行 EMIF 接口从外部 8 比特异步存储器引导
1011
通过并行 EMIF 接口从外部 16 比特异步存储器引导
1100
通过并行 EMIF 接口从外部 32 比特异步存储器引导
1101
EHPI 口引导
1110
McBSP0 口采用 16 比特标准串行模式引导
1111
McBSP0 口采用 8 比特标准串行模式引导
下面给出了通过 GPIO 口设置上电方式的示意图。
DSP之信号采集_第3张图片
3 驱动程序开发
应用通用输入 / 输出口( GPIO )芯片支持函数需要在头文件包含 csl_gpio.h 文件。
          输入 / 输出口( GPIO )芯片支持函数包括读 GPIO 寄存器函数 和写 GPIO 寄存器函数,首先介绍读 GPIO 寄存器函数 GPIO_RGET() 。该函数有一个输入参数,这个参数是 IODIR 时读 GPIO 方向寄存器,参数为 IODATA 读取 GPIO 数据寄存器。下 面给出读取 GPIO 数据寄存器的例子:
int iodata;
iodata = GPIO_RGET IODATA ;
GPIO_RSET() 的功能是设置 GPIO 寄存器,该函数有两个参数, 第一个参数决定设置的那个寄存器,第二个参数为寄存器值。举 例如下:
GPIO_RSET IODIR, iodata ;
通用输入/输出GPIO的测试
GPIO 作为通用的输入 / 输出端口,其方向通过 I/O 方向寄存器 IODIR 可以设置,并且引脚上的电平通过 I/O 数据寄存器 IODATA 来反映,
CPU DMA 控制器可以在 I/O 空间访问这两个寄存器。
       
GPIO 的测试分为输入口测试和输出口测试两种。
1 .输入口测试
输入口测试步骤如下:
1 )通过 I/O 方向寄存器 IODIR 设置某一个引脚为输入方向;
2 )在已设置为输入方向的引脚上外加 LVTTL 信号;
3 DSP 访问 I/O 数据寄存器 IODATA ,查看引脚上的逻辑电平 ,与外加 LVTTL 电平进行比较,来检测输入口是否工作正常。
2 .输出口测试
输出口测试步骤如下:
1 )通过 I/O 方向寄存器 IODIR 设置某一个引脚为输出方向;
2 )在 I/O 数据寄存器 IODATA 上设置这个引脚的逻辑电平;
3 )测量引脚的电平,与设置的逻辑电平相比较来检测输出口是 否正常工作。

 

  

你可能感兴趣的:(移动开发)