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.

ADS8332: ADS8332 Interfaced with TM4C123

Part Number: ADS8332

Hi,

I have interfaced ADS8332 with TM4C123 on SSI2. 

Configured clock at 20MHz.

Writing to configuration register CMR + CFR = 0xE7BD. (proded on oscilloscope)

But reading back CFR with 0xC000 I am not getting back 0x7BD.

Please let me know where I am going wrong, attached Is my code and schematics.

Thanks and Regards,

Dileep

ADS8332.c
#include "board_config.h"

#define SDC_SSI_FLASH_BASE            SSI2_BASE
#define SDC_SSI_FLASH_SYSCTL_PERIPH   SYSCTL_PERIPH_SSI2

// GPIO for SSI pins
#define SDC_GPIO_PORT_FLASH_BASE      GPIO_PORTB_BASE
#define SDC_GPIO_SYSCTL_FLASH_PERIPH  SYSCTL_PERIPH_GPIOB
#define SDC_SSI_FLASH_CLK             GPIO_PIN_4
#define SDC_SSI_FLASH_TX              GPIO_PIN_7
#define SDC_SSI_FLASH_RX              GPIO_PIN_6
#define SDC_SSI_FLASH_FSS             GPIO_PIN_5
#define SDC_SSI_FLASH_PINS            (SDC_SSI_FLASH_TX | SDC_SSI_FLASH_RX | SDC_SSI_FLASH_CLK |      \
																			SDC_SSI_FLASH_FSS)


#define CS_HIGH ROM_GPIOPinWrite(SDC_GPIO_PORT_FLASH_BASE, SDC_SSI_FLASH_FSS, SDC_SSI_FLASH_FSS);
#define CS_LOW ROM_GPIOPinWrite(SDC_GPIO_PORT_FLASH_BASE, SDC_SSI_FLASH_FSS, 0);

volatile uint32_t ADS8332_TimerTick;

volatile uint32_t App_ReadDataCounter;
volatile uint32_t App_ReadData;

void ADS8332_TickHandler(void)
{
	ADS8332_TimerTick++;

	App_ReadDataCounter++;

	if(App_ReadDataCounter > 1000)
	{
		App_ReadData = 1;
		App_ReadDataCounter = 0;
	}
}

void ADS8332_delay(uint32_t delay)
{
	ADS8332_TimerTick = 0;

	while(ADS8332_TimerTick <= delay);
}

void ADS8332_Reset(void)
{
	ROM_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0, 0);
	ADS8332_delay(1);
	UARTprintf("ADS8332_Reset\r\n");
	ROM_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_PIN_0);
}

void ADS8332_Conversion(void)
{
	ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 0);
	ADS8332_delay(1);
	ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, GPIO_PIN_0);
}

void ADS833x_DefaultMode(void)
{
	CS_LOW;

		ROM_SSIDataPut(SDC_SSI_FLASH_BASE, 0xF000);


	ADS8332_delay(1);

	CS_HIGH;
}

void ADS833x_Wakeup(void)
{
	CS_LOW;

		ROM_SSIDataPut(SDC_SSI_FLASH_BASE, 0xB000);


	ADS8332_delay(1);

	CS_HIGH;
}

void ADS833x_ResetCMD(void)
{
	CS_LOW;

		ROM_SSIDataPut(SDC_SSI_FLASH_BASE, 0xE000);


	ADS8332_delay(1);

	CS_HIGH;
}


uint32_t ADS833x_ReadCFRRegister(void)     // Read CFR register
{
	uint32_t rData0;


	CS_LOW;

		ROM_SSIDataPut(SDC_SSI_FLASH_BASE, 0xC000);

    ROM_SSIDataGet(SDC_SSI_FLASH_BASE, &rData0);

	ADS8332_delay(1);

	CS_HIGH;

	return rData0;
}

uint32_t ADS833x_WriteCFRRegister(uint32_t value)     // Read CFR register
{
	uint32_t rData0;

	CS_LOW;

		ROM_SSIDataPut(SDC_SSI_FLASH_BASE, value);

    ROM_SSIDataGet(SDC_SSI_FLASH_BASE, &rData0);

	ADS8332_delay(1);

	CS_HIGH;

	return rData0;
}

uint32_t ADS833x_ReadData(void)     // Read CFR register
{
	uint32_t rData0;

	CS_LOW;

		ROM_SSIDataPut(SDC_SSI_FLASH_BASE, 0xD000);

    ROM_SSIDataGet(SDC_SSI_FLASH_BASE, &rData0);

	ADS8332_delay(1);

	CS_HIGH;

	return rData0;
}

void ADS8332_Cyclic(void)
{
	if(App_ReadData)
	{
		ADS833x_WriteCFRRegister(0xE7BD);
		ADS8332_delay(1);
		UARTprintf("ADS8332_Cyclic : 0x%x\r\n", ADS833x_ReadCFRRegister());
		App_ReadData = 0;
	}
}



void ADS8332_SPI_Init(void)
{
	UARTprintf("ADS8332_SPI_Init\r\n");
    /*
     * This doesn't really turn the power on, but initializes the
     * SSI port and pins needed to talk to the card.
     */

	//CONVST
  ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
  /* Configure PB5 as output */
  ROM_GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_5);
	ROM_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5, GPIO_PIN_5);

    /* Enable the peripherals used to drive the SDC on SSI */
    ROM_SysCtlPeripheralEnable(SDC_SSI_FLASH_SYSCTL_PERIPH);
    ROM_SysCtlPeripheralEnable(SDC_GPIO_SYSCTL_FLASH_PERIPH);

    /*
     * Configure the appropriate pins to be SSI instead of GPIO. The FSS (CS)
     * signal is directly driven to ensure that we can hold it low through a
     * complete transaction with the SD card.
     */
    ROM_GPIOPinTypeSSI(SDC_GPIO_PORT_FLASH_BASE, SDC_SSI_FLASH_TX | SDC_SSI_FLASH_RX | SDC_SSI_FLASH_CLK);
    ROM_GPIOPinTypeGPIOOutput(SDC_GPIO_PORT_FLASH_BASE, SDC_SSI_FLASH_FSS);

    ROM_GPIOPinConfigure(GPIO_PB4_SSI2CLK);
//    ROM_GPIOPinConfigure(GPIO_PB5_SSI2FSS);
    ROM_GPIOPinConfigure(GPIO_PB6_SSI2RX);
    ROM_GPIOPinConfigure(GPIO_PB7_SSI2TX);

    /*
     * Set the SSI output pins to 4MA drive strength and engage the
     * pull-up on the receive line.
     */
    ROM_GPIOPadConfigSet(SDC_GPIO_PORT_FLASH_BASE, SDC_SSI_FLASH_RX, GPIO_STRENGTH_4MA,
                         GPIO_PIN_TYPE_STD_WPU);
    ROM_GPIOPadConfigSet(SDC_GPIO_PORT_FLASH_BASE, SDC_SSI_FLASH_CLK | SDC_SSI_FLASH_TX | SDC_SSI_FLASH_FSS,
                         GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD);

    /* Configure the SSI2 port */
    ROM_SSIConfigSetExpClk(SDC_SSI_FLASH_BASE, ROM_SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 20000000, 16);
    ROM_SSIEnable(SDC_SSI_FLASH_BASE);

		CS_HIGH;
}


void ADS8332_Init(void)
{
	UARTprintf("ADS8332_Init\r\n");

	//Reset
  ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
  /* Configure PB0 as output */
  ROM_GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_0);
	ROM_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_PIN_0);

	//EOC
  ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
  /* Configure PF1 as input */
  ROM_GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_1);

	//CONVST
  ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
  /* Configure PF0 as output */
  ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_0);
	ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, GPIO_PIN_0);

	ADS8332_SPI_Init();

	ADS8332_Reset();

	ADS833x_ResetCMD();

	ADS833x_DefaultMode();

	ADS833x_Wakeup();

	ADS833x_WriteCFRRegister(0xE7BD);

	//ADS833x_WriteCFRRegister(0x0000);
}