您好!
我继承了一个项目、我需要在端口 E 上添加两个新的 ADC 输入、引脚0 (插盒)和引脚2 (门)。 我以为我配置正确、但显然不正确。 我没有看到 ADC 读数发生任何变化、但我已经验证了引脚的电压变化。 代码片段。 感谢您的帮助!
typedef 枚举
{
ADC_CHANNEL 0、
ADC_CHANNEL 温暖_I = ADC_CHANGE_0、
ADC_CHANGE_RTD1、
ADC_CHANNEL、保温器_ID、
ADC_CHANNEL MOTOR_I、
ADC_CHANNEL SUPPLY_V、
adc_channel_cartridge、// Bah 新设计
ADC_CHANNEL、// Bah 新设计
ADC_CHANNEL 计数、
}adc_channel_t;
#define E温暖_I_channel (ADC_CTL_CH0)
#define RTD1_CHANNEL (ADC_CTL_CH17)
#define 保温器_ID_CHANNEL (ADC_CTL_CH18)
#define MTR_I_CHANNEL (ADC_CTL_CH2)
#define SUPPLY_CHANNEL (ADC_CTL_CH19)
#define cartridge 通道 (ADC_CTL_CH3)
#define DOOR 通道 (ADC_CTL_CH1)
void ADC_Initialize (void)
{
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);
/*启用 ADC1外设*/
SysCtlPeripheralEnable (SYSCTL_Periph_ADC1);
GPIOPinTypeADC (GPIO_Porte _BASE、
GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
GPIOPinTypeADC (GPIO_PORTK_base、
GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
ADCSequenceDisable (ADC1_base、MAIN_SEQUENCE);
ADCHardwareOversampleConfigure( adc1_base,samples_to 平均);
ADCReferenceSet( ADC1_base,ADC_REF_INT );
ADCSequenceConfigure( ADC1_base、MAIN_SEQUENCE、ADC_TRIGGER_PROCESSOR, MAIN_SEQUEST_PRIORITY );
ADCSequenceStepConfigure (ADC1_BASE、MAIN_SEQUENCE、ADC_CHANNEL、EAR温暖_I_CHANNEL);
ADCSequenceStepConfigure (ADC1_base、MAIN_SEQUENCE、ADC_CHANNEL RTD1、RTD1_CHANNEL);
ADCSequenceStepConfigure (ADC1_BASE、MAIN_SEQUENCE、ADC_CHANNEL、EARER_ID_CHANNEL);
ADCSequenceStepConfigure (ADC1_base、MAIN_SEQUENCE、ADC_CHANNEL MOTOR_I、MTR_I_CHANNEL);
ADCSequenceStepConfigure (ADC1_BASE、MAIN_SEQUENCE、ADC_CHANNEL、CARGE_CHANNEL);
ADCSequenceStepConfigure (ADC1_BASE、MAIN_SEQUENCE、ADC_CHANNEL、DOOR 通道);
ADCSequenceStepConfigure (ADC1_BASE、MAIN_SEQUENCE、ADC_CHANNEL SUPPLY_V、
SUPPLY_CHANNEL | ADC_CTL_IE | ADC_CTL_END);
ADCSequenceEnable (ADC1_BASE、MAIN_SEQUENCE);
ADCIntClear (ADC1_BASE、MAIN_SEQUENCE);
}
void ADC_StartScan( void )
{
/*触发下一个 ADC 转换。 *
ADCProcessorTrigger (ADC1_base、main_sequence);
}
void ADC_ReadScan( void )
{
int i;
uint32_t * raw;
ADCSCALE_t *比例;
uint32_t rid;
uint32_t *已转换;
int32_t temp;
if (ADCIntStatus (ADC1_base、main_sequence、false))
{
/*清除中断标志并读取数据*/
ADCIntClear (ADC1_BASE,MAIN_SEQUENCE);
adcsequenceDataGet ( adc1_base、main_sequence、rawADC );
RAW = rawADC;
已转换=已转换的 ADC;
换算= ADCscale;
RID = full_scale - rawADC[ADC_CHANGE_wer_ID];
对于(i = 0;i < sizeray (rawADC);++I)
{
//偏移量在移位前被应用以获得额外的精度
//添加1 <<(SHIFT - 1)将结果舍入。
temp =* raw * scale-> gain;
如果(temp >= scale->offset)
{
*converted =(temp - scale->offset +(1 <<(scale->shift - 1)))>> scale->shift;
}
其他
{
*converted = 0;
}
++raw;
++转换;
++标度;
}
//用舍入完成加热器的计算。
convertedADC[ADC_CHANGE_保温 器_ID]=
((((convertedADC[ADC_CHANGE_ELO_ID]+ RID)/ RID)+(1 <<(RID_LOG_PRycale - 1)))>> RID_LOG_PRycale;
}
}