This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CCS/ADS8586S: Problem reading ADC values. Can't even catch BUSY going UP on an Interrupt.

Part Number: ADS8586S
Other Parts Discussed in Thread: MSP-EXP432E401Y,

Tool/software: Code Composer Studio

Hello, I'm kinda new on the TI development scene, and some what on embedded devices, please pardon me if I'm missing something obvious.

I'm currently using the MSP-EXP432E401Y launchpad board, so I have all the GPIO's I'm using in the project available as well as some leds to help with Dev/Debug.
Not using USB nor Ethernet.

I'm trying to communicate with an ADS8586S so I can sample all the 6 channels at the same time, and have them sent via SPI/SSI (Serial) to the MSP-EXP432E401Y.
I haven saw really any example about the serial communication with the device, I'm kinda trying to implement it myself using some SPI/SSI examples, but if by any chance anyone as some simple code to do it, I'll be really thankful.

The problem, I set PP4 and PP5 to catch pin changes on both edges (Interrupts), one for BUSY and another for FRSTDATA (I'll appreciate any input regard this approach).
The interrupts are working, tested by manually put the pin up or down(3.3V/0V).

When trying to start a conversion (CONVSTA && CONVSTB Connected to the same track) never get the Busy signal from the ADC.

Here is the initial part where I setup and try to get the BUSY signal from PP5

Main:

GPIOPinWrite(ADC_RESET_PORT, ADC_RESET_PIN, ADC_RESET_PIN);
DelayMicros(1); //Created function witch use: SysCtlDelay(g_ui32SysClock / 3 / 1000000*ui32Micros);
GPIOPinWrite(ADC_RESET_PORT, ADC_RESET_PIN, 0);
DelayMicros(1);
GPIOPinWrite(ADC_CONVERT_PORT, ADC_CONVERT_PIN, ADC_CONVERT_PIN);
DelayMicros(1);
while(BUSY){
    //Just wait, after all, it's busy...
};


Interrupt:

//ADC_BUSY_PIN - BUSY HANDLER - Handles the ADC busy state.
void
GPIOP5_IRQHandler(void)
{
    uint32_t getIntStatus;
    getIntStatus = MAP_GPIOIntStatus(GPIO_PORTP_BASE, true);
    MAP_GPIOIntClear(GPIO_PORTP_BASE, getIntStatus);
    BUSY = false;
    //UARTprintf("BUSY = False?\n");
}


The code stuck on while (BUSY), its checks because I never get to the interrupt handler.
 
Already check all the signals reaching the ADS8586S and they are there, AVDD 5V from 5V regulator, DVDD 3.3V from the MSP-EXP432E401Y board. STBY = 3.3V, RANGE = 3.3V.

If its needed more code, please fell free to ask.

Any help will be much appreciated! Thank you.

  • Hello Andre,

    You did not see a BUSY signal from ADC, this means the ADC did not work for conversion. I need following information to check:

    • Timing plot (SCLK,/CS,CONVSTx and DOUTA or BUSY) captured with an oscilloscope.
    • Schematic for your circuit.

    Thanks.

    Regards,

    Dale