ZHCZ038A October 2017 – June 2025 MSP432E401Y , MSP432E411Y
SSI 的双模式和四模式下的总线争用
当 SSI 配置为双模式或四模式并且在 SSI 配置为接收模式后执行对外部存储器的读取时,第一次读取的数据可能会在 SSI 数据管脚上发生总线争用。
在将 SSI 配置为接收模式(设置 QSSI 控制 (SSICR1) 寄存器的 DIR 位)之后,在第一个有效读取操作之前从存储器执行虚拟读取。例如:
SSIConfigSetExpClk(SSI0_BASE,SysCtlClockFreqSet (),
SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 1000000, 8);
SSIAdvModeSet(SSI0_BASE, SSI_ADV_BI_READ); //Receive Mode set
SSIDataPut(SSI0_BASE, &pui32DataRx[ui32Index]); //intentional dummy write
SSIDataGetNonBlocking(SSI-_BASE, ui32Dummy); //dummy read
SSIDataPut(SSI0_BASE, &pui32DataRx[ui32Index]); //intentional dummy write
SSIDataGetNonBlocking(SSI0_BASE, &pui32DataRx[0])); //first intentional read
SSIDataPut(SSI0_BASE, &pui32DataRx[ui32Index]); //intentional dummy write
SSIDataGetNonBlocking(SSI0_BASE, &pui32DataRx[1])); //second intentional read
如果传送通常需要任何虚拟操作,例如上面显示的有意虚拟写入,则虚拟读取应在正常虚拟操作之前发生。
请注意,如果您的应用对 SSIClk 很敏感,则虚拟读取会输出一个时钟周期。在执行虚拟读取的同时将 SSIClk 引脚重新配置为 GPIO 输入,以防止这种情况影响您的时钟敏感型应用。