xref: /btstack/port/stm32-f4discovery-cc256x/Src/i2s.c (revision 225f4ba4fe806afeda1ee8519bb5f4a8ce540af2)
1*225f4ba4SMatthias Ringwald /**
2*225f4ba4SMatthias Ringwald   ******************************************************************************
3*225f4ba4SMatthias Ringwald   * File Name          : I2S.c
4*225f4ba4SMatthias Ringwald   * Description        : This file provides code for the configuration
5*225f4ba4SMatthias Ringwald   *                      of the I2S instances.
6*225f4ba4SMatthias Ringwald   ******************************************************************************
7*225f4ba4SMatthias Ringwald   * @attention
8*225f4ba4SMatthias Ringwald   *
9*225f4ba4SMatthias Ringwald   * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
10*225f4ba4SMatthias Ringwald   * All rights reserved.</center></h2>
11*225f4ba4SMatthias Ringwald   *
12*225f4ba4SMatthias Ringwald   * This software component is licensed by ST under BSD 3-Clause license,
13*225f4ba4SMatthias Ringwald   * the "License"; You may not use this file except in compliance with the
14*225f4ba4SMatthias Ringwald   * License. You may obtain a copy of the License at:
15*225f4ba4SMatthias Ringwald   *                        opensource.org/licenses/BSD-3-Clause
16*225f4ba4SMatthias Ringwald   *
17*225f4ba4SMatthias Ringwald   ******************************************************************************
18*225f4ba4SMatthias Ringwald   */
19*225f4ba4SMatthias Ringwald 
20*225f4ba4SMatthias Ringwald /* Includes ------------------------------------------------------------------*/
21*225f4ba4SMatthias Ringwald #include "i2s.h"
22*225f4ba4SMatthias Ringwald 
23*225f4ba4SMatthias Ringwald /* USER CODE BEGIN 0 */
24*225f4ba4SMatthias Ringwald 
25*225f4ba4SMatthias Ringwald /* USER CODE END 0 */
26*225f4ba4SMatthias Ringwald 
27*225f4ba4SMatthias Ringwald I2S_HandleTypeDef hi2s2;
28*225f4ba4SMatthias Ringwald 
29*225f4ba4SMatthias Ringwald /* I2S2 init function */
MX_I2S2_Init(void)30*225f4ba4SMatthias Ringwald void MX_I2S2_Init(void)
31*225f4ba4SMatthias Ringwald {
32*225f4ba4SMatthias Ringwald 
33*225f4ba4SMatthias Ringwald   hi2s2.Instance = SPI2;
34*225f4ba4SMatthias Ringwald   hi2s2.Init.Mode = I2S_MODE_MASTER_TX;
35*225f4ba4SMatthias Ringwald   hi2s2.Init.Standard = I2S_STANDARD_PHILIPS;
36*225f4ba4SMatthias Ringwald   hi2s2.Init.DataFormat = I2S_DATAFORMAT_16B;
37*225f4ba4SMatthias Ringwald   hi2s2.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE;
38*225f4ba4SMatthias Ringwald   hi2s2.Init.AudioFreq = I2S_AUDIOFREQ_8K;
39*225f4ba4SMatthias Ringwald   hi2s2.Init.CPOL = I2S_CPOL_LOW;
40*225f4ba4SMatthias Ringwald   hi2s2.Init.ClockSource = I2S_CLOCK_PLL;
41*225f4ba4SMatthias Ringwald   hi2s2.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_ENABLE;
42*225f4ba4SMatthias Ringwald   if (HAL_I2S_Init(&hi2s2) != HAL_OK)
43*225f4ba4SMatthias Ringwald   {
44*225f4ba4SMatthias Ringwald     Error_Handler();
45*225f4ba4SMatthias Ringwald   }
46*225f4ba4SMatthias Ringwald 
47*225f4ba4SMatthias Ringwald }
48*225f4ba4SMatthias Ringwald 
HAL_I2S_MspInit(I2S_HandleTypeDef * i2sHandle)49*225f4ba4SMatthias Ringwald void HAL_I2S_MspInit(I2S_HandleTypeDef* i2sHandle)
50*225f4ba4SMatthias Ringwald {
51*225f4ba4SMatthias Ringwald 
52*225f4ba4SMatthias Ringwald   GPIO_InitTypeDef GPIO_InitStruct = {0};
53*225f4ba4SMatthias Ringwald   if(i2sHandle->Instance==SPI2)
54*225f4ba4SMatthias Ringwald   {
55*225f4ba4SMatthias Ringwald   /* USER CODE BEGIN SPI2_MspInit 0 */
56*225f4ba4SMatthias Ringwald 
57*225f4ba4SMatthias Ringwald   /* USER CODE END SPI2_MspInit 0 */
58*225f4ba4SMatthias Ringwald     /* I2S2 clock enable */
59*225f4ba4SMatthias Ringwald     __HAL_RCC_SPI2_CLK_ENABLE();
60*225f4ba4SMatthias Ringwald 
61*225f4ba4SMatthias Ringwald     __HAL_RCC_GPIOC_CLK_ENABLE();
62*225f4ba4SMatthias Ringwald     __HAL_RCC_GPIOB_CLK_ENABLE();
63*225f4ba4SMatthias Ringwald     /**I2S2 GPIO Configuration
64*225f4ba4SMatthias Ringwald     PC2     ------> I2S2_ext_SD
65*225f4ba4SMatthias Ringwald     PC3     ------> I2S2_SD
66*225f4ba4SMatthias Ringwald     PB10     ------> I2S2_CK
67*225f4ba4SMatthias Ringwald     PB12     ------> I2S2_WS
68*225f4ba4SMatthias Ringwald     */
69*225f4ba4SMatthias Ringwald     GPIO_InitStruct.Pin = GPIO_PIN_2;
70*225f4ba4SMatthias Ringwald     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
71*225f4ba4SMatthias Ringwald     GPIO_InitStruct.Pull = GPIO_NOPULL;
72*225f4ba4SMatthias Ringwald     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
73*225f4ba4SMatthias Ringwald     GPIO_InitStruct.Alternate = GPIO_AF6_I2S2ext;
74*225f4ba4SMatthias Ringwald     HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
75*225f4ba4SMatthias Ringwald 
76*225f4ba4SMatthias Ringwald     GPIO_InitStruct.Pin = PDM_OUT_Pin;
77*225f4ba4SMatthias Ringwald     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
78*225f4ba4SMatthias Ringwald     GPIO_InitStruct.Pull = GPIO_NOPULL;
79*225f4ba4SMatthias Ringwald     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
80*225f4ba4SMatthias Ringwald     GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
81*225f4ba4SMatthias Ringwald     HAL_GPIO_Init(PDM_OUT_GPIO_Port, &GPIO_InitStruct);
82*225f4ba4SMatthias Ringwald 
83*225f4ba4SMatthias Ringwald     GPIO_InitStruct.Pin = CLK_IN_Pin|GPIO_PIN_12;
84*225f4ba4SMatthias Ringwald     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
85*225f4ba4SMatthias Ringwald     GPIO_InitStruct.Pull = GPIO_NOPULL;
86*225f4ba4SMatthias Ringwald     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
87*225f4ba4SMatthias Ringwald     GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
88*225f4ba4SMatthias Ringwald     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
89*225f4ba4SMatthias Ringwald 
90*225f4ba4SMatthias Ringwald   /* USER CODE BEGIN SPI2_MspInit 1 */
91*225f4ba4SMatthias Ringwald 
92*225f4ba4SMatthias Ringwald   /* USER CODE END SPI2_MspInit 1 */
93*225f4ba4SMatthias Ringwald   }
94*225f4ba4SMatthias Ringwald }
95*225f4ba4SMatthias Ringwald 
HAL_I2S_MspDeInit(I2S_HandleTypeDef * i2sHandle)96*225f4ba4SMatthias Ringwald void HAL_I2S_MspDeInit(I2S_HandleTypeDef* i2sHandle)
97*225f4ba4SMatthias Ringwald {
98*225f4ba4SMatthias Ringwald 
99*225f4ba4SMatthias Ringwald   if(i2sHandle->Instance==SPI2)
100*225f4ba4SMatthias Ringwald   {
101*225f4ba4SMatthias Ringwald   /* USER CODE BEGIN SPI2_MspDeInit 0 */
102*225f4ba4SMatthias Ringwald 
103*225f4ba4SMatthias Ringwald   /* USER CODE END SPI2_MspDeInit 0 */
104*225f4ba4SMatthias Ringwald     /* Peripheral clock disable */
105*225f4ba4SMatthias Ringwald     __HAL_RCC_SPI2_CLK_DISABLE();
106*225f4ba4SMatthias Ringwald 
107*225f4ba4SMatthias Ringwald     /**I2S2 GPIO Configuration
108*225f4ba4SMatthias Ringwald     PC2     ------> I2S2_ext_SD
109*225f4ba4SMatthias Ringwald     PC3     ------> I2S2_SD
110*225f4ba4SMatthias Ringwald     PB10     ------> I2S2_CK
111*225f4ba4SMatthias Ringwald     PB12     ------> I2S2_WS
112*225f4ba4SMatthias Ringwald     */
113*225f4ba4SMatthias Ringwald     HAL_GPIO_DeInit(GPIOC, GPIO_PIN_2|PDM_OUT_Pin);
114*225f4ba4SMatthias Ringwald 
115*225f4ba4SMatthias Ringwald     HAL_GPIO_DeInit(GPIOB, CLK_IN_Pin|GPIO_PIN_12);
116*225f4ba4SMatthias Ringwald 
117*225f4ba4SMatthias Ringwald   /* USER CODE BEGIN SPI2_MspDeInit 1 */
118*225f4ba4SMatthias Ringwald 
119*225f4ba4SMatthias Ringwald   /* USER CODE END SPI2_MspDeInit 1 */
120*225f4ba4SMatthias Ringwald   }
121*225f4ba4SMatthias Ringwald }
122*225f4ba4SMatthias Ringwald 
123*225f4ba4SMatthias Ringwald /* USER CODE BEGIN 1 */
124*225f4ba4SMatthias Ringwald 
125*225f4ba4SMatthias Ringwald /* USER CODE END 1 */
126*225f4ba4SMatthias Ringwald 
127*225f4ba4SMatthias Ringwald /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
128