SAI的问题

2019-07-20 17:27发布

最近想通过F429的SAI通过CS5381来读取信号,不过调试时候出现了下图的问题,然后DR也一直为0。我测试那四个引脚也都有波形输出(MCLK,SCK,LRCK,SD.A)
图片1.png
希望原子哥帮忙看看,是不是SAI的配置出现了问题。
这是主函数
[mw_shl_code=applescript,true]
#include "main.h"
#include "sai.h"
#include "stdio.h"
#include "74HC595.h"

int main (void)
{       
        uint32_t sai_value1[64]= {0};
//        uint32_t sai_va1;
        Config_595();                                //595控制CS5381相关引脚
        sai.config();
        for(u8 i=0;i<65;i++)                //数组填充0xff
        {
                sai_value1=0xff;
        }

  for(u8 i=0;i<65;i++)

  {
                sai_value1=SAI1_Block_A->DR;            //将SAI_DR存入数组,方便调试
                for(u8 b=0;b<100;b++);                                                        //延时
  }
                while (1)
                {
                }
}



[/mw_shl_code]

然后下面是sai配置:
[mw_shl_code=applescript,true]# include "sai.h"
# include "stdio.h"
# include "stm32f4xx_sai.h"

# define DMA_SAI_Buffer_size  64

static void SAI_GPIO_Config(void);
static void SAI_Mode_Config(void);
static void SAI_Config(void);

SYS_SAI_T sai = {
        .config = SAI_Config,
        .gpio_config = SAI_GPIO_Config,
        .mode_config = SAI_Mode_Config,
};


/*SAI配置*/
void SAI_Config(void)
{
sai.gpio_config();
        sai.mode_config();
//        sai.dma_config(DMA_SAI_Buffer1[0],DMA_SAI_Buffer2[0]);
//       
}


/*&#197;&#228;&#214;&#195;SAI_GPIO*/
void SAI_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SAI1,ENABLE);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;
       
        GPIO_Init(GPIOE,&GPIO_InitStructure);
       
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource2, GPIO_AF_SAI1);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource3, GPIO_AF_SAI1);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource4, GPIO_AF_SAI1);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource5, GPIO_AF_SAI1);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource6, GPIO_AF_SAI1);

}

/*&#197;&#228;&#214;&#195;SAI_Mode*/
void SAI_Mode_Config(void)
{
        SAI_InitTypeDef SAI_InitStructure;
        SAI_FrameInitTypeDef SAI_FrameInitStructure;
        SAI_SlotInitTypeDef  SAI_SlotInitStructure;
       
        RCC_AHB2PeriphClockCmd(RCC_APB2Periph_SAI1,ENABLE);
       
        RCC_PLLSAIConfig(128,5,3);               

        //SAI1_Block_A设置
       
        SAI_DeInit(SAI1);
        SAI_InitStructure.SAI_AudioMode = SAI_Mode_MasterRx ;                                        //主接收模式
        SAI_InitStructure.SAI_Synchro = SAI_Asynchronous ;                                                //异步
        SAI_InitStructure.SAI_OUTDRIV =        SAI_OutputDrive_Enabled;                        //使能输出
        SAI_InitStructure.SAI_NoDivider = SAI_MasterDivider_Enabled;        //使能分频
        SAI_InitStructure.SAI_FIFOThreshold = SAI_FIFOThreshold_Full; //FIFO阈值
        SAI_InitStructure.SAI_MasterDivider = 1;          //MCLK_x = SAI_CK_x/(MCKDIV[3:0]*2)
        SAI_InitStructure.SAI_Protocol = SAI_Free_Protocol ;                                        //自由模式
        SAI_InitStructure.SAI_DataSize = SAI_DataSize_24b ;                                                //24位
        SAI_InitStructure.SAI_FirstBit = SAI_FirstBit_MSB ;                                                //第一位为:MSB
        SAI_InitStructure.SAI_ClockStrobing = SAI_ClockStrobing_RisingEdge ;        //数据时钟在上升沿选通
       
        SAI_Init(SAI1_Block_A,&SAI_InitStructure);
       
        //帧设置
       
        SAI_FrameInitStructure.SAI_FrameLength = 64;                                                                                                //帧长度:64
        SAI_FrameInitStructure.SAI_ActiveFrameLength = 32;                                                                        //帧同步有效长度:32
        SAI_FrameInitStructure.SAI_FSDefinition =        I2S_FS_ChannelIdentification;                                //I2S
        SAI_FrameInitStructure.SAI_FSPolarity = SAI_FS_ActiveLow;                                                //低电平有效
        SAI_FrameInitStructure.SAI_FSOffset = SAI_FS_BeforeFirstBit;                                //在slot0的第一位的前一位使能FS,匹配飞利浦标准
       
        SAI_FrameInit(SAI1_Block_A,&SAI_FrameInitStructure);
       
        //SLOT设置
       
        SAI_SlotInitStructure.SAI_FirstBitOffset = 0;                                                                                                //偏移 : 0
        SAI_SlotInitStructure.SAI_SlotSize = SAI_SlotSize_32b;                                                        //slot 大小:32位
        SAI_SlotInitStructure.SAI_SlotNumber = 2;                                                                                                                //2个
        SAI_SlotInitStructure.SAI_SlotActive = SAI_SlotActive_0|SAI_SlotActive_1;//使能slot0 和slot1
       
        SAI_SlotInit(SAI1_Block_A,&SAI_SlotInitStructure);
       
        SAI_Cmd(SAI1_Block_A,ENABLE);  //开启sai
        RCC_PLLSAICmd(ENABLE);
       

}

[/mw_shl_code]

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。