您好!
我无法与两个不同的 SPI 器件进行 SPI 通信。 问题是、一个从器件需要正常时钟相位、另一个从器件需要延迟时钟相位、因此我需要在程序运行期间动态更改时钟相位。
如果我在运行期间将时钟相位从正常更改为 延迟 ,则相位会正确地更改为延迟(在逻辑分析仪上进行分析),但当我尝试将其改回正常相位时,时钟相位仍会延迟。
结论:
SLAVE1 (正常时钟阶段)、 SLAVE2 (延迟时钟阶段)
程序流:
0。初始 SPI 设置:
void HAL_setupSpiA (HAL_Handle handle) { HAL_Obj *) handle =(HAL_Obj *) handle; SPI_reset (obj->spiAmHandle); SPI_setMode (obj->OutAmHandle、SPI_Mode_Master); SPI_setClkPolarity (obj->SpiHandle、SPI_ClkPolputEdge) ;SpiInputEdge_InputTx;SpiInputEdge_Input_Spinarity (SPI_Spi_Spi_InputEdge) spi_enableTxFifoEnh (obj->spiAHandle); spi_enableTxFifo (obj->spiAHandle); //spi_setTxDelay (obj->bauAHandle、0x0018); spi_setClkPhase (obj->spiAHandle、SPI_ClkPhase_Baudle_Spi000e );spi_setAdrate (spi_R000e);spi_Adrate_Adrate_deT (spi_Adrate_AdudeT);spi_Adte //CCA 1、5MHZ SPI_setCharLength (obj->spiAHandle、SPI_CharLength _16_Bits); SPI_setSuspend (obj->spiAHandle、SPI_TxSuspend_free); SPI_enable (obj->spiAHandle); }
1. 与 slave1的通信正常
2.将时钟相位更改为延迟(SPI_setClkPhase (obj->spiAHandle、SPI_ClkPhase_Delayed))
-相位已正确更改为延迟
与 SLAVE2通信正常
3.将时钟相位改回正常(SPI_setClkPhase (obj->spiAHandle、SPI_ClkPhase_Normal))
-相位不变并保持延迟。
-与 SLAVE1通信失败
是否有人知道如何解决此问题?
感谢您的任何提示。
此致、
Tom。