Dear Experts
My customer modified the ADC example to reach ADC_SAMPLING_RATE up to 400000.
But the timer interrupt will delay which makes PA4 output clock shift.
Did they make something wrong on the setting?
Thanks for your comment.
#define ADC_SAMPLING_RATE 400000
//Main function:
Main()
{
…
// Clock
g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_16MHZ |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480), 120000000);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
// ADC
ADCClockConfigSet(ADC0_BASE, ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL, 15);
ROM_ADCSequenceDisable(ADC0_BASE, 3);
ROM_ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_CH7 | ADC_CTL_D | ADC_CTL_IE | ADC_CTL_END);
ROM_ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_TIMER, 0);
ROM_ADCSequenceEnable(ADC0_BASE, 3);
ROM_ADCIntClear(ADC0_BASE, 3);
ROM_IntEnable(INT_ADC0SS3);
ROM_ADCIntEnable(ADC0_BASE, 3);
// Timer
ROM_TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);
ROM_TimerLoadSet(TIMER0_BASE, TIMER_A, g_ui32SysClock / ADC_SAMPLING_RATE);
MAP_TimerControlTrigger(TIMER0_BASE, TIMER_A, true);
//
// Setup the interrupts for the timer timeouts.
//
ROM_IntEnable(INT_TIMER0A);
ROM_TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
…
}
//ADC interrupt:
ADCIntHandler(void)
{
ROM_ADCIntClear(ADC0_BASE, 3);
if(g_bEnableADCCheck)
{
ADCSequenceDataGet(ADC0_BASE, 3, g_u32ADC);
if(g_u32ADC[0] < g_uVoltageLow)
{
g_uOutputState = 0;
}
else if(g_u32ADC[0] > g_uVoltageHigh)
{
g_uOutputState = GPIO_PIN_5;
}
}
g_bADCDataUpdated = true;
}
//Timer interrupt:
TimerIntHandler(void)
{
ROM_TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
g_uCounter++;
if(g_bEnableADCCheck)
{
if(g_uCheckADCSignal == 1)
{
g_uCheckADCSignal = 0;
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, 0);
}
else
{
g_uCheckADCSignal = 1;
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4 | GPIO_PIN_5, GPIO_PIN_4 | g_uOutputState);
}
}
}
// Enable ADC Check
Enable ADCCheck(bool bEnable)
{
If(bEnable)
{
g_bEnableADCCheck = true;
g_uCheckADCSignal = 0;
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4|GPIO_PIN_5, 0);
ROM_TimerEnable(TIMER0_BASE, TIMER_A);
}
else
{
g_bEnableADCCheck = false;
g_uCheckADCSignal = 0;
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4|GPIO_PIN_5, 0);
ROM_TimerDisable(TIMER0_BASE, TIMER_A);
}
}