TMS320F28377学习笔记——通过定时器触发ADC连续采样

时间:2019-09-17
本文章向大家介绍TMS320F28377学习笔记——通过定时器触发ADC连续采样,主要包括TMS320F28377学习笔记——通过定时器触发ADC连续采样使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

作为TI的C2000系列最新产品的28377S(D),ADC模块是其核心的信号采集功能。28377的ADC是一个逐次逼近型(SAR)ADC,可选择分辨率为16位或12位。具体ADC特性如下图的数据手册所示:

 这次学习,我采用Timer定时器作为触发源来触发ADC在SOC0上的的连续转换。由上图可以看到,ADC支持的触发类型有:

  1. 软件触发
  2. 所有的EPWM-ADCSOCA或B
  3. GPIO XINT2
  4. CPU 定时器0/1/2(每个C28x内核)
  5. ADCINT1/2

所以,通过CPU的定时器来触发采样是可行的。下面来看ADC的模块框图:

 我们通过Timer触发ADC的SOC0转换序列对ADCIN0进行持续采样:采样方式为单端12位采样。

 接下来需要配置ADC的SOC采样序列,包括采样窗时间,转换的通道选择,触发源选择等:

 下面附上程序部分:

 1 /*配置ADC的转换模式、中断及触发源*/
 2 void ConfigureADC(void)
 3 {
 4     EALLOW;
 5     AdcaRegs.ADCCTL2.bit.PRESCALE = 6; //ADC时钟预分频:200M/4=50MHz
 6     AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, 
 7     ADC_SIGNALMODE_SINGLE); //配置ADCA为12位转换精度,单端模式
 8     AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADC中断脉冲位置发生在在转换结束时,在ADC结果锁存到结果寄存器之前的一个周期
 9     AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1; //内核中的所有模拟电路都通电
10     DELAY_US(1000); //delay for 1ms to allow ADC time to power up
11     EDIS;
12 
13     Uint16 acqps;
14 
15     if(ADC_RESOLUTION_12BIT == AdcaRegs.ADCCTL2.bit.RESOLUTION)
16         {
17             acqps = 14; //12位单端模式下采样时间最快75ns,ACQPS>=14,
18         }
19     else  //resolution is 16-bit
20         {
21             acqps = 63; //16位差分模式下采样时间最快320ns,ACQPS>=63
22         }
23 
24     EALLOW;
25     AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0;     //SOC0将转换ADCINA2
26     AdcaRegs.ADCSOC0CTL.bit.ACQPS = acqps; //设置采样窗时间
27     AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 2;   //SOC0触发源选择为CPU1 Timer1
28     AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0; //EOC0触发ADCINT1
29     AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;   //ADCINT1中断使能
30     AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //ADCINT1中断标志位清零
31     EDIS;
32 }

 可以看到,在ADCRESULT0寄存器中,程序正在持续采样中

原文地址:https://www.cnblogs.com/shengQiming/p/11531763.html