Other Parts Discussed in Thread: AMC7820,
Tool/software: Code Composer Studio
Hi,
i am working on TM4C129ENCPDT. I wants to communicate with AMC7820 Using SPI. I am writing a value to DAC0 of AMC 7280 and it read back using SPI.
when i perform multiple read operations, first read back value is correct, then it shows random values . after some cycles it shows correct values
void SPIRead(int port,int pin, uint8_t *pui32DataTx,uint32_t ui32Count,int SPIBase)
{
char buf[25]={0};
int ireadValue=0;
GPIOPinWrite(port, pin,0);// CS LOw; AMC expects Active low control signal
SysCtlDelay(SysCtlClockGet()/3);//1 sec delay
SSIDataPut(SPIBase, pui32DataTx[0]);
SysCtlDelay(SysCtlClockGet()/100);
while(SSIBusy(SPIBase));
SSIDataPut(SPIBase,pui32DataTx[1]);
SysCtlDelay(SysCtlClockGet()/100);
//
// Wait until SSI0 is done transferring all the data in the transmit FIFO.
//
while(SSIBusy(SPIBase));
for(ui32Index = 0; ui32Index < ui32Count; ui32Index++)
{
SSIDataPut(SPIBase, 0xFF/*pui32DataTx[ui32Index]*/);
SSIDataGet(SPIBase, &pui32DataRx[ui32Index]);
}
SysCtlDelay(SysCtlClockGet()/100);
while(SSIBusy(SPIBase));
pui32DataRx[0] &= 0x00FF;
pui32DataRx[1] &= 0x00FF;
GPIOPinWrite(port, pin,pin);// Reset CS to High
SysCtlDelay(SysCtlClockGet()/3);//1 sec delay
ireadValue = pui32DataRx[0];
ireadValue = ireadValue << 8;
ireadValue |= pui32DataRx[1];
sprintf(buf,"SPI Read <%x>\n",ireadValue);
UARTSend((uint8_t *)buf,strlen(buf),UART5_BASE);
}
void SPIwrite(int port,int pin, uint8_t *pui32DataTx, uint32_t ui32Count,int SPIBase)
{
char buf[25]={0};
int ireadValue=0;
GPIOPinWrite(port, pin,0);// CS LOw; AMC expects Active low control signal
SysCtlDelay(SysCtlClockGet()/3);//1 sec delay
//SysCtlDelay(SysCtlClockGet()/100);
SSIDataPut(SPIBase, pui32DataTx[0]);
SysCtlDelay(SysCtlClockGet()/100);
while(SSIBusy(SPIBase));
SSIDataPut(SPIBase, pui32DataTx[1]);
SysCtlDelay(SysCtlClockGet()/100);
while(SSIBusy(SPIBase));
for(ui32Index = 2; ui32Index < ui32Count; ui32Index++)
{
SSIDataPut(SPIBase, pui32DataTx[ui32Index]);
SSIDataGet(SPIBase, &temp1/*&pui32DataRx[ui32Index-2]*/);
}
while(SSIBusy(SPIBase));
GPIOPinWrite(port, pin,pin);// Reset CS to High
SysCtlDelay(SysCtlClockGet()/100);
ireadValue = pui32DataTx[2];
ireadValue = ireadValue << 8;
ireadValue |= pui32DataTx[3];
sprintf(buf,"SPI write <%x>\n",ireadValue);
UARTSend((uint8_t *)buf,strlen(buf),UART5_BASE);
}
waiting for your suggessions
Regards
GPM