现在用M058S开启两路AIN0和AIN1 AD转换,只有第一路能得到转换正确的数据,第二路一直都是0,万用表测量第二路脚有1.2V的电压,但就是得不到AD值,请教各位大神如下函数有哪里需要修改的呢?
/*-----------------------------------------------------------------*/
/* 初始化IO引脚 */
/*-----------------------------------------------------------------*/
void IO_Init(void)
{
/* 设定引脚复用功能 */
SYS->P1_MFP = SYS_MFP_P10_AIN0
| SYS_MFP_P11_AIN1;
SYS->P2_MFP = SYS_MFP_P20_PWM0
| SYS_MFP_P21_PWM1
| SYS_MFP_P22_PWM2
| SYS_MFP_P23_PWM3;
SYS->P3_MFP = SYS_MFP_P30_RXD0
| SYS_MFP_P31_TXD0;
// | SYS_MFP_P32_INT0;
/* 配置引脚输入输出模式 */
P0->PMD = 0x000045F5;
P1->PMD = 0x0000F7FA;
P1->OFFD = 0x00000003;
P2->PMD = 0x0000FF55;
P3->PMD = 0x0000DFCF;
P4->PMD = 0x0000FFF5;
}
/*-----------------------------------------------------------------*/
/* 初始化ADC */
/*-----------------------------------------------------------------*/
void ADC_Init()
{
/* 设定ADC控制寄存器 */
ADC->ADCR = ADC_ADCR_DMOF_UNSIGNED_OUTPUT
| ADC_ADCR_DIFFEN_SINGLE_END
| ADC_ADCR_TRGCOND_LOW_LEVEL
| ADC_ADCR_ADMD_SINGLE
| ADC_ADCR_ADEN_CONVERTER_ENABLE;
/* 使能模拟输入通道 */
ADC->ADCHER = 0x03;
}
// AD转换------------------------------------------
void Bat_volt_check(void)
{
uint32_t adcbuf1, adcbuf2;
uint32_t temp;
_ADC_SET_CHANNEL(0X03); //P1.0 P1.1
/* clear the A/D interrupt flag for safe */
ADC->ADSR = ADC_ADSR_ADF_Msk;
_ADC_START_CONVERT();
_ADC_WAIT_COVERSION_DONE();
ADC->ADSR = ADC_ADSR_ADF_Msk; /* clear the A/D conversion flag */
adcbuf1 = _ADC_GET_CONVERSION_DATA(0);
adcbuf2 = _ADC_GET_CONVERSION_DATA(1);
printf("ad0 = %d\n", adcbuf1);
printf("ad1 = %d\n", adcbuf2);
}
adcbuf2 一直都是0,不管接了多少伏电压都是一样,为什么呢? 这样写的函数有问题吗?
|