Hi I am using Stellaris LM3S3748 EVB I wrote a program to keep reading analog input from pin ADC0 and write it to GPIO pin PA0/U0RX
I want someone to verify that the code is correct and guide me if there is an issue.
This code is working without errors
#include "hw_types.h"
#include "hw_memmap.h"
#include "driverlib/adc.h"
#include "inc/lm3s3748.h"
#include <stdio.h>
#include "driverlib/gpio.h"
#include "hw_types.h"
#include "hw_ints.h"
#include "driverlib/sysctl.h"
#include "utils/ustdlib.h"
void main()
{
unsigned long ADC0Value[1];
// CLK for LM3S3748 16MHz for Phase Lock Loop
SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
//ENABLE ADC0 PORT TO BE CONFIGURED
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
//ENABLE GPIO PORT-A0 (PA0/U0RX) TO BE CONFIGURED
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
//SPECIFY PORT-A0 (PA0/U0RX) TO WORK WITH THE ADC MODULE
GPIOPinTypeADC(GPIO_PORTA_BASE, GPIO_PIN_0);
//CONFIGURE SAMPLE SEQUENCER 3 STEP 0 TO RUN WHEN THE PROCESSOR IS TRIGGERED
ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
//CONFIGURE PIN ADC0, SET INTERRAUPT FLAG WHEN ADC IS DONE, TELL THE ADC IT'S THE LAST CONVERSION IN SEQUENCER 3
ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END);
//AFTER CONFIGURATION IS DONE, ENABLE THE ADC MODULE
ADCSequenceEnable(ADC0_BASE, 3);
//CLEAR INTERRUPT FLAG ON SEQUENCE 3
ADCIntClear(ADC0_BASE, 3);
//FOREVER LOOP
while(1)
{
//TRIGGER ADC
ADCProcessorTrigger(ADC0_BASE, 3);
//WAIT UNTILL THE CONVERSION IS FINISHED
while(!ADCIntStatus(ADC0_BASE, 3, false))
{}
//CLEAR INTERRUPT FLAG
ADCIntClear(ADC0_BASE, 3);
//RETRIVE ADC FIFO RESULT
ADCSequenceDataGet(ADC0_BASE, 3, ADC0Value);
//SET GPIO PIN A0 AS AN OUTPUT
GPIODirModeSet(GPIO_PORTA_BASE, 0x01, GPIO_DIR_MODE_OUT);
//WRITE ADC RESULT TO PIN PA0
GPIOPinWrite(GPIO_PORTA_BASE, 0x01,ADC0Value[0]);
SysCtlDelay(SysCtlClockGet() / 12);
}
}
thanks in advance