Hi !
I wrote the simple code just to configure and test the ADC of TM4C1294. I configured the four channels(PE4,PE5,PB4,PB5) to ADC0 module. i configurered the ADC Interrupt for sample seuqence2,(ADC0SS2) but the ADC does not triggers the interrupt.
Below is the code, i wrote , please let me know about the bugs in my code.
Thanks in Advance.
#include <stdbool.h>
#include <stdint.h>
#include "inc/hw_memmap.h"
#include"inc/hw_types.h"
#include "driverlib/adc.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "inc/hw_ints.h"
#include "driverlib/interrupt.h"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
uint32_t pui32ADC0Value[4];
void ADC0SS2IntHandler(void);
void ADC0SS2IntHandler(void){
ADCSequenceDataGet(ADC0_BASE, 2,pui32ADC0Value);
ADCIntClear(ADC0_BASE, 2); // CLEAR THE ADC INTERRUPT FOR SAMPLE SEQUENCE-3
}
///////////////////////Main_Program////////////////////////////////////////////
int main(void) {
volatile uint32_t adc0,adc1,adc2,adc3; //declare separate varibles to get separate the each channel output from buffer
volatile float signal_ch0,signal_ch1,signal_ch2,signal_ch3; //declare float variable to get actual analog input value using conversion expression
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION); //ENABLING GPIO PORTN
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); //ENABLING GPIO PORTB USED FOR ADC INPUT
GPIOPinTypeGPIOOutput(GPIO_PORTN_BASE,GPIO_PIN_0); //ENABLING PINO FOR LED BLINKING DURING DELAY
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); //ENABLING GPIO PORTE USED FOR ADC INPUT
GPIOPinTypeADC(GPIO_PORTE_BASE,GPIO_PIN_4); //ENABLING THE PINS USED FOR ADC INPUT
GPIOPinTypeADC(GPIO_PORTE_BASE,GPIO_PIN_5); //
GPIOPinTypeADC(GPIO_PORTB_BASE,GPIO_PIN_4); //
GPIOPinTypeADC(GPIO_PORTB_BASE,GPIO_PIN_5); //
SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ|SYSCTL_OSC_MAIN|SYSCTL_USE_PLL|SYSCTL_CFG_VCO_480),120000000); //ENABLING THE CLOCK
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); // ENABLE THE ADC0-MODULE
ADCHardwareOversampleConfigure(ADC0_BASE,64); //ENABLE THE HARDWARE AVERAGER FOR BETTER ACCURACY
ADCSequenceConfigure(ADC0_BASE,2,ADC_TRIGGER_PROCESSOR,0); //CONFIGURE THE ADC SAMPLE SEQUENCER THAT U WANA USE
ADCSequenceStepConfigure(ADC0_BASE,2,0, ADC_CTL_CH9 ); //CONFIGURE THE STEPS OF SAMPLE SEQUENCER
ADCSequenceStepConfigure(ADC0_BASE,2,1, ADC_CTL_CH8 ); //
ADCSequenceStepConfigure(ADC0_BASE,2,2, ADC_CTL_CH10 ); //
ADCSequenceStepConfigure(ADC0_BASE,2,3, ADC_CTL_CH11|ADC_CTL_IE|ADC_CTL_END ); //
IntEnable(INT_ADC0SS2);
ADCIntEnable(ADC0_BASE,2);
IntMasterEnable();
ADCIntRegister(ADC0_BASE,2,ADC0SS2IntHandler);
// USE LOOP FOR EVER CONVERSION OF ADC
while(1){
ADCProcessorTrigger(ADC0_BASE,2);
//TRIGGER THE ADC BY PROCESSOR
//GET THE CAPTURED DATA FROM SEQUENCER FIFO
adc0=pui32ADC0Value[0]; //PUT THE FIF0 VALUE IN ADC0
adc1=pui32ADC0Value[1]; //PUT THE FIF1 VALUE IN ADC1
adc2=pui32ADC0Value[2]; //PUT THE FIF2 VALUE IN ADC2
adc3=pui32ADC0Value[3]; //PUT THE FIF3 VALUE IN ADC3
//SIGNAL COVERSION FROM DIGITAL TO ANALOG VOLATGE SIGNAL TO CONFIRM THE RESULTS-SEE ATTACHMENT FILE PICTURE
signal_ch0=(((adc0)/4095)*(3.3));
signal_ch1=(((adc1)/4095)*(3.3));
signal_ch2=(((adc2)/4095)*(3.3));
signal_ch3=(((adc3)/4095)*(3.3));
}
}