知之者不如好之,好之者不如乐之
分类: 其他平台
2015-01-01 11:43:31
我目前是这样配置的: 1,把system_stm32f4xx.c中启用内部I2SPLL的code注释掉,然后启用外部I2S时钟: // RCC->CFGR &= ~RCC_CFGR_I2SSRC; // /* Configure PLLI2S */ // RCC->PLLI2SCFGR = (PLLI2S_N << 6) | (PLLI2S_R << 28); // /* Enable PLLI2S */ // RCC->CR |= ((uint32_t)RCC_CR_PLLI2SON); // /* Wait till PLLI2S is ready */ // while((RCC->CR & RCC_CR_PLLI2SRDY) == 0) // { // } RCC->CFGR |= RCC_CFGR_I2SSRC; // 启用外部时钟 2,在使能I2S的APB时钟前,对I2S_CKIN的pin进行初始化: RCC_I2SCLKConfig(RCC_I2S2CLKSource_Ext); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); //i2s clock in GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_SPI3); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOC, &GPIO_InitStructure); 3,往SPI_I2SPR寄存器写0x0202,即MCKOE = 1, I2SDIV = 2, ODD = 0,这样配置使得在Fs=48000Hz时,I2S_CKIN需要输入1024*Fs(bit-frame = 32)的时钟.I2S_CKIN我用FPGA输出49.152MHz时钟提供.用SignalTapII看该时钟很稳定. 4,经过上面的配置,用SignalTapII看过STM32F4 I2S的MCK,LRCK,BCLK都没有输出.当然Codec也没发声. PS:如果启用内部的I2SPLL提供时钟给I2S模块,可以正常播放音乐,表示I2S外设的配置是没问题的.所以请教下我的配置是否有问题,或者还有什么地方需要配置或者注意的.任何意见我表示很感谢. |