Simple Exmple

Dependencies:   ST_401_84MHZ mbed

http://www.geocities.jp/micro_diys/

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