__IO uint32_t SR; /*!< SPI status register,Address offset: 0x08 */
27.5.3 SPI 状态寄存器 (SPI_SR)
CRCERR
8: FRE
位 8 FRE:帧格式错误 (Frame format error)
注意: 当 SPI 在 TI 从模式或 I2S 从模式下工作时,使用此标志
#define __HAL_I2S_DISABLE(__HANDLE__)
((__HANDLE__)->Instance->I2SCFGR &= ~SPI_I2SCFGR_I2SE)
SPI_I2SCFGR_I2SE
SPI_I2SCFGR_I2SE_Msk
(0x1U << SPI_I2SCFGR_I2SE_Pos)
(10U)
27.5.8 SPI_I2S 配置寄存器 (SPI_I2SCFGR)
10: I2SE
TI 模式帧格式错误
如果 SPI 在从模式下工作,并配置为符合 TI 模式协议,则在持续通信期间出现 NSS 脉冲 时,将检测到 TI 模式帧格式错误。出现此错误时,SPI_SR 寄存器中的 FRE 标志将置 1。 发生错误时不会关闭 SPI,但会忽略 NSS 脉冲,并且 SPI 会等待至下一个 NSS 脉冲,然后 再开始新的传输。由于错误检测可能导致丢失两个数据字节,因此数据可能会损坏。
读取 SPI_SR 寄存器时,将清零 FRE 标志。如果 ERRIE 位置 1,则检测到帧格式错误时将 产生中断。在这种情况下,由于无法保证数据的连续性,应关闭 SPI,并在重新使能从 SPI 后,由主器件重新发起通信。
P744
void I2SFrameErrorCheck(void)
{
//check if IIS frame error occurs
if((g_ak4961_i2s_tx_handle.Instance->SR)&0x100)
{
__HAL_I2S_DISABLE(&g_ak4961_i2s_tx_handle);
//wait WS goes down
while(HAL_GPIO_ReadPin(AK4961_I2S_WS_GPIO_PORT, AK4961_I2S_WS_PIN));
//wait WS goes up
while(!HAL_GPIO_ReadPin(AK4961_I2S_WS_GPIO_PORT, AK4961_I2S_WS_PIN));
__HAL_I2S_ENABLE(&g_ak4961_i2s_tx_handle);
}
//check if IIS frame error occurs
if((g_ak4961_i2s_rx_handle.Instance->SR)&0x100)
{
__HAL_I2S_DISABLE(&g_ak4961_i2s_rx_handle);
//wait WS goes down
while(HAL_GPIO_ReadPin(AK4961_I2S_WS_GPIO_PORT, AK4961_I2S_WS_PIN));
//wait WS goes up
while(!HAL_GPIO_ReadPin(AK4961_I2S_WS_GPIO_PORT, AK4961_I2S_WS_PIN));
__HAL_I2S_ENABLE(&g_ak4961_i2s_rx_handle);
}
}