This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F2808:ADC 问题

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/716381/ccs-tms320f2808-adc-problem

器件型号:TMS320F2808

工具/软件:Code Composer Studio

我正在尝试运行 example_280xAdcSeqModeTest.c 我已更改时钟和 S/H 值。我尝试在连续运行的仿真级联模式下读取两个8通道。示例中有两个 用于循环的通道。如果我按下 Debug 按钮加载程序、我将看到图1所示的正确波形。但当我执行此操作时 按“Resume”(恢复)按钮,然后得到失真的波形。我无法解决此问题。

// TI 文件$Revision:/main/2 $
//签入$Date:2009年7月31日14:26:00 $
//######################################################################################################
//
////文件:example_280xAdcSeqModeTest.c
//
//标题:DSP280x ADC 序列模式测试。
//
//假设:
//
//此程序需要 DSP280x 头文件。
//
//确保在
编译此示例之前在// DSP280x_Examples.h 中正确定义了 CPU 时钟速度。
//
//将要转换的信号连接到通道 A0。
//
//根据提供的信息,此项目配置为“引导至 SARAM”
//操作。 280x 引导模式表如下所示。
//有关配置 eZdsp 引导模式的信息,
//请参阅 eZdsp 附带的文档,
//
引导 GPIO18 GPIO29 GPIO34
// 模式 SPICLKA SCITXDA
// SCITXB//
----------------------------------
// 闪存 1 1 1
// SCI-A 1 1 0
// SPI-A 1 0 1
// I2C-A 1 0 0
// eCAN-A 0 1 1
// Saram 0 1 0 <-"boot to SARAM"
// OTP 0 0 1
// I/0 0 0 0
//
//
//说明:
//
//通道 A0被永久转换并记录在缓冲区(SampleTable)
//
//打开 SampleTable 的存储器窗口以观察缓冲区
//运行一段时间并停止并查看表内容。
//
// 观察变量:
// SampleTable -转换值的日志。
//
//##########################################################################################################################
//
//原始来源:S.S.
//
//$TI 发行版:DSP280x C/C++头文件 V1.70 $
//$发行 日期:2009年7月27日$
//############################################################################

#include "DSP280x_Device.h" // DSP280x 头文件包含文件
#include "DSP280x_examples.h"// DSP280x 示例包含文件

// ADC 启动参数
#define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*4) = 12.5MHz
//对于60MHz 器件:HSPCLK = 60/(2*4) = 7.5MHz
#define ADC_CKPS 0x1 // ADC 模块时钟= HSPCLK/2*ADC_CKPS = 12.5MHz/(1*2)= 6.25MHz
//对于60MHz 器件:ADC 模块 clk = 7.5MHz/(1*2) = 3.75MHz
#define ADC_SHCLK 0x0 // ADC 模块周期中的 S/H 宽度 = 16个 ADC 时钟
#define AVG 2048 //平均采样限制
#define zOffset 0x00 //平均零偏移
#define BUF_SIZE 2048 //样本缓冲区大小

//此示例的全局变量
uint16 SampleTable[BUF_SIZE];
uint16 j = 0;
uint16 i = 0;
main ()
{


//步骤1。 初始化系统控制:
// PLL、看门狗、启用外设时钟
//此示例函数位于 DSP280x_sysctrl.c 文件中。
InitSysCtrl();

//此示例的特定时钟设置:
EALLOW;
SysCtrlRegs.HISPCP。all = ADC_MODCLK;// HSPCLK = SYSCLKOUT/ADC_MODCLK
EDIS;

//步骤2。 初始化 GPIO:
//此示例函数位于 DSP280x_GPIO.c 文件中,
//说明了如何将 GPIO 设置为其默认状态。
// InitGpio();//跳过此示例

//步骤3。 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
DINT;

//将 PIE 控制寄存器初始化为默认状态。
//默认状态是禁用所有 PIE 中断并
清除标志//。
//此函数位于 DSP280x_PIECTRL.c 文件中。
InitPieCtrl();

//禁用 CPU 中断并清除所有 CPU 中断标志:
IER = 0x0000;
IFR = 0x0000;

//使用指向 shell 中断
//服务例程(service routinese, ISR)的指针初始化 PIE 矢量表。
//这将填充整个表,即使在
本示例中未使用中断//也是如此。 这对于调试很有用。
//可以在 DSP280x_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 DSP280x_PieVect.c 中找到
InitPieVectTable();

//步骤4. 初始化所有器件外设:
//此函数可在 DSP280x_InitPeripherals.c
中找到// InitPeripherals ();//此示例不需要
InitAdc ();//对于此

示例,初始化 ADC //特定的 ADC 设置:
AdcRegs.ADCTRRegs.bit.ACQ_PS = ADCCTL3.ADCMS.ADCLA.ADCL1.ADCLA.ADCL1.ADCLA.ADCLK
;ADCLA.ADCLA.ADCL1.ADCL1.ADCL1.ADCLA.ADCLK = ADCL1.ADCLA.ADCL1.ADCLA.ADCL1.ADCL1.ADCLK;ADCLA.ADCL1.ADCL1.ADCL1.ADCL1.ADCLK = ADCLA.ADCL1.ADCL1.ADCL1.ADCL

// 1级联模式
AdcRegs.ADCMAXCONV.ALL=0x0007;

AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x0;
AdcRegs.ADCCHSELSEQ1.bit.ADCSEV03
= 0x0;ADCCONV03 = 0x0;ADCCONV02.ADCSEQ1 = 0x0
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0;
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x0;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0;
AdcRegs.ADCCHSELSEQ2.bit.V07

= 0x0;ADCCONVRL.RL.RL.RCOM.R0=0x0;ADCCHSELSEQ1.bit.RCONVR0=0x0;ADCON1.RCOL.R1.R1.R1.R1. //设置连续运行


//步骤5。 特定于用户的代码、启用中断:


//清除(
i=0;i >4);
SampleTable[i++]=((AdcRegs.ADCRESULT2>>4));
SampleTable[i++]=(AdcRegs.ADCRESULT4>4));
SampleTable[i++]=(AdcRegs.ADCRESULT6>4));
SampleTable[i++]=(AdcRegs.ADCRESULT8>4));
SampleTable[i++]=(AdcRegs.ADCRESULT10>4));
SampleTable[i++]=(AdcRegs.ADCRESULT12>4));
SampleTable[i]=(AdcRegs.ADCRESULT14>4));
}
}//====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================



//不再需要。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Tahir、

    当 SampleTable 数组回滚时、设置一个停止执行的断点可能会有所帮助。

    在您的第一个屏幕截图中、CPU 被暂停、因此 SampleTable 值是静态的、CCS 可以清晰地绘制这些值。

    在第二个屏幕截图中、CPU 正在运行、因此 SampleTable 值不断被覆盖、这可能看起来不正确。

    Tommy
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是说这是一个 Code Composer 图问题、还是说您的数据是错误的?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Tahir、

    我假设您的数据在任何给定时刻都是正确的。 我认为问题是 C28x 向数组写入数据的速度比 Code Composer 能够绘制的速度快得多。 您可能会看到多个循环迭代的数据绘制在单个图表上。

    Tommy