Other Parts Discussed in Thread: TM4C123GH6PM, ADS127L01
Hi Ai am trying to read data from ADS127L01. here is my initialization code. I get random code back when I do SSIGetData . Not sure what is the right way of reading data which is actually 32 bit in 16 bit data transmissions in one go. i am using ADS127L01 EVM but using my own CPU TM4C123Gh6PM to control ADS127L01.
Attache SSI logic signals screenshot.
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_SSI2));
ROM_GPIOPinConfigure(GPIO_PB6_SSI2RX);
ROM_GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_6);
ROM_GPIOPinConfigure(GPIO_PB5_SSI2FSS);
ROM_GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_5);
ROM_GPIOPinConfigure(GPIO_PB7_SSI2TX);
ROM_GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_7);
ROM_GPIOPinConfigure(GPIO_PB4_SSI2CLK);
ROM_GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_4);
ROM_SSIConfigSetExpClk(SSI2_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_1, SSI_MODE_MASTER, 8000000, 16);
ROM_SSIEnable(SSI2_BASE);
ROM_GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_3); //DREADY PIN active low.
ROM_GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_3, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
uint32_t data[2] = {0,0};
uint32_t result;
char res[80];
ROM_SSIDataPut(SSI2_BASE, 0x08);
while(SSIBusy(SSI2_BASE));
SysCtlDelay(8000);
while(GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_3));
ROM_SSIDataPut(SSI2_BASE, 0x12);
while(SSIBusy(SSI2_BASE));
ROM_SSIDataGet(SSI2_BASE, &data[0]); //
while(SSIBusy(SSI2_BASE));
ROM_SSIDataGet(SSI2_BASE, &data[1]); //
while(SSIBusy(SSI2_BASE));
ROM_SSIDataPut(SSI2_BASE, 0x0A);
while(SSIBusy(SSI2_BASE));
result = data[1]+((data[0]<<16)&0x00FF0000);
//result = (data[1] ) | (data[0]<<16);
sprintf(res, " %d, %d, %.2f, [ %d, %X ] \n",data[0],data[1], (float)result*ADCRES, result, result);
UARTprintf("%s",res);
//UARTprintf("Bytes: %d, %d, [ %d, %X ]\n", data[0], data[1], result ,result);