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.
工具/软件:Code Composer Studio
您好!
我正在使用 TM4C129ENCPDT。 我想使用 SPI 与 AMC7820通信。 我正在将值写入 AMC 7280的 DAC0、并使用 SPI 进行回读。
当我执行多个读操作时,首先读回值正确,然后显示随机值。 经过一个周期后、它会显示正确的值
void SPIRead (int 端口、int 引脚、uint8_t * pui32DataTx、uint32_t ui32Count、int SPIBase)
{
char buf[25]={0};
int ireadValue=0;
GPIOPinWrite (端口、引脚、0);// CS 低电平;AMC 预期低电平有效控制信号
SysCtlDelay (SysCtlClockGet ()/3);//1秒延迟
SSIDataPut (SPIBase、pui32DataTx[0]);
SysCtlDelay (SysCtlClockGet ()/100);
while (SSIBusy (SPIBase));
SSIDataPut (SPIBase、pui32DataTx[1]);
SysCtlDelay (SysCtlClockGet ()/100);
//
//等待 SSI0完成传输发送 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 (端口、引脚、引脚);//将 CS 复位为高电平
SysCtlDelay (SysCtlClockGet ()/3);//1秒延迟
ireadValue = pui32DataRx[0];
ireadValue = ireadValue << 8;
ireadValue |= pui32DataRx[1];
sprintf (buf、"SPI 读取<%x>\n"、ireadValue);
UARTSend (((uint8_t *) buf、strlen (buf)、UART5_BASE);
}
void SPIwrite (int 端口、int 引脚、uint8_t * pui32DataTx、uint32_t ui32Count、int SPIBase)
{
char buf[25]={0};
int ireadValue=0;
GPIOPinWrite (端口、引脚、0);// CS 低电平;AMC 预期低电平有效控制信号
SysCtlDelay (SysCtlClockGet ()/3);//1秒延迟
//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 (端口、引脚、引脚);//将 CS 复位为高电平
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);
}
等待您的建议
此致
GPM
尊敬的 Bob:
我按如下方式配置 SSI
void SSI2Init (void)//
{
//
//必须启用 SSI2外设才能使用。
//
SysCtlPeripheralEnable (SYSCTL_Periph_SSI2);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
//
//为端口 D0、D1和 D3上的 SSI0功能配置引脚复用。
//
GPIOPinConfigure (GPIO_PD0_SSI2XDAT1);
GPIOPinConfigure (GPIO_PD1_SSI2XDAT0);
GPIOPinConfigure (GPIO_PD3_SSI2CLK);
//
//配置 SSI 引脚的 GPIO 设置。
//
GPIOPinTypeSSI (GPIO_PORTD_base、GPIO_PIN_3 | GPIO_PIN_1 | GPIO_PIN_0);
//
//为 SPI 主控模式配置和启用 SSI 端口。 使用 SSI2、
//
SSIConfigSetExpClk (SSI2_base、g_ui32SysClock、SSI_FRF_MOTO_MOTO_MODE_1、
SSI_MODE_MASTER、1000000、8);
//
//启用 SSI2模块。
//
SSIEnable (SSI2_base);
//
//从 SSI 端口读取任何残留数据。
//
while (SSIDataGetNonBlocking (SSI2_base、&pui32DataRx[0]))
{
}
}
此致
GPM