/* MainInit routine This routine performs the main initialisation. */ void MainInit(void) { PortInit(); Timer_Init(); IIC_Init(); UART_Init(); sei(); // Enable global interrupts WM8960_Init(); WM8960_Init();//again }
static rt_err_t icodec_init(struct rt_audio_device *audio) { sai_config_t config; uint32_t mclkSourceClockHz = 0U; edma_config_t dmaConfig = {0}; lpi2c_master_config_t i2cConfig = {0}; uint32_t i2cSourceClock; clock_audio_pll_config_t audioPllConfig = {32, 1, 77, 100}; struct imxcodec *icodec = audio->parent.user_data; sai_transfer_format_t *format; icodec->sai = DEMO_SAI; format = &icodec->format; _InitPins(); CLOCK_InitAudioPll(&audioPllConfig); /*Clock setting for LPI2C*/ CLOCK_SetMux(kCLOCK_Lpi2cMux, DEMO_LPI2C_CLOCK_SOURCE_SELECT); CLOCK_SetDiv(kCLOCK_Lpi2cDiv, DEMO_LPI2C_CLOCK_SOURCE_DIVIDER); /*Clock setting for SAI1*/ CLOCK_SetMux(kCLOCK_Sai1Mux, DEMO_SAI1_CLOCK_SOURCE_SELECT); CLOCK_SetDiv(kCLOCK_Sai1PreDiv, DEMO_SAI1_CLOCK_SOURCE_PRE_DIVIDER); CLOCK_SetDiv(kCLOCK_Sai1Div, DEMO_SAI1_CLOCK_SOURCE_DIVIDER); /*Enable MCLK clock*/ BOARD_EnableSaiMclkOutput(true); /* Create EDMA handle */ EDMA_GetDefaultConfig(&dmaConfig); EDMA_Init(EXAMPLE_DMA, &dmaConfig); EDMA_CreateHandle(&icodec->dmaHandle, EXAMPLE_DMA, EXAMPLE_CHANNEL); DMAMUX_Init(DMAMUX0); DMAMUX_SetSource(DMAMUX0, EXAMPLE_CHANNEL, EXAMPLE_SAI_TX_SOURCE); DMAMUX_EnableChannel(DMAMUX0, EXAMPLE_CHANNEL); /* Init SAI module */ SAI_TxGetDefaultConfig(&config); config.protocol = kSAI_BusLeftJustified; SAI_TxInit(DEMO_SAI, &config); /* Configure the audio format */ format->bitWidth = kSAI_WordWidth16bits; format->channel = 0U; format->sampleRate_Hz = kSAI_SampleRate48KHz; format->masterClockHz = DEMO_SAI_CLK_FREQ; format->protocol = config.protocol; format->stereo = kSAI_Stereo; format->isFrameSyncCompact = 0; format->watermark = FSL_FEATURE_SAI_FIFO_COUNT / 2U; /* Configure Sgtl5000 I2C */ icodec->codecHandle.base = DEMO_I2C; icodec->codecHandle.i2cHandle = &icodec->i2cHandle; i2cSourceClock = DEMO_I2C_CLK_FREQ; LPI2C_MasterGetDefaultConfig(&i2cConfig); LPI2C_MasterInit(DEMO_I2C, &i2cConfig, i2cSourceClock); LPI2C_MasterTransferCreateHandle(DEMO_I2C, &icodec->i2cHandle, NULL, NULL); WM8960_Init(&icodec->codecHandle, NULL); WM8960_ConfigDataFormat(&icodec->codecHandle, format->masterClockHz, format->sampleRate_Hz, format->bitWidth); SAI_TransferTxCreateHandleEDMA(icodec->sai, &icodec->txHandle, saidma_callback, audio, &icodec->dmaHandle); mclkSourceClockHz = DEMO_SAI_CLK_FREQ; SAI_TransferTxSetFormatEDMA(icodec->sai, &icodec->txHandle, format, mclkSourceClockHz, format->masterClockHz); return RT_EOK; }