Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ST_401_84MHZ mbed
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;
}
}