我尝试通过折页方式执行上述操作、只有一个 ADC 中断工作(频率更高)
我使用的代码如下:
我不理解将使 ADC 被触发的定时器和 ADC 之间的切换。
2个 ADC 配置:
void ADC_init (void)
{
//======================================================== 初始化用于 PD 采样的 ADC0模块===================================
//启用 ADC0模块。
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
ADCSequenceDisable (ADC0_BASE、1);
ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL、15);
//等待 ADC0模块准备就绪。
while (!SysCtlPeripheralReady (SYSCTL_Periph_ADC0))
{
}
//初始化 Timer0 -基址且计时器为 TIMERA 以触发 ADC 转换
ADCSequenceConfigure (ADC0_BASE、PD_SAMPLE_SEQ、ADC_TRIGGER_TIMER、PD_SEQ_PRIORITY);//序列发生器1 -->
ADCSequenceStepConfigure (ADC0_BASE、PD_SAMPLE_SEQ、PD1_STEP、ADC_CTL_CH0);
ADCSequenceStepConfigure (ADC0_BASE、PD_SAMPLE_SEQ、PD2_STEP、ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC0_BASE、PD_SAMPLE_SEQ、PD3_STEP、ADC_CTL_CH2);
ADCSequenceStepConfigure (ADC0_BASE、PD_SAMPLE_SEQ、PD4_STEP,(ADC_CTL_CH3 | ADC_CTL_END |ADC_CTL_IE);
ADCSequenceEnable (ADC0_BASE、PD_SAMPLE_SEQ);
ADCHardwareOversampleConfigure (ADC0_BASE、0);
ADCIntRegister (ADC0_BASE、PD_SAMPLE_SEQ、ADC0PDIntHandler);
ADCIntClear (ADC0_BASE、PD_SAMPLE_SEQ);
ADCIntEnable (ADC0_BASE、PD_SAMPLE_SEQ);
//======================================================== 将 ADC1初始化为 TH 和 LIM 采样===========================================
//启用 ADC1模块。
SysCtlPeripheralEnable (SYSCTL_Periph_ADC1);
ADCSequenceDisable (ADC1_base、1);
ADCClockConfigSet (ADC1_base、ADC_CClock_SRC_PLL | ADC_CClock_RATE_FULL、15);
//等待 ADC1模块准备就绪。
while (!SysCtlPeripheralReady (SYSCTL_Periph_ADC1))
{
}
//初始化 timer0 -基址和计时器为 TIMERB 以触发 ADC 转换
ADCSequenceConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、ADC_TRIGGER_TIMER、0/* TH_AND_LIM_SEQ_PRIORIESD*/);//序列发生器0 --> TimerControlTrigger (TIMER0_BASE、TIMER_B、TRUE);
ADCSequenceStepConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、LIMIT_MUX_STEP、ADC_CTL_CH16);
ADCSequenceStepConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、TH_MUX_STEP、ADC_CTL_CH17);
ADCSequenceStepConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、TH9_STEP、ADC_CTL_CH11);
ADCSequenceStepConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、TH10_STEP、ADC_CTL_CH12);
ADCSequenceStepConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、TH11_STEP、ADC_CTL_CH13);
ADCSequenceStepConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、TH12_STEP、ADC_CTL_CH14);
ADCSequenceStepConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、TH13_STEP、ADC_CTL_CH15);
ADCSequenceStepConfigure (ADC1_BASE、TH_AND_LIM_SAMPLE_SEQ、INTERNAL_TH_STEP、(ADC_CTL_TS | ADC_CTL_END |ADC_CTL_IE));
ADCSequenceEnable (ADC1_base、TH_AND_LIM_SAMPLE_SEQ);
ADCHardwareOversampleConfigure (ADC1_base、0);//???????
ADCIntRegister (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、ADC1THIntHandler);
ADCIntClear (ADC1_base、TH_AND_LIM_SAMPLE_SEQ);
ADCIntEnable (ADC1_base、TH_AND_LIM_SAMPLE_SEQ);
}
2个计时器配置:
void bothTimer_init (void)
{
uint32_t ulperiod;
uint32_t ulperiod1;
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
while (!SysCtlPeripheralReady (SYSCTL_Periph_TIMER0))
{
}
TimerClockSourceSet (TIMER0_BASE、TIMER_CLOCK 系统);
SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
while (!SysCtlPeripheralReady (SYSCTL_Periph_Timer1))
{
}
TimerClockSourceSet (Timer1_base、timer_clock_system);
//更改为 ADC 的计时器触发器
//将 Timer_B 配置为16位周期定时器。
TimerConfigure (TIMER0_BASE、/*TIMER_CFG_SPLIT_PAIR |*/ TIMER_CFG_PERIODICRACASE);
TimerConfigure (Timer1_base、/* timer_CFG_SPLIT_PAIR |*/ timer_CFG_PERIODICRAY);
ulperiod =((g_ui32SysClock - 1)/PD_TIMER_FREQ);//PD_TIMER_FREQ
ulperiod1 =((g_ui32SysClock - 1)/(th_timer_FREQ));//
TimerLoadSet (TIMER0_BASE、TIMER_A、ULPERIOD);
TimerLoadSet (Timer1_base、timer_B、ulperiod1);
// IntMasterEnable();
// TimerIntEnable (TIMER0_BASE、TIMER_TIMB_TIMEOUT);
//对于 ADV 触发器、启用处理器(NVIC)上的 Timer0B 中断。
TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE);
TimerControlTrigger (Timer1_base、timer_B、true);
TimerDisable (TIMER0_BASE、TIMER_A);
TimerDisable (Timer1_base、timer_B);
//启用 Timer0B。
TimerEnable (TIMER0_BASE、TIMER_A);
TimerEnable (Timer1_base、timer_B);
}
什么缺失或错误?