Other Parts Discussed in Thread: TM4C123GH6PM
Hi,
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h" // HEADER FILES
#include "driverlib/debug.h"
#include "driverlib/sysctl.h"
#include "driverlib/adc.h"
uint32_t ui32ADC0Value[4]; // TO STORE THE VALUE IN VARIABLE ui32ADC0Value FOR EVERY SAMPLING
volatile uint32_t ui32TempAvg; // AVERAGE VALUE OF SAMPLED SIGNAL WILL BE STORE IN VARIABLE ui32TempAvg
volatile uint32_t ui32TempValueC;
volatile uint32_t ui32TempValueF;
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ); // SYSTEM CLOCK AT 40MHZ
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); // ENABLE ADC0 MODULE
ADCSequenceConfigure(ADC0_BASE, 1, ADC_TRIGGER_PROCESSOR, 0); // ADC0 MODULE, TRIGGER IS PROCESSOR EVENT, SEQUENCER 0 IS CONFIGURED
ADCSequenceStepConfigure(ADC0_BASE, 1, 0, ADC_CTL_TS); // ADC0 MODULE, SEQUENCER 0 , FOR 1 SAMPLING, INPUT IS INTERNAL TERMPERATURE SENSOR
ADCSequenceStepConfigure(ADC0_BASE, 1, 1, ADC_CTL_TS); // ADC0 MODULE, SEQUENCER 0 , FOR 2 SAMPLING, INPUT IS INTERNAL TERMPERATURE SENSOR
ADCSequenceStepConfigure(ADC0_BASE, 1, 2, ADC_CTL_TS); // ADC0 MODULE, SEQUENCER 0 , FOR 3 SAMPLING, INPUT IS INTERNAL TERMPERATURE SENSOR
ADCSequenceStepConfigure(ADC0_BASE,1,3,ADC_CTL_TS|ADC_CTL_IE|ADC_CTL_END); // ADC0 MODULE, SEQUENCER 0 , FOR 4 SAMPLING,INPUT IS INTERNAL TERMPERATURE SOR,
// AND TO DENOTE THAT THIS IS LAST SAMPLING CONVERSIONA AND INTERRUPT IS ENABLED, TO DENOTE THE CONVERSION IS OVER OR NOT
ADCSequenceEnable(ADC0_BASE, 1); // ENABLE THE SEQUENCE 1 FOR ADC0
while(1)
{
ADCIntClear(ADC0_BASE, 1); // CLEAR INTERRUPT FLAG FOR ADC0, SEQUENCER 1
ADCProcessorTrigger(ADC0_BASE, 1); // TRIGGER IS GIVEN FOR ADC 0 MODULE,SEQUENCER 1
while(!ADCIntStatus(ADC0_BASE, 1, false)) // CHECK WHETHER THE CONVERSION IS OVER OR NOT
{
}
ADCSequenceDataGet(ADC0_BASE, 1, ui32ADC0Value); // STORE THE CONVERTED VALUE FOR ALL DIFFERENT SAMPLING IN ARRAY ui32ADC0Value
ui32TempAvg = (ui32ADC0Value[0] + ui32ADC0Value[1] + ui32ADC0Value[2] + ui32ADC0Value[3])/4; // TAKING THE AVERAGE
ui32TempValueC = (1475 - ((2475 * ui32TempAvg)) / 4096)/10; // CONVERSION FOR CELSIUS
ui32TempValueF = ((ui32TempValueC * 9) + 160) / 5; // CONVERSION FOR FAHRENHEIT
}
}
I have doubt in the above code :
1) Is it possible to get the ADC value without enabling interrupt ? (ADC_CTL_IE)
2) ADCSequenceStepConfigure(ADC0_BASE, 1, 0, ADC_CTL_TS); - This line denotes that the input signal is sampled once ??? is it correct.
Need a explanation for the lines below
ADCSequenceConfigure(ADC0_BASE, 1, ADC_TRIGGER_PROCESSOR, 0);
ADCSequenceStepConfigure(ADC0_BASE, 1, 0, ADC_CTL_TS);
ADCSequenceStepConfigure(ADC0_BASE, 1, 1, ADC_CTL_TS);
ADCSequenceStepConfigure(ADC0_BASE, 1, 2, ADC_CTL_TS);
ADCSequenceStepConfigure(ADC0_BASE,1,3,ADC_CTL_TS|ADC_CTL_IE|ADC_CTL_END);
