TI中文支持网
TI专业的中文技术问题搜集分享网站

LAUNCHXL-F28027 ADC采样不进入中断服务函数

板子是官方的LAUNCHKL-F28027,用CCS直接打开Controlsuite中的ADC例程,\controlSUITE\development_kits\C2000_LaunchPad\f2802x_examples\adc_soc,在中断服务函数中放置断点后运行,不会进入中断。怀疑板子不能进入中断调试,在中断服务函数里写点亮LED的函数,仍然不能进入中断点亮LED。烧写的位置在RAM和FLASH都不行。例程一点没改,怀疑例程有问题,不知道有没有遇到相同情况的朋友?请高手指教

mangui zhang:

工程是ADC的吗     中断是什么中断呢 

看看中断的触发条件是什么      是不是外部触发

板子是官方的LAUNCHKL-F28027,用CCS直接打开Controlsuite中的ADC例程,\controlSUITE\development_kits\C2000_LaunchPad\f2802x_examples\adc_soc,在中断服务函数中放置断点后运行,不会进入中断。怀疑板子不能进入中断调试,在中断服务函数里写点亮LED的函数,仍然不能进入中断点亮LED。烧写的位置在RAM和FLASH都不行。例程一点没改,怀疑例程有问题,不知道有没有遇到相同情况的朋友?请高手指教

mangui zhang:

不好意思   标题没看    下面的资料供参考

 

ADC使用技巧

 

TMS320x2802x, 2803x使用同样的ADC模块,它们有以下功能:

ü      内建双采样保持电路的12位ADC

ü      同时采样及连续采样

ü      从0 V到3.3V的输入范围,或按VREFHI/VREFLO比例

ü      与系统时钟一致,不需要分频

ü      F28027 LaunchPad 有13个通道,多路复用输入

ü      16个SOC可对ADC灵活配置

ü      16个可单独寻址的转换结果寄存器

ü      多种转换触发源(软件触发、PWM触发、外部中断触发、定时器触发、ADCINT1/2触发)

ü      9个中断处理入口

 

一、SOC原理

F28027的ADC与其它基于序列的ADC不一样,它是基于SOC的。SOC的配置灵活多样,它可以单独地配置通道、触发源、采样时间等,多个SOC也可以配置到同一个通道、同一源触发、同一采样时间等;它可单个通道的单次采样,可连续采样、双通道同时采样。ADC的触发也可以由软件实现。

如果在有CLA的芯片(如F2803x)中使用时,由于SOC与CLA的TASK相联系,因此需要注意CLA的程序的入口问题。

SOC的配置是通过ADCSOCxCTL寄存器完成的。

二、ADC寄存器配置关系

由于F28系列的CPU中ADC配置非常灵活,带来了方便的同时,也容易产生混淆。下图是对容易搞混淆的几个寄存器的关系所作的说明:

SOCx

l         Software

l         Timers interrupts

l         XINT2 SOC

l         ePWM1-8 SOCA、B

 

AD转换

EOCx

ADCSOCxCTL配置SOCx

SOCx与EOCx是对应的

ADCRESULTx

INTSELxNy

ADCRESULTn

与ADCINTn对应

 

三、优先级问题

1、由SOCPRIORITY设置的优先级,为高优先级。

2、优先循环(Round Robin)

在一系列的SOC中,它们首尾相接,形成一个圆,并朝着SOC0、SOC、……的固定方向循环,与正在转换的SOC最近的下一个SOC的优先级最高。

这种方法很适用于电源、电机控制,因为需要有次序地处理。

 

四、同时采样

同时采样是在A及B通道中进行的。由硬件结构可见,只能设置一个A通道及一个B通道同时采样。

F28系列的ADC的也规定,偶数SOC及下一个奇数SOC可以同时采样。如,SOC0、SOC1可以同时采样,SOC6、SOC7可以同时采样。

同时采样对的触发源的任意一个均可以触发同时采样偶。

同时采样后,A通道先转换,B通道后转换。

 

五、ADC校准

一般使用TI提供的(*Device_cal)();,将TI预先存储在OTP中的ADC校准数据拷贝到ADCREFSEL和ADCOFFTRIM寄存器中。

 

六、ADC的参考源

F28027提供了内部的带隙参考源,也可以由VREFHI/VREFLO引脚接入外部的参考源。由ADCCTL1寄存器的内外部参考选择位选择。

 

七、示例

 

1、打开ADC时钟:

   SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;       // ADC

 

2、初始化ADC

       (*Device_cal)();

   

AdcRegs.ADCCTL1.bit.ADCBGPWD  = 1;      // Power ADC BG

    AdcRegs.ADCCTL1.bit.ADCREFPWD = 1;      // Power reference

    AdcRegs.ADCCTL1.bit.ADCPWDN   = 1;      // Power ADC

    AdcRegs.ADCCTL1.bit.ADCENABLE = 1;      // Enable ADC

    AdcRegs.ADCCTL1.bit.ADCREFSEL = 0;      // Select interal BG

3、配置中断

    AdcRegs.INTSEL3N4.bit.INT3E     = 1;       // for PWM2A

    AdcRegs.INTSEL3N4.bit.INT3SEL   = 3;       // EOC3

    AdcRegs.INTSEL3N4.bit.INT3CONT  = 1;

4、配置SOC

    AdcRegs.SOCPRICTL.all       = 0;       // SOC0 is first SOC

    AdcRegs.ADCSAMPLEMODE.all   = 0x1B;    // Simultaneous sampling enable For SOC0,2,6,8

    AdcRegs.ADCINTSOCSEL1.all   = 0;       // Determined by the ADCSOCxCTL

    AdcRegs.ADCINTSOCSEL2.all   = 0;       // Determined by the ADCSOCxCTL

   

    AdcRegs.ADCSOCFRC1.all      = 0;

   

    //   trigger source

    AdcRegs.ADCSOC0CTL.bit.ACQPS    = 6;   // Sample window is 7 cycles

    AdcRegs.ADCSOC0CTL.bit.TRIGSEL  = 0x0d;    // ePWM5A, ADCSOCA

    AdcRegs.ADCSOC0CTL.bit.CHSEL    = 2;   // ADCINA2  — current

板子是官方的LAUNCHKL-F28027,用CCS直接打开Controlsuite中的ADC例程,\controlSUITE\development_kits\C2000_LaunchPad\f2802x_examples\adc_soc,在中断服务函数中放置断点后运行,不会进入中断。怀疑板子不能进入中断调试,在中断服务函数里写点亮LED的函数,仍然不能进入中断点亮LED。烧写的位置在RAM和FLASH都不行。例程一点没改,怀疑例程有问题,不知道有没有遇到相同情况的朋友?请高手指教

Shengyu Ma:

回复 mangui zhang:

工程是ADC的,中断是PWM触发的ADC采样,我附上源代码

赞(0)
未经允许不得转载:TI中文支持网 » LAUNCHXL-F28027 ADC采样不进入中断服务函数
分享到: 更多 (0)