예제 #1
0
/*
  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
}
예제 #2
0
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;
}