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); }