Other Parts Discussed in Thread: SYSCONFIG
器件型号: MSPM0G3106-Q1
主题: SysConfig 中讨论的其他器件
尊敬的团队:
我已经尝试将 ADC 配置为在引脚 A1_0、A1_1 和 A1_2 处读取电压。
我已将引脚连接到示波器、在示波器上、我可以看到它们具有稳定的 2V 电压、但 ADC 值不是恒定的、在 0.2V 至 1.9V 之间振荡。
以下是我的配置、它无法按预期工作、甚至我尝试了 SDK 中的示例 ADC 代码、该代码使用了中断和计时器、其中我遇到了相同问题。
静态常量 DL_TimerA_ClockConfig gTIMER_SampleClockConfig ={
.clockSel = DL_TIMER_CLOCK_BUSCLK、
divideRatio = DL_TIMER_CLOCK_Divide_1、
.prescale = 0U、
};
/*
*计时器加载值(计数器从此处开始)的计算公式为 (timerPeriod * timerClockFreq)- 1
* TIMER_Sample_INST_LOAD_VALUE =(0.0625ms * 80000000Hz)- 1
*/
静态常量 DL_TimerA_TimerConfig gTIMER_SampleTimerConfig ={
.period = TIMER_Sample_INST_LOAD_VALUE、
.timerMode = DL_TIMER_TIMER_MODE_PERIOCY_UP、
.startTimer = DL_TIMER_STOP、
};
SysConfig_weak void SYSCFG_DL_TIMER_Sample_init (void){
DL_TimerA_setClockConfig (TIMER_Sample_INST、
(DL_TimerA_ClockConfig *)&gTIMER_SampleClockConfig);
DL_TimerA_initTimerMode (TIMER_Sample_INST、
(DL_TimerA_TimerConfig *)&gTIMER_SampleTimerConfig);
DL_TimerA_enableShadowFeatures (TIMER_Sample_INST);
DL_TimerA_enableClock (TIMER_Sample_INST);
DL_TimerA_enableEvent (TIMER_Sample_INST、DL_TIMERA_EVENT_ROUTE_1、(DL_TIMERA_EVENT_CC0_UP_EVENT |
DL_TIMERA_EVENT_CC1_UP_EVENT);
DL_TimerA_setPublisherChanID (TIMER_Sample_INST、DL_TIMERA_Publisher _INDEX_0、TIMER_Sample_INST_PUB_0_CH);
}
/* ADC0 初始化*/
静态常量 DL_ADC12_ClockConfig gADC1ClockConfig ={
.clockSel = DL_ADC12_clock_SYSOSC、
divideRatio = DL_ADC12_clock_divide_1、
.freqRange = DL_ADC12_clock_FREQ_RANGE_24_TO_32、
};
SysConfig_weak void SYSCFG_DL_ADC1_init (void)
{
DL_ADC12_setClockConfig (ADC1_INST、(DL_ADC12_ClockConfig *)&gADC1ClockConfig);
DL_ADC12_initSeqSample (ADC1_INST、
DL_ADC12_REPEAT_MODE_ENABLED、DL_ADC12_SAMPLING_SOURCE_AUTO、DL_ADC12_TRIG_SRC_EVENT、
DL_ADC12_SEQ_START_ADDR_00、DL_ADC12_SEQ_END_ADDR_02、DL_ADC12_SAMP_CONV_RES_12_BIT、
DL_ADC12_SAMP_CONV_DATA_FORMAT_unsigned);
DL_ADC12_configConversionMem (ADC1_INST、ADC1_ADCMEM_0、
DL_ADC12_INPUT_CHAN_0、DL_ADC12_REFERENCE_VOLTAGE_VDDA、DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP1、DL_ADC12_AVERAING_MODE_DISABLED、
DL_ADC12_BURN_OUT_SOURCE_DISABLED、DL_ADC12_TRIGGER_MODE_AUTO_NEXT、DL_ADC12_Windows_COMP_DISABLED);
DL_ADC12_configConversionMem (ADC1_INST、ADC1_ADCMEM_1、
DL_ADC12_INPUT_CHAN_1、DL_ADC12_REFERENCE_VOLTAGE_VDDA、DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0、DL_ADC12_AVERAING_MODE_DISABLED、
DL_ADC12_BURN_OUT_SOURCE_DISABLED、DL_ADC12_TRIGGER_MODE_AUTO_NEXT、DL_ADC12_Windows_COMP_DISABLED);
DL_ADC12_configConversionMem (ADC1_INST、ADC1_ADCMEM_2、
DL_ADC12_INPUT_CHAN_2、DL_ADC12_REFERENCE_VOLTAGE_VDDA、DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0、DL_ADC12_AVERAING_MODE_DISABLED、
DL_ADC12_BURN_OUT_SOURCE_DISABLED、DL_ADC12_TRIGGER_MODE_AUTO_NEXT、DL_ADC12_Windows_COMP_DISABLED);
DL_ADC12_configHwAverage (ADC1_INST、DL_ADC12_HW_AVG_NUM_ACC_128、DL_ADC12_HW_AVG_DEN_DIV_BY_128);
DL_ADC12_setSampleTime0 (ADC1_INST、80);
DL_ADC12_setSampleTime1 (ADC1_INST、80);
DL_ADC12_setSubscripberChanID (ADC1_INST、ADC1_INST_SUB_CH);
DL_ADC12_enableConversions (ADC1_INST);
}
/*为 timer_Sample 定义*/
#define TIMER_Sample_INST (TIMA1)
#define TIMER_Sample_INST_IRQHandler TIMA1_IRQHandler
#define TIMER_Sample_INST_INT_IRQN (TIMA1_INT_IRQn)
#define TIMER_Sample_INST_LOAD_VALUE (1599U)
#define TIMER_Sample_INST_PUB_0_CH (2)
/*为 ADC1 定义*/
#define ADC1_INST ADC1
#define ADC1_INST_IRQHandler ADC1_IRQHandler
#define ADC1_INST_INT_IRQN (ADC1_INT_IRQn)
#define ADC1_ADCMEM_0 DL_ADC12_MEM_IDX_0
#define ADC1_ADCMEM_0_REF DL_ADC12_REFERENCE_VOLTAGE_VDDA
#define ADC1_ADCMEM_0_REF_VOLTAGE_V 3.3
#define ADC1_ADCMEM_1 DL_ADC12_MEM_IDX_1
#define ADC1_ADCMEM_1_REF DL_ADC12_REFERENCE_VOLTAGE_VDDA
#define ADC1_ADCMEM_1_REF_VOLTAGE_V 3.3
#define ADC1_ADCMEM_2 DL_ADC12_MEM_IDX_2
#define ADC1_ADCMEM_2_REF DL_ADC12_REFERENCE_VOLTAGE_VDDA
#define ADC1_ADCMEM_2_REF_VOLTAGE_V 3.3
#define ADC1_INST_SUB_CH (2)
#define GPIO_ADC1_C7_PORT GPIOA
#define GPIO_ADC1_C7_PIN DL_GPIO_PIN_15
#define GPIO_ADC1_C3_PORT GPIOA
#define GPIO_ADC1_C3_PIN DL_GPIO_PIN_16
#define GPIO_ADC1_C2_PORT GPIOA
#define GPIO_ADC1_C2_PIN DL_GPIO_PIN_17
这里的问题是什么、我每 2ms 读取一次 ADC、如下所示、这是不准确的
CHA = DL_ADC12_getMemResult (ADC1、DL_ADC12_MEM_IDX_0);
CHB = DL_ADC12_getMemResult (ADC1、DL_ADC12_MEM_IDX_1);
CHC = DL_ADC12_getMemResult (ADC1、DL_ADC12_MEM_IDX_2);
帮助我找到解决方案