Hello All,
Iam using a TM4C123GH6PM custom board. Iam trying to use the internal ADC in differential mode but somehow my ADC output is not coming correctly when I'am using multiple ADC pins.
I followed the ADC differential example and it works for single channel using sample sequencer 0.
However , When I use multiple pins with sample sequencer 2, The ADC FIFO result is incorrect as Iam getting signal only on
ui32ADC0Value[0]
ui32ADC0Value[1] is showing incorrect result.
Ia'm just testing with two input channels first.
Below is my code. Iam using timer to trigger the ADC with sampling rate as 256Hz
#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include "inc/tm4c123gh6pm.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_gpio.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "driverlib/interrupt.h"
#include "driverlib/timer.h"
#include "driverlib/adc.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "utils/uartstdio.h"
uint32_t ui32ADC0Value[4];
uint32_t outputsamples1;
uint32_t outputsamples2;
uint32_t outputsamples3;
uint32_t outputsamples4;
void Timer0IntHandler(void)
{
    TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
    //GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_3, 0xFF);
    ADCSequenceConfigure(ADC0_BASE, 2, ADC_TRIGGER_TIMER, 0);
    //m=m+1;
}
int main(void)
{
   // uint32_t ui32ADC0Value[8];
    uint32_t ui32Period;
    SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); // clock at 80 Mhz
    ui32SysClkFreq = 80000000;
    /*********************PIN INTILIAZATION********************************/
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
                while(!(SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOE)));
                GPIOPinTypeADC(GPIO_PORTE_BASE,GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);
                SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
                            while(!(SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOD)));
                            HWREG(GPIO_PORTD_BASE+GPIO_O_LOCK) = GPIO_LOCK_KEY;
                            HWREG(GPIO_PORTD_BASE+GPIO_O_CR) |= GPIO_PIN_7;
                            GPIOPinTypeADC(GPIO_PORTD_BASE,GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);
    /*********************ADC INTILIAZATION********************************/
                SysCtlPeripheralDisable(SYSCTL_PERIPH_ADC0);
                  SysCtlPeripheralReset(SYSCTL_PERIPH_ADC0);
                SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
                while(!(SysCtlPeripheralReady(SYSCTL_PERIPH_ADC0)));
                
                 ADCSequenceDisable(ADC0_BASE, 2);
                            
                            ADCSequenceStepConfigure(ADC0_BASE,2,0,ADC_CTL_D|ADC_CTL_CH0);
                            ADCSequenceStepConfigure(ADC0_BASE,2,1,ADC_CTL_D|ADC_CTL_CH1);
                            ADCSequenceStepConfigure(ADC0_BASE,2,2,ADC_CTL_D|ADC_CTL_CH2);
                            ADCSequenceStepConfigure(ADC0_BASE,2,3,ADC_CTL_D|ADC_CTL_CH3|ADC_CTL_IE|ADC_CTL_END);
                           
                            ADCSequenceEnable(ADC0_BASE, 2);
     /*********************TIMER0 INTILIAZATION********************************/
        SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
                    TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);
                    ui32Period = 80000000/256;
                    TimerLoadSet(TIMER0_BASE, TIMER_A, ui32Period-1);
                    TimerControlTrigger(TIMER0_BASE, TIMER_A, true);
IntEnable(INT_TIMER0A);
                                TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
                                TimerEnable(TIMER0_BASE, TIMER_A);
                    IntMasterEnable();
        while(1)
        {
            ADCIntClear(ADC0_BASE, 2);
                    while(!ADCIntStatus(ADC0_BASE, 2, false))
                    {
                    }
                    ADCSequenceDataGet(ADC0_BASE, 2, ui32ADC0Value);
outputsamples1 =  ui32ADC0Value[0];
                    outputsamples2 =  ui32ADC0Value[1];
                    outputsamples3 =  ui32ADC0Value[2];
                    outputsamples4 =  ui32ADC0Value[3];
}
}
Kindly suggest a solution.
 
				 
		 
					 
                           
				