Имеется плата "EVODBG LM3S9B90" на
LM3S9B92 МК'ре.
Пытаюсь поднять АЦП. Столкнулся с тем, что в регистре
ADCSSFSTAT поле
EMPTY остается
1, даже после получения данных.
Данные в
FIFO - появляются, их даже можно получить читая регистр
ADC_SSFIFO_R.
Проблема в том, что ф-ия
ADCSequenceDataGet()[DriverLib] делает в коде проверку на
EMPTY, и соответственно данные не считывает.
Почему в
EMPTY не записывается
0 - понять не могу. Надеюсь на вашу помощь.
Код
#include "driverlib\gpio.c"
#include "driverlib\adc.c"
#include "driverlib\sysctl.c"
void main(void)
{
unsigned long buff[8];
//
// Enable GPIO PORT E
//
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_3 | GPIO_PIN_2);
HWREG(GPIO_PORTE_BASE + GPIO_O_AFSEL) |= GPIO_PIN_3 | GPIO_PIN_2;
//
// Enable ADC converter;
// Set ADC Speed.
//
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC1);
SysCtlADCSpeedSet(SYSCTL_ADCSPEED_1MSPS);
//
// Disable sample sequencers.
//
ADCSequenceDisable(ADC1_BASE, 0);
//
// Configure sample sequencers.
//
ADCSequenceConfigure(ADC1_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);
//
// Configure steps for ADC1.
//
ADCSequenceStepConfigure(ADC1_BASE, 0, 0, ADC_CTL_CH8 | ADC_CTL_END | ADC_CTL_IE);
//
// Enable sample sequencers.
//
ADCSequenceEnable(ADC1_BASE, 0);
//
// Enable Interrupts.
//
ADCIntEnable(ADC1_BASE, 0);
//
// Trigger ADC.
//
ADCProcessorTrigger(ADC1_BASE,0);
//
// Wait for interrupt
//
while(!ADCIntStatus(ADC1_BASE, 0, false))
{
}
//
// Get data from FIFO
//
ADCSequenceDataGet(ADC1_BASE, 0, &buff); // This function doesn't works, because EMTPY field is 1
// buff = ADC1_SSFIFO0_R; // Reads Data Direct from FIFO - works
}