Other Parts Discussed in Thread: EK-TM4C1294XL, EK-TM4C129EXL,
I'd appreciate some help getting my ADC off the ground using Tivaware and the pinmux tool outputs. Presently, I see no variation in my output (adc_buffer) in the expressions watch window when set to continuously refresh. I've tried to follow the example from "Creating IoT Solutions with the Tiva C Series Connected LaunchPad Workshop" with minor modifications to fit my program structure. Any advice?
Excerpt from pinmux.c showing configuration of these pins for analog inputs when PinoutSet() is called:
// Configure the GPIO Pin Mux for PE3 // for AIN0 // MAP_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_3); // // Configure the GPIO Pin Mux for PE1 // for AIN2 // MAP_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_1); // // Configure the GPIO Pin Mux for PE2 // for AIN1 // MAP_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_2); // // Configure the GPIO Pin Mux for PE0 // for AIN3 // MAP_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0);
Main code:
#define TARGET_IS_TM4C129_RA2 //#include standard C libraries #include <stdint.h> #include <stdbool.h> //#include Pinmux files #include "pinout.h" //#include Tivaware libraries #include <hw_adc.h> #include <adc.h> #include <hw_can.h> #include <hw_gpio.h> #include <hw_ints.h> #include <hw_memmap.h> #include <hw_pwm.h> #include <hw_ssi.h> #include <hw_uart.h> #include <sysctl.h> #include <systick.h> #include <rom.h> #include <rom_map.h> #include <gpio.h> //#include <tm4c129encpdt.h> //inclusion generates 100+ warnings about incompatible redefinition of macros (?) //Variable declarations uint32_t timer_count; const uint32_t timer_max = 99999; //ADC read variables uint32_t adc_buffer[4]; volatile uint32_t rail_voltage_24v; volatile uint32_t rail_voltage_5v; volatile uint32_t rail_voltage_3v3; volatile uint32_t tiva_temperature; //Function declarations void processor_setup(void); void peripheral_setup(void); void delay_time(void); void systick_int_handler(void); /** * main.c */ void main(void) { processor_setup(); peripheral_setup(); //Main infinite loop for (;;) { //First Half delay_time(); GPIOPinWrite(GPIO_PORTH_BASE, GPIO_PIN_3, GPIOPinRead(GPIO_PORTH_BASE,0xFF)^0xFF); ADCIntClear(ADC0_BASE, 0); //base, SequenceNumber ADCProcessorTrigger(ADC0_BASE, 0); //base, SequenceNumber //Second Half delay_time(); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_ADC0)) { } ADCSequenceDataGet(ADC0_BASE, 0, adc_buffer); rail_voltage_24v = adc_buffer[0]; rail_voltage_5v = adc_buffer[1]; rail_voltage_3v3 = adc_buffer[2]; tiva_temperature = adc_buffer[3]; } } void processor_setup(void){ //Processor Pin configuration (from pinmux tool) PinoutSet(); //SysTick Timer Setup for ~0.5s intervals (1 sec LED toggles) SysTickPeriodSet(25000000); SysTickEnable(); SysTickIntEnable(); SysTickIntRegister(systick_int_handler); //Onboard ADC Configuration to read 3 external analog inputs on pins 13,14,15 and internal temperature //read on sequence 0 with highest priority SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); //p.501 of Tivaware manual SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_ADC0)) { } //ADCSequenceConfigure(ADC0_BASE, 0, ADC_TRIGGER_ALWAYS, 0); //Base, SequenceNum, Trigger, Priority ADCSequenceConfigure(ADC0_BASE, 0, ADC_TRIGGER_PROCESSOR, 0); //Base, SequenceNum, Trigger, Priority ADCSequenceStepConfigure(ADC0_BASE, 0, 0, (ADC_CTL_CH1)); //Base, SequenceNum, Step, Config ADCSequenceStepConfigure(ADC0_BASE, 0, 1, (ADC_CTL_CH2)); //Base, SequenceNum, Step, Config ADCSequenceStepConfigure(ADC0_BASE, 0, 2, (ADC_CTL_CH3)); //Base, SequenceNum, Step, Config ADCSequenceStepConfigure(ADC0_BASE, 0, 3, (ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END)); //Base, SequenceNum, Step, Config ADCReferenceSet(ADC0_BASE, ADC_REF_EXT_3V); ADCSequenceEnable(ADC0_BASE, 0); //Base, SequenceNum //Load //VAL //CTRL //CAN Configuration //SPI Configuration } void peripheral_setup(void){ ////Peripheral setup//// //includes thermocouple input ADCs, 4to20 mA ADCs and DACs //4-20 Transmitter Configuration //4-20 Reciever Configuration //Thermocouple Configuration } void delay_time(void){ for (timer_count = 1; timer_count <= timer_max/2; timer_count++) { } } void systick_int_handler(void){ GPIOPinWrite(GPIO_PORTH_BASE, GPIO_PIN_2, GPIOPinRead(GPIO_PORTH_BASE,0xFF)^0xFF); }