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;
  }
}