工具/软件:
尊敬的社区成员:
我们想使用 tm4c123gh6pm 和 SPI 来读取 KSZ8795CLX 以太网交换机的0x00寄存器。
我们预计从 KSZ8795CLX 的0x00寄存器获得0x87的值。
我们 发送0x03 (SPI 读取数据命令)、0x00 (寄存器地址)和4个虚拟字节、同时接收4个字节。
但是、我们尚未设法从寄存器中获取任何有意义的数据。 系统时钟、初始化和读取函数以及逻辑分析仪屏幕截图如下所示:
我们如何解决这个问题?
系统时钟:
SysCtlClockSet (SysCtl_SYSDIV_10 | SysCtl_USE_PLL | SysCtl_OSC_MAIN | SysCtl_XTAL_16MHz);
初始化函数:
//启用 SSI0外设
SysCtlPeripheralEnable (SYSCTL_PERIPH_SSI0);
//启用 GPIO 端口 A
SysCtlPeripheralEnable (SysCtl_Periph_GPIOA);
//为端口 A2、A3、A4和 A5上的 SSI0功能配置引脚多路复用
GPIOPinConfigure (GPIO_PA2_SSI0CLK);
GPIOPinConfigure (GPIO_PA3_SSI0FSS);
GPIOPinConfigure (GPIO_PA4_SSI0RX);
GPIOPinConfigure (GPIO_PA5_SSI0TX);
//配置 SSI 引脚的 GPIO 设置
GPIOPinTypeSSI (GPIO_PORTA_BASE、GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 |GPIO_PIN_2);
//为 SPI 主模式配置和启用 SSI 端口
SSIConfigSetExpClk (SSI0_BASE、SysCtlClockGet ()、SSI_FRF_MOTO_MODE_1、SSI_MODE_MASTER、1000000 8);
//启用 SSI0模块
SSIEnable (SSI0_BASE);
读取功能:
while (SSIDataGetNonBlocking (SSI0_BASE、&pui32DataRx[0]))
{
}
SSIDataPut (SSI0_BASE、0x03);
SSIDataPut (SSI0_BASE、0x00);
针对(ui32Index = 0;ui32Index < 4;ui32Index++)
{
SSIDataPut (SSI0_BASE、0x00);
SSIDataGet (SSI0_BASE、&pui32DataRx[ui32Index]);
}
非常感谢。
此致。