Simple Exmple
Dependencies: ST_401_84MHZ mbed
http://www.geocities.jp/micro_diys/
main.cpp
- Committer:
- p_igmon
- Date:
- 2014-05-17
- Revision:
- 0:0093b4cc5297
- Child:
- 1:530d6fb59a93
File content as of revision 0:0093b4cc5297:
#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; } }