主题中讨论的其他器件:C2000WARE
工具/软件:Code Composer Studio
大家好、我正在使用 F28377S LaunchPad。 我正在运行 ADC 寄存器的代码。 ADC 的值存储在 adcresult0中。 寄存器窗口以连续刷新的方式运行、首先是定期更改值、但在运行1个运行时之后。 这些值在某个时间(10-20秒)内发生变化、然后即使我降低 ADC 的电压也会保持恒定。 即使我恢复或暂停程序、它也是恒定的。
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.
工具/软件:Code Composer Studio
大家好、我正在使用 F28377S LaunchPad。 我正在运行 ADC 寄存器的代码。 ADC 的值存储在 adcresult0中。 寄存器窗口以连续刷新的方式运行、首先是定期更改值、但在运行1个运行时之后。 这些值在某个时间(10-20秒)内发生变化、然后即使我降低 ADC 的电压也会保持恒定。 即使我恢复或暂停程序、它也是恒定的。
我只使用1个寄存器 adcresult0修改了演示代码 adcsoccontinuous。
我将复制此处的代码并附上 CCS 的屏幕截图。
//######################################################################################################################
//
//文件: adc_soc _continuous_cpu01.c
//
//标题: F2837xS 的 ADC 持续自触发。
//
//! addtogroup cpu01_example_list
//!
//!
//! 此示例设置 ADC 以连续转换、从而达到最大值
//! 采样率。\n
//!
//! 程序运行后、存储器将包含:
//!
//! -\b 结果:一个模数转换采样序列
//! 从引脚 A0开始。 根据、样本之间的时间是可能的最小值
//! ADC 速度。
//
//######################################################################################################################
//$TI 版本:F2837xS 支持库 V210 $
//$Release Date:Tue Nov1 15:35:23 CDT 2016 $
//版权所有:版权所有(C) 2014-2016 Texas Instruments Incorporated -
//######################################################################################################################
//
//包含的文件
//
#include "F28x_Project.h"
//
//函数原型
//
void ConfigureADC (void);
void SetupADCContinu模糊(uint16通道);
//
//定义
//
#define results_buffer_size 16 //缓冲区用于存储转换结果
//(大小必须是16的倍数)
//
//全局
//
uint16 AdcaResults[results_buffer_size];
uint16 i;
uint16二;
uint16 One;
uint16零;
uint16 j;
void main (void)
{
//
//步骤1. 初始化系统控制:
// PLL、安全装置、启用外设时钟
//此示例函数位于 F2837xS_SYSCTRL.c 文件中。
//
InitSysCtrl();
//
//步骤2. 初始化 GPIO:
//此示例函数位于 F2837xS_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
//
InitGpio();//针对此示例跳过
//
//步骤3. 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
//
Dint;
//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//此函数位于 F2837xS_PIECTRL.c 文件中。
//
InitPieCtrl();
//
//禁用 CPU 中断并清除所有 CPU 中断标志:
//
IER = 0x0000;
IFR = 0x0000;
//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 F2837xS_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xS_PieVect.c 中找到
//
InitPieVectTable();
//
//配置 ADC 并为其加电
//
ConfigureADC();
//
//在通道0上设置用于连续转换的 ADC
//
SetupADCContinu模糊(0);
//
//启用全局中断和更高优先级的实时调试事件:
//
EINT; //启用全局中断 INTM
ERTM; //启用全局实时中断 DBGM
//
操作
{
EALLOW;
//软件强制启动 SOC0
AdcaRegs.ADCSOCFRC1.ALL = 0x0001;
AdcaResults[i++]= AdcaResultRegs.ADCRESULT0;
2=AdcaResultRegs.ADCRESULT0;
for (j=0;j<10000;j++)
{
}
1 = 2;
for (j=0;j<10000;j++)
{
}
零=一;
AdcaRegs.ADCPPB1CONFIG.bit.CONFIG=0;
AdcaRegs.ADCPPB1CONFIG.bit.TWOSCOMPEN=1;//更改符号
AdcaRegs.ADCPPB1OFFREF=59365;//从引脚 A0和 A1处的结果中减去2.5V。
EDIS;
} while (1);
}
//
// ConfigureADC -写入 ADC 配置并为两者加电
// ADC A 和 ADC B
//
空配置 ADC (空)
{
EALLOW;
//
//写入配置
//
AdcaRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4
AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE);
//
//将脉冲位置设置为晚期
//
AdcaRegs.ADCCTL1.bit.INTPULSEPOS=1;
//
//为 ADC 加电
//
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
//
//延迟1ms 以允许 ADC 加电时间
//
DELAY_US (1000);
EDIS;
}
//
// SetupADCContinuously -设置 ADC 在一个通道上持续转换
//
空设置 ADCContinuid (uint16通道)
{
uint16 acqps;
//
//根据分辨率确定最小采集窗口(在 SYSCLKS 中)
//
if (adc_resolution_12bit = AdcaRegs.ADCCTL2.bit.resolution)
{
acqps = 14;//75ns
}
否则、//分辨率为16位
{
acqps = 63;//320ns
}
EALLOW;
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0; /SOC 将在通道上转换
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 0;
AdcaRegs.ADCSOC0CTL.bit.ACQPS = acqps; //采样窗口为 acqps +
//1个 SYSCLK 周期
EDIS;
}
//
//文件结束
//
另外还有一个观察结果、寄存器值在首次调试时无限变化、之后停止变化。 我已重新启动 PC、然后寄存器值再次发生更改、但当再次调试时、它会产生相同的错误。