MCU的I2S为slave时出现噪音的解决方案

g_ak4961_i2s_tx_handle.Instance->SR


__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);
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值