AD不采集数据,用周立功的例子也不行,高手帮忙啊,我调了几天了
/********************************************************************************************************* ** Function name: ADC_Trigger ** Descriptions: 配置A/D的触发源,用户根据实际需要在这个函数里配置对应的触发源 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void ADC_Trigger(void) { ADCSequenceConfigure(ADC_BASE, 0, ADC_TRIGGER_TIMER, 0); /* 配置为定时器触发A/D */ SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER0 ); /* 使能定时器0外设 */ TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER); /* 配置为32位周期定时器 */ TimerLoadSet(TIMER0_BASE, TIMER_A, 0xfff0); /* 设置定时器装载值为0xfff0 */ TimerControlTrigger(TIMER0_BASE, TIMER_A, 1); /* 使能触发输出 */ TimerEnable(TIMER0_BASE, TIMER_A); /* 使能定时器并开始等待边沿事件*/ }
/********************************************************************************************************* ** Function name: ADC_Init ** Descriptions: A/D初始化 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void ADC_Init(void) { PLLSet(); /* 设置PLL */ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC); /* 使能ADC模块时钟 */ SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); /* 125KSps采样率 */ ADCSequenceDisable(ADC_BASE, 0); /* 禁能0 */ IntMasterEnable(); /* 使能处理器中断 */ IntEnable(INT_ADC0); /* 使能AD中断 */ ADCIntEnable(ADC_BASE, 0); /* 使能AD中断模块 */
ADC_Trigger(); /* * 确定ADC的采样步数,确定每一步的采样通道,并在每一通道采样后产生中断 */ ADCSequenceStepConfigure(ADC_BASE, 0, 0, ADC_CTL_CH0 | ADC_CTL_IE); ADCSequenceStepConfigure(ADC_BASE, 0, 1, ADC_CTL_CH1 | ADC_CTL_IE); ADCSequenceStepConfigure(ADC_BASE, 0, 2, ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END);
ADCHardwareOversampleConfigure(ADC_BASE,16); /* 为对16个采样进行平均计算 */
ADCSequenceEnable(ADC_BASE, 0); /* 使能采样序列0 */ /* ADCSequenceEnable(ADC_BASE, 1); */ /* 使能采样序列1 */ }
/********************************************************************************************************* ** Function name: ADC_Sequence_0_ISR ** Descriptions: A/D中断服务程序 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void ADC_Sequence_0_ISR(void) { ADCIntClear(ADC_BASE,0); /* 清除中断标志位 */ while (!(HWREG(ADC_BASE + 0X04C) & 0X100)) { ADCSequenceDataGet(ADC_BASE, 0, &ulData); /* 读出10位转换结果 */ ulData = ((ulData & 0x3ff) * 1000 * 3) / 1023; Charge_Val[flag_Charge] = ulData; flag_Charge++; if ( flag_Charge >= 3) { flag_Charge = 0; flag_ADC_finish = 1; /* A/D转换完成标志位 */ } } } /********************************************************************************************************* END FILE *********************************************************************************************************/
|