您好,
我遇到了这样一个问题:ADC设置为多序列模式,但只对ADC_MEM0执行读数,而不对其他模式进行更改。 我正在检查问题,方法是将ADC_MEM0,ADC_MEM1和ADC_MEM2设置到相同的模拟输入,以查看是否得到相同的结果。模拟输入连接了3.3V输入,我正在使用ADC的14位转换。 我通过串行将结果发送到终端,我看到以下内容:
ADC_MEM0 = 1.6383万
ADC_MEM1 = 3488
ADC_MEM2 = 5576
但是,它们应该是相同的。 此外,如果我更改电压,ADC_MEM1和ADC_MEM2不会更改各自的值。 我的代码如下。 我使用主循环调用MAP_ADC14_ToggleConversionTrigger函数。 你有什么建议吗?
void init_adc_no_temp (void)
{
/*将参考电压设置为2.5 并启用温度传感器*/
MAP_REF_A_setReferenceVoltage (REF_A_VREF2_5V);
MAP_REF_A_enableReferenceVoltage();
/*在温度传感器已布设的情况下初始化ADC (MCLK/1/1)*/
MAP_ADC14_enableModule();
MAP_ADC14_INITModule (ADC_CLOCKSOURCE_MCLK,ADC_PREDIVIDER_1,ADC_DIVIDER_1,0);
/*将GPIO引脚设置为模拟输入(和参考)*/
MAP_GPIO设置外围模块功能输入引脚(GPIO_PORT_P4,
GPIO _PIN7 | GPIO _PIN5,GPIO _STILEARY_MODULE_FUNCTION);
/*配置ADC内存*/
MAP_ADC14_configureMultiSequenceMode (ADC_MEM0,ADC_MEM2,FALSE);
MAP_ADC14_configureConversionMemory(ADC_MEM0, ADC_VREFPOS_INTBUF_VREFNEG_VSS,,
ADC_INPUT_A6,ADC_NONDIFERENIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM1,ADC_VREFPOS_INTBUF_VREFNEG_VSS,
ADC_INPUT_A6,ADC_NONDIFERENIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM2,ADC_VREFPOS_INTBUF_VREFNEG_VSS,
ADC_INPUT_A6,ADC_NONDIFERENIAL_INPUT);
/*配置192的采样/保持时间*/
MAP_ADC14_setSampleHoldTime (ADC_PULSE_WIDES_192,ADC_PULSE_WIDES_192);
MAP_ADC14_enableInterrupt (ADC_INT2);
/*启用中断*/
MAP_Interrupt_enableInterrupt (INT_ADC14);
MAP_Interrupt_enableMaster();
MAP_ADC14_enableSampleTimer(ADC_AUTOMATICAL_ITED);
/*触发样本开始*/
MAP_ADC14_enableConversion();
MAP_ADC14_toggleConversionTrigger();
}
作废ADC14_IRQHandler(void)
{
UINT64_t状态;
char strToSendLocal[200]="";
uint16_t结果Buffer[3];
状态= MAP_ADC14_getEnabledInterruptStatus();
MAP_ADC14_clearInterruptFlag (状态);
IF (状态和ADC_INT2)
{
MAP_ADC14_getMultiSequenceResult (结果缓冲区);
//MAP_ADC14_getResultArray (ADC_MEM0,ADC_MEM2,resultsBuffer);
Sprintf (strToSendLocal,"所有原始值:%i,%i,%i",结果缓冲区[0],结果缓冲区[1],结果缓冲区[2]);
sendStringToUART_A2(strToSendLocal, sizeof(strToSendLocal));//向UART2发送消息
}
}