Пытаюсь поднять АЦП. Столкнулся с тем, что в регистре 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
}
#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
}