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
*********************************************************************************************************/
此帖出自
小平头技术问答
一周热门 更多>