Part Number: TM4C129ENCPDT
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);
}

