I am trying to do the above in the folowing way, only one ADC interrupt is working (the higher frequency)
the code I am using is as follows:
I DO NOT understand the conection between the timer and ADC that would make the ADC get triggered.
The 2 ADC configuring:
void ADC_init(void)
{
//=================================initialize ADC0 module for PD sample============================
// Enable the ADC0 module.
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
ADCSequenceDisable(ADC0_BASE, 1);
ADCClockConfigSet(ADC0_BASE, ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL, 15);
// Wait for the ADC0 module to be ready.
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_ADC0))
{
}
//Initialize Timer0 - base and the timer is TIMERA to trigger an ADC conversion
ADCSequenceConfigure(ADC0_BASE, PD_SAMPLE_SEQ, ADC_TRIGGER_TIMER, PD_SEQ_PRIORITY); //sequencer 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);
//==================================initialize ADC1 for TH & LIM sample==============================
// Enable the ADC1 module.
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC1);
ADCSequenceDisable(ADC1_BASE, 1);
ADCClockConfigSet(ADC1_BASE, ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL, 15);
// Wait for the ADC1 module to be ready.
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_ADC1))
{
}
//Initialize timer0 - base and timer is TIMERB to trigger an ADC conversion
ADCSequenceConfigure(ADC1_BASE, TH_AND_LIM_SAMPLE_SEQ, ADC_TRIGGER_TIMER, 0/*TH_AND_LIM_SEQ_PRIORITY*/); //sequencer 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);
}
the 2 timers configurations:
void bothTimers_init(void)
{
uint32_t ulperiod;
uint32_t ulperiod1;
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_TIMER0))
{
}
TimerClockSourceSet(TIMER0_BASE,TIMER_CLOCK_SYSTEM);
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_TIMER1))
{
}
TimerClockSourceSet(TIMER1_BASE,TIMER_CLOCK_SYSTEM);
//change to ADC's timer trigger
// Configure Timer_B as a 16-bit periodic timer.
TimerConfigure(TIMER0_BASE, /*TIMER_CFG_SPLIT_PAIR |*/ TIMER_CFG_PERIODIC);
TimerConfigure(TIMER1_BASE, /*TIMER_CFG_SPLIT_PAIR | */TIMER_CFG_PERIODIC);
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);
// For ADV trigger Enable the Timer0B interrupt on the processor (NVIC).
TimerControlTrigger(TIMER0_BASE, TIMER_A, true);
TimerControlTrigger(TIMER1_BASE, TIMER_B, true);
TimerDisable(TIMER0_BASE, TIMER_A);
TimerDisable(TIMER1_BASE, TIMER_B);
// Enable Timer0B.
TimerEnable(TIMER0_BASE, TIMER_A);
TimerEnable(TIMER1_BASE, TIMER_B);
}
WHAT IS MISSING OR WRONG?