Simple Exmple
Dependencies: ST_401_84MHZ mbed
http://www.geocities.jp/micro_diys/
Diff: main.cpp
- Revision:
- 0:0093b4cc5297
- Child:
- 1:530d6fb59a93
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat May 17 04:58:58 2014 +0000 @@ -0,0 +1,153 @@ +#include "mbed.h" +#include <math.h> +#include "cmsis.h" +#include "pinmap.h" +#include "PinNames.h" +#include "error.h" +#include "stm32f4xx.h" +#include "stm32f4xx_hal.h" +#include "stm32f4xx_hal_dma_ex.h" +#include "stm32f4xx_hal_i2s.h" +#include "sine_wave.h" +#include "saw_wave.h" + +Serial pc(SERIAL_TX, SERIAL_RX); + +DigitalOut myled(LED1); +#define I2S_BUFFERSIZE 256 + +uint16_t TxBuff[I2S_BUFFERSIZE]; +uint32_t dmabuffer[2][256]; +//#define STM_PIN_DATA(MODE, FUNC) (((MODE) << 8) | (FUNC)) + +static const PinMap PinMap_I2S_MCK[] = { + {PC_6, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_7, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {NC, NC, 0} +}; + +static const PinMap PinMap_I2S_CK[] = { + {PB_10, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PB_13, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PD_3, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_10, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {NC, NC, 0} +}; + +static const PinMap PinMap_I2S_WS[] = { + {PB_12, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PB_9, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PA_15, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {NC, NC, 0} +}; + +static const PinMap PinMap_I2S_SD[] = { + {PC_3, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PB_15, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_12, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PD_6, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI3)}, + {NC, NC, 0} +}; + + + DMA_InitTypeDef DMA_InitType ={ + DMA_CHANNEL_0, + DMA_MEMORY_TO_PERIPH, + DMA_PINC_DISABLE, + DMA_MINC_ENABLE, + DMA_PDATAALIGN_WORD, + DMA_MDATAALIGN_WORD, + DMA_CIRCULAR, + DMA_PRIORITY_HIGH, + DMA_FIFOMODE_ENABLE, + DMA_FIFO_THRESHOLD_HALFFULL, + DMA_MBURST_SINGLE, + DMA_PBURST_SINGLE + }; + +DMA_HandleTypeDef DMA_HandleType ={ + DMA1_Stream4, + DMA_InitType, + HAL_UNLOCKED, + HAL_DMA_STATE_RESET, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL +}; + +I2S_InitTypeDef my_I2S_InitType ={ + I2S_MODE_MASTER_TX, + I2S_STANDARD_MSB, + I2S_DATAFORMAT_16B, + I2S_MCLKOUTPUT_ENABLE, + I2S_AUDIOFREQ_44K, + I2S_CPOL_LOW, + I2S_CLOCK_PLL, + I2S_FULLDUPLEXMODE_DISABLE +}; + +HAL_I2S_StateTypeDef my_I2S_StateTypeDef={ + HAL_I2S_STATE_RESET +}; + +HAL_I2S_ErrorTypeDef my_I2S_ErorTypeDef={ + HAL_I2S_ERROR_NONE +}; + +I2S_HandleTypeDef my_I2S_HandleTypeDef = { + SPI2, + my_I2S_InitType, + &TxBuff[0], + I2S_BUFFERSIZE, + NULL, + NULL, + NULL, + NULL, + &DMA_HandleType,//&my_DMA_HamdleType, + NULL, + HAL_UNLOCKED, + my_I2S_StateTypeDef, + my_I2S_ErorTypeDef +}; + +void init_dmabuffer(void){ + uint32_t temp; + for (int i =0;i<256;i++){ + temp = (uint32_t)((saw_wave[i]<<16) | sine_wave[i]); + dmabuffer[0][i] = temp; + dmabuffer[1][i] = temp; + } +} + +int main() { + pc.printf("Hello World !\n"); + init_dmabuffer(); + /// I2S_init(); + HAL_I2S_Init(&my_I2S_HandleTypeDef); + // Configure the I2S pins + pinmap_pinout(PC_6, PinMap_MCK); + pinmap_pinout(PB_10, PinMap_CK); + pinmap_pinout(PB_12, PinMap_WS); + pinmap_pinout(PC_3, PinMap_SD); + pin_mode(PC_6, PullUp); + pin_mode(PB_10, PullUp); + pin_mode(PB_12, PullUp); + pin_mode(PC_3, PullUp); + + // HAL_I2S_MspInit(I2S_HandleTypeDef *hi2s); + // HAL_I2S_IRQHandler(&my_I2S_HandleType); +/// HAL_I2S_Transmit_DMA(&my_I2S_HandleTypeDef, &TxBuff[0], I2S_BUFFERSIZE); + + HAL_DMA_Init(&DMA_HandleType); + HAL_DMAEx_MultiBufferStart_IT(&DMA_HandleType ,(uint32_t)&dmabuffer[0][0] ,SPI2->DR ,(uint32_t)&dmabuffer[1][0] ,256); + //HAL_DMA_IRQHandler(&my_DMA_HamdleTypeDef); + //HAL_DMA_Start_IT(&my_DMA_HamdleTypeDef,NULL,NULL,256); + + while(1) { + myled = !myled; + } +} + \ No newline at end of file