//***************************************************************************** // //! Initializes the sound output. //! //! This function prepares the sound driver to play songs or sound effects. It //! must be called before any other sound function. The sound driver uses //! uDMA and the caller must ensure that the uDMA peripheral is enabled and //! its control table configured prior to making this call. //! //! \return None // //***************************************************************************** void SoundInit(void) { // // Set the current active buffer to zero. // g_ulPlaying = 0; // // Enable and reset the peripheral. // ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_I2S0); // // Select alternate functions for all of the I2S pins. // ROM_SysCtlPeripheralEnable(I2S0_SCLKTX_PERIPH); GPIOPinTypeI2S(I2S0_SCLKTX_PORT, I2S0_SCLKTX_PIN); ROM_SysCtlPeripheralEnable(I2S0_LRCTX_PERIPH); GPIOPinTypeI2S(I2S0_LRCTX_PORT, I2S0_LRCTX_PIN); ROM_SysCtlPeripheralEnable(I2S0_SDATX_PERIPH); GPIOPinTypeI2S(I2S0_SDATX_PORT, I2S0_SDATX_PIN); ROM_SysCtlPeripheralEnable(I2S0_MCLKTX_PERIPH); GPIOPinTypeI2S(I2S0_MCLKTX_PORT, I2S0_MCLKTX_PIN); // // Initialize the DAC. // WM8510Init(); // // Set the intial volume level // WM8510VolumeSet(g_ucVolume); // // Set the FIFO trigger limit // I2STxFIFOLimitSet(I2S0_BASE, 4); // // Clear out all pending interrupts. // I2SIntClear(I2S0_BASE, I2S_INT_TXERR | I2S_INT_TXREQ ); // // Enable the I2S interrupt on the NVIC // ROM_IntEnable(INT_I2S0); // // Disable all uDMA attributes. // ROM_uDMAChannelAttributeDisable(UDMA_CHANNEL_I2S0TX, UDMA_ATTR_ALL); }
//***************************************************************************** // //! Initializes the sound output. //! //! \param ulEnableReceive is set to 1 to enable the receive portion of the I2S //! controller and 0 to leave the I2S controller not configured. //! //! This function prepares the sound driver to play songs or sound effects. It //! must be called before any other sound function. The sound driver uses //! uDMA with the I2S controller so the caller must ensure that the uDMA //! peripheral is enabled and its control table configured prior to making this //! call. The GPIO peripheral and pins used by the I2S interface are //! controlled by the I2S0_*_PERIPH, I2S0_*_PORT and I2S0_*_PIN definitions. //! //! \return None // //***************************************************************************** void SoundInit(unsigned long ulEnableReceive) { // // Set the current active buffer to zero. // g_ulPlaying = 0; g_ulRecording = 0; // // Enable and reset the peripheral. // SysCtlPeripheralEnable(SYSCTL_PERIPH_I2S0); SysCtlPeripheralReset(SYSCTL_PERIPH_I2S0); // // Select alternate functions for all of the I2S pins. // SysCtlPeripheralEnable(I2S0_SCLKTX_PERIPH); GPIOPinTypeI2S(I2S0_SCLKTX_PORT, I2S0_SCLKTX_PIN); SysCtlPeripheralEnable(I2S0_MCLKTX_PERIPH); GPIOPinTypeI2S(I2S0_MCLKTX_PORT, I2S0_MCLKTX_PIN); SysCtlPeripheralEnable(I2S0_LRCTX_PERIPH); GPIOPinTypeI2S(I2S0_LRCTX_PORT, I2S0_LRCTX_PIN); SysCtlPeripheralEnable(I2S0_SDATX_PERIPH); GPIOPinTypeI2S(I2S0_SDATX_PORT, I2S0_SDATX_PIN); // // Initialize the DAC. // TLV320AIC23BInit(); // // Set the FIFO trigger limit // I2STxFIFOLimitSet(I2S0_BASE, 4); // // Clear out all pending interrupts. // I2SIntClear(I2S0_BASE, I2S_INT_TXERR | I2S_INT_TXREQ); // // Disable all uDMA attributes. // uDMAChannelAttributeDisable(UDMA_CHANNEL_I2S0TX, UDMA_ATTR_ALL); // // Only enable the RX channel if requested. // if(ulEnableReceive) { // // Enable the I2S RX Data pin. // SysCtlPeripheralEnable(I2S0_SDARX_PERIPH); GPIOPinTypeI2S(I2S0_SDARX_PORT, I2S0_SDARX_PIN); // // Set the FIFO trigger limit // I2SRxFIFOLimitSet(I2S0_BASE, 4); // // Enable the I2S Rx controller. // I2STxRxEnable(I2S0_BASE); // // Disable all DMA attributes. // uDMAChannelAttributeDisable(UDMA_CHANNEL_I2S0RX, UDMA_ATTR_ALL); } else { // // Enable the I2S Tx controller. // I2STxEnable(I2S0_BASE); } // // Enable the I2S interrupt on the NVIC // IntEnable(INT_I2S0); }
//***************************************************************************** // //! Initialize the sound driver. //! //! This function initializes the audio hardware components of the EVALBOT, //! in preparation for playing sounds using the sound driver. //! //! \return None. // //***************************************************************************** void SoundInit(void) { // // Set the current active buffer to zero. // g_ulPlaying = 0; // // Enable and reset the peripheral. // SysCtlPeripheralEnable(SYSCTL_PERIPH_I2S0); SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); // // Set up the pin mux. // GPIOPinConfigure(GPIO_PB6_I2S0TXSCK); GPIOPinConfigure(GPIO_PE4_I2S0TXWS); GPIOPinConfigure(GPIO_PE5_I2S0TXSD); GPIOPinConfigure(GPIO_PF1_I2S0TXMCLK); // // Select alternate functions for all of the I2S pins. // SysCtlPeripheralEnable(I2S0_SCLKTX_PERIPH); GPIOPinTypeI2S(I2S0_SCLKTX_PORT, I2S0_SCLKTX_PIN); SysCtlPeripheralEnable(I2S0_MCLKTX_PERIPH); GPIOPinTypeI2S(I2S0_MCLKTX_PORT, I2S0_MCLKTX_PIN); SysCtlPeripheralEnable(I2S0_LRCTX_PERIPH); GPIOPinTypeI2S(I2S0_LRCTX_PORT, I2S0_LRCTX_PIN); SysCtlPeripheralEnable(I2S0_SDATX_PERIPH); GPIOPinTypeI2S(I2S0_SDATX_PORT, I2S0_SDATX_PIN); // // Set up the DMA. // uDMAControlBaseSet(&DMAControlTable[0]); uDMAEnable(); // // Initialize the DAC. // DACInit(); // // Set the FIFO trigger limit // I2STxFIFOLimitSet(I2S0_BASE, 4); // // Clear out all pending interrupts. // I2SIntClear(I2S0_BASE, I2S_INT_TXERR | I2S_INT_TXREQ ); // // Disable all uDMA attributes. // uDMAChannelAttributeDisable(UDMA_CHANNEL_I2S0TX, UDMA_ATTR_ALL); // // Enable the I2S Tx controller. // I2STxEnable(I2S0_BASE); }