Tool/software: Code Composer Studio
Hello all,
Now, that's a more complex problem I have (I think), I spent hours trying to make ADC work, without success. I'm trying to read 7 values, on pins PE0 through PE4, PB4 and PB5. When I apply 3V3 on all pins, PE0 PE1 PE2 and PE3 are reading 3V3 normally, but the others fluctuate between 3V3 and random values. When I try to read some pin alone, all the pins fluctuate.
What I tried to do:
- Enable only ADC0, SS0
- Enable ADC0 and ADC1, both SS1
- Change the clock source from PIOSC to PLL (configuring to give 16MHz on both)
- Change TRIGGER_ALWAYS to TRIGGER_TIMER
- Trigger the ADC at low speed (1Hz)
- Comment out the ADCReferenceSet()
What I have enabled on my project:
- TIMER0,1,2,3,4,5
- WTIMER0,2
- WTIMER1 as edge capture pins PC6 PC7
- PWM0, pins PB7 PC5 PE5
- PWM1, pin PF1
- OUTPUT Pins PB2 PB3 PD0 PD1 PD2 PD3
- INPUT Pins PA2 PA3 PA4 PA5
- UART0 and PA0 PA1
- HIBERNATE RTC
- ADC0 Pins PE0 PE1 PE2 PE3
- ADC1 Pins PE4 PB4 PB5
Here is some sample code I'm using to config ADC:
inline void config_ADC0(void) { MAP_SysCtlPeripheralDisable(SYSCTL_PERIPH_ADC0); MAP_SysCtlPeripheralReset(SYSCTL_PERIPH_ADC0); MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); while(!MAP_SysCtlPeripheralReady(SYSCTL_PERIPH_ADC0)); MAP_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); MAP_ADCReferenceSet(ADC0_BASE, ADC_REF_INT); MAP_ADCSequenceConfigure(ADC0_BASE, 1, ADC_TRIGGER_TIMER, 0x00); MAP_ADCSequenceStepConfigure(ADC0_BASE, 1, 0, ADC_CTL_CH0 | ADC_CTL_IE); MAP_ADCSequenceStepConfigure(ADC0_BASE, 1, 1, ADC_CTL_CH1 | ADC_CTL_IE); MAP_ADCSequenceStepConfigure(ADC0_BASE, 1, 2, ADC_CTL_CH2 | ADC_CTL_IE); MAP_ADCSequenceStepConfigure(ADC0_BASE, 1, 3, ADC_CTL_CH3 | ADC_CTL_IE | ADC_CTL_END); ADCClockConfigSet(ADC0_BASE, ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL, 25); MAP_ADCHardwareOversampleConfigure(ADC0_BASE, 64); MAP_ADCSequenceEnable(ADC0_BASE, 1); MAP_IntDisable(INT_ADC0SS1); MAP_ADCIntDisable(ADC0_BASE, 1); MAP_IntPendClear(INT_ADC0SS1); MAP_ADCIntClear(ADC0_BASE, 1); MAP_IntPrioritySet(INT_ADC0SS1, 0x20); MAP_IntEnable(INT_ADC0SS1); MAP_ADCIntEnable(ADC0_BASE, 1); } inline void config_ADC1(void) { MAP_SysCtlPeripheralDisable(SYSCTL_PERIPH_ADC1); MAP_SysCtlPeripheralReset(SYSCTL_PERIPH_ADC1); MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC1); while(!MAP_SysCtlPeripheralReady(SYSCTL_PERIPH_ADC1)); MAP_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_4); MAP_GPIOPinTypeADC(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5); MAP_ADCReferenceSet(ADC1_BASE, ADC_REF_INT); MAP_ADCSequenceConfigure(ADC1_BASE, 1, ADC_TRIGGER_TIMER, 0x00); MAP_ADCSequenceStepConfigure(ADC1_BASE, 1, 0, ADC_CTL_CH9 | ADC_CTL_IE); MAP_ADCSequenceStepConfigure(ADC1_BASE, 1, 1, ADC_CTL_CH10 | ADC_CTL_IE); MAP_ADCSequenceStepConfigure(ADC1_BASE, 1, 2, ADC_CTL_CH11 | ADC_CTL_IE | ADC_CTL_END); ADCClockConfigSet(ADC1_BASE, ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL, 25); MAP_ADCHardwareOversampleConfigure(ADC1_BASE, 64); MAP_ADCSequenceEnable(ADC1_BASE, 1); MAP_IntDisable(INT_ADC1SS1); MAP_ADCIntDisable(ADC1_BASE, 1); MAP_IntPendClear(INT_ADC1SS1); MAP_ADCIntClear(ADC1_BASE, 1); MAP_IntPrioritySet(INT_ADC1SS1, 0x20); MAP_IntEnable(INT_ADC1SS1); MAP_ADCIntEnable(ADC1_BASE, 1); }
I have no idea what to do next. Suggestions?
Thanks!