1 | #define PERIPH_BASE_ADDR_I2S2_SPI2_DATA_REGISTER (0x40003800 + 0x0C) /* stm32f103ret6 datasheet p. 40 and ref. manual p. 749 */
|
2 | #define PERIPH_BASE_ADDR_I2S3_SPI3_DATA_REGISTER (0x40003C00 + 0x0C) /* stm32f103ret6 datasheet p. 40 and ref. manual p. 749 */
|
3 |
|
4 | /**
|
5 | * Configures I2S2 (Master).
|
6 | */
|
7 | void BOARD_I2S2_DMA1_Configuration(void)
|
8 | {
|
9 | I2S_InitTypeDef I2S_InitStructure;
|
10 | DMA_InitTypeDef DMA_InitStructure;
|
11 |
|
12 | SPI_I2S_DeInit(SPI2);
|
13 | I2S_InitStructure.I2S_Standard = I2S_Standard_Phillips;
|
14 | I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_32b;
|
15 | I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Enable;
|
16 | I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_32k;
|
17 | I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low;
|
18 | I2S_InitStructure.I2S_Mode = I2S_Mode_MasterTx;
|
19 | I2S_Init(SPI2, &I2S_InitStructure);
|
20 |
|
21 | DMA_DeInit(DMA1_Channel5);
|
22 | DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)PERIPH_BASE_ADDR_I2S2_SPI2_DATA_REGISTER;
|
23 | DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&MAIN_DACOutputDataBufferA;
|
24 | DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
|
25 | DMA_InitStructure.DMA_BufferSize = FRAMESIZE*4;
|
26 | DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
27 | DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
28 | DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
|
29 | DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
|
30 | DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
|
31 | DMA_InitStructure.DMA_Priority = DMA_Priority_High;
|
32 | DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
|
33 | DMA_Init(DMA1_Channel5, &DMA_InitStructure);
|
34 |
|
35 | /* Enable DMA Tx request */
|
36 | SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, ENABLE);
|
37 |
|
38 | /* Enable DMA channel transfer complete interrupt */
|
39 | DMA_ITConfig(DMA1_Channel5, DMA_IT_TC, ENABLE);
|
40 |
|
41 | /* SPI2 enable */
|
42 | I2S_Cmd(SPI2, ENABLE);
|
43 |
|
44 | /* DMA1_5 enable */
|
45 | DMA_Cmd(DMA1_Channel5, ENABLE);
|
46 | }
|
47 |
|
48 | /**
|
49 | * Configures I2S3 (Slave).
|
50 | */
|
51 | void BOARD_I2S3_DMA2_Configuration(void)
|
52 | {
|
53 | I2S_InitTypeDef I2S_InitStructure;
|
54 | DMA_InitTypeDef DMA_InitStructure;
|
55 |
|
56 | SPI_I2S_DeInit(SPI3);
|
57 | I2S_InitStructure.I2S_Standard = I2S_Standard_Phillips;
|
58 | I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_32b;
|
59 | I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable;
|
60 | I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_32k;
|
61 | I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low;
|
62 | I2S_InitStructure.I2S_Mode = I2S_Mode_SlaveRx;
|
63 | I2S_Init(SPI3, &I2S_InitStructure);
|
64 |
|
65 | DMA_DeInit(DMA2_Channel1);
|
66 | DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)PERIPH_BASE_ADDR_I2S3_SPI3_DATA_REGISTER;
|
67 | DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&MAIN_ADCInputDataBufferA;
|
68 | DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
|
69 | DMA_InitStructure.DMA_BufferSize = FRAMESIZE*4;
|
70 | DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
71 | DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
72 | DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
|
73 | DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
|
74 | DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
|
75 | DMA_InitStructure.DMA_Priority = DMA_Priority_High;
|
76 | DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
|
77 | DMA_Init(DMA2_Channel1, &DMA_InitStructure);
|
78 |
|
79 | /* Enable DMA Rx request */
|
80 | SPI_I2S_DMACmd(SPI3, SPI_I2S_DMAReq_Rx, ENABLE);
|
81 |
|
82 | /* Enable DMA channel transfer complete interrupt */
|
83 | DMA_ITConfig(DMA2_Channel1, DMA_IT_TC, ENABLE);
|
84 |
|
85 | /* SPI3 enable */
|
86 | I2S_Cmd(SPI3, ENABLE);
|
87 |
|
88 | /* DMA2_1 enable */
|
89 | DMA_Cmd(DMA2_Channel1, ENABLE);
|
90 | }
|