Part of MicroGen4 Music Synthesizer Program. (But not test it yet.) I2S ,DMA ,Stereo ,16Bit Dac(PCM1781) See detail: http://www.geocities.jp/micro_diys/index2
Now added generate Saw Wave to DAC function in generate(); You will hear Stereo saw wave sound now.
more info: http://www.geocities.jp/micro_diys/i2s_test_sample/i2s_test_sample.html
Diff: stm32f4xx_hal_msp.cpp
- Revision:
- 0:dc88722ab141
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stm32f4xx_hal_msp.cpp Thu Jul 03 11:59:07 2014 +0000 @@ -0,0 +1,123 @@ +/** + ****************************************************************************** + * File Name : stm32f4xx_hal_msp.c + * Date : 22/06/2014 09:00:07 + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * + * COPYRIGHT(c) 2014 STMicroelectronics + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +#include "synthesizer.h" +extern DigitalOut myled; + +extern DMA_HandleTypeDef hdma_i2s2_ext_tx; + +void HAL_I2S_MspInit(I2S_HandleTypeDef* hi2s) +{ + +// GPIO_InitTypeDef GPIO_InitStruct; + if(hi2s->Instance==SPI2) + { + /* Peripheral clock enable */ + __SPI2_CLK_ENABLE(); + + /**I2S2 GPIO Configuration + PC3 ------> I2S2_SD + PB10 ------> I2S2_CK + PB12 ------> I2S2_WS + PC6 ------> I2S2_MCK + */ +/* + GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_LOW; + GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_LOW; + GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); +*/ + /* Peripheral DMA init*/ + + hdma_i2s2_ext_tx.Instance = DMA1_Stream4; + hdma_i2s2_ext_tx.Init.Channel = DMA_CHANNEL_0; + hdma_i2s2_ext_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_i2s2_ext_tx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_i2s2_ext_tx.Init.MemInc = DMA_MINC_ENABLE; + hdma_i2s2_ext_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; + hdma_i2s2_ext_tx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; + hdma_i2s2_ext_tx.Init.Mode = DMA_NORMAL; + hdma_i2s2_ext_tx.Init.Priority = DMA_PRIORITY_LOW; + hdma_i2s2_ext_tx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; + hdma_i2s2_ext_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; + hdma_i2s2_ext_tx.Init.MemBurst = DMA_MBURST_SINGLE; + hdma_i2s2_ext_tx.Init.PeriphBurst = DMA_PBURST_SINGLE; + HAL_DMA_Init(&hdma_i2s2_ext_tx); + + __HAL_LINKDMA(hi2s,hdmatx,hdma_i2s2_ext_tx); +// myled =1; + } + +} + +void HAL_I2S_MspDeInit(I2S_HandleTypeDef* hi2s) +{ + + if(hi2s->Instance==SPI2) + { + /* Peripheral clock disable */ + __SPI2_CLK_DISABLE(); + + /**I2S2 GPIO Configuration + PC3 ------> I2S2_SD + PB10 ------> I2S2_CK + PB12 ------> I2S2_WS + PC6 ------> I2S2_MCK + */ +// HAL_GPIO_DeInit(GPIOC, GPIO_PIN_3|GPIO_PIN_6); + +// HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10|GPIO_PIN_12); + + /* Peripheral DMA DeInit*/ + HAL_DMA_DeInit(hi2s->hdmatx); + } + +} + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + + + +