Browse Source

Transfer I2C1 Init to board module.

Vladimir N. Shilov 3 years ago
parent
commit
a09e1ad18f
2 changed files with 51 additions and 105 deletions
  1. 51 0
      Src/board.c
  2. 0 105
      Src/main.c

+ 51 - 0
Src/board.c

@@ -3,12 +3,16 @@
 #include "stm32g0xx_ll_bus.h"
 #include "stm32g0xx_ll_gpio.h"
 #include "stm32g0xx_ll_usart.h"
+#include "stm32g0xx_ll_dma.h"
+#include "stm32g0xx_ll_dmamux.h"
+#include "stm32g0xx_ll_i2c.h"
 
 /* private variables */
 
 /* private functions */
 static void GPIO_Init(void);
 static void DMA_Init(void);
+static void I2C1_Init(void);
 static void TIM1_Init(void);
 static void TIM3_Init(void);
 static void TIM14_Init(void);
@@ -38,6 +42,7 @@ void Board_Init(void)
   /* Initialize all configured peripherals */
   GPIO_Init();
   DMA_Init();
+  I2C1_Init();
 
   /* Start RGB & Tube Power PWM */
   TIM1_Init();
@@ -179,6 +184,52 @@ static void DMA_Init(void)
 
 }
 
+/**
+  * @brief I2C1 Initialization Function
+  * @param None
+  * @retval None
+  */
+static void I2C1_Init(void)
+{
+  /* Peripheral clock enable */
+  RCC->APBENR1 |= RCC_APBENR1_I2C1EN;
+  RCC->IOPENR |= RCC_IOPENR_GPIOBEN;
+
+  /** I2C1 GPIO Configuration
+  PB8   ------> I2C1_SCL
+  PB9   ------> I2C1_SDA
+  */
+  GPIO_SetPinMode(GPIOB, GPIO_PIN_8, GPIO_MODE_AFF);
+  GPIO_SetPinOutputType(GPIOB, GPIO_PIN_8, GPIO_OTYPE_OD);
+  GPIO_SetPinSpeed(GPIOB, GPIO_PIN_8, GPIO_OSPEED_HI);
+  GPIO_SetPinPull(GPIOB, GPIO_PIN_8, GPIO_PUPDR_UP);
+  GPIO_SetAFPin_8_15(GPIOB, GPIO_PIN_8, GPIO_AF_6);
+
+  GPIO_SetPinMode(GPIOB, GPIO_PIN_9, GPIO_MODE_AFF);
+  GPIO_SetPinOutputType(GPIOB, GPIO_PIN_9, GPIO_OTYPE_OD);
+  GPIO_SetPinSpeed(GPIOB, GPIO_PIN_9, GPIO_OSPEED_HI);
+  GPIO_SetPinPull(GPIOB, GPIO_PIN_9, GPIO_PUPDR_UP);
+  GPIO_SetAFPin_8_15(GPIOB, GPIO_PIN_9, GPIO_AF_6);
+
+  /** I2C1 DMA Init */
+  /* I2C1_RX Init: Priority medium, Memory increment, read from perephireal,
+     transfer error interrupt enable, transfer complete interrupt enable */
+  DMA1_Channel2->CCR = (DMA_CCR_PL_0 | DMA_CCR_MINC | DMA_CCR_TEIE | DMA_CCR_TCIE);
+  /* Route DMA channel 2 to I2C1 RX */
+  DMAMUX1_Channel2->CCR = 10;
+
+  /* I2C1_TX Init: Priority medium, Memory increment, read from memory,
+     transfer error interrupt enable, transfer complete interrupt enable */
+  DMA1_Channel3->CCR = (DMA_CCR_PL_0 | DMA_CCR_MINC| DMA_CCR_DIR | DMA_CCR_TEIE | DMA_CCR_TCIE);
+  /* Route DMA channel 3 to I2C1 TX */
+  DMAMUX1_Channel3->CCR = 11;
+
+  /** I2C Initialization: I2C_Fast */
+  I2C1->TIMINGR = 0x0010061A;
+  I2C1->CR2 = I2C_CR2_AUTOEND;
+  I2C1->CR1 = I2C_CR1_PE;
+}
+
 /**
   * @brief TIM1 Initialization Function
   * @param None

+ 0 - 105
Src/main.c

@@ -90,7 +90,6 @@ static volatile uint8_t dispWDT = 0;
 /* USER CODE END PV */
 
 /* Private function prototypes -----------------------------------------------*/
-static void MX_I2C1_Init(void);
 static void MX_SPI1_Init(void);
 /* USER CODE BEGIN PFP */
 static void showDigits(uint8_t * dig);
@@ -116,7 +115,6 @@ int main(void)
   Board_Init();
 
   /* Initialize all configured peripherals */
-  MX_I2C1_Init();
   MX_SPI1_Init();
   /* USER CODE BEGIN 2 */
   /* Initialize Scheduler */
@@ -243,109 +241,6 @@ static void sensorGetData(void) {
   Pressure.s16.u8L = (uint8_t)(tmp % 100);
 }
 
-/**
-  * @brief I2C1 Initialization Function
-  * @param None
-  * @retval None
-  */
-static void MX_I2C1_Init(void)
-{
-
-  /* USER CODE BEGIN I2C1_Init 0 */
-
-  /* USER CODE END I2C1_Init 0 */
-
-  LL_I2C_InitTypeDef I2C_InitStruct = {0};
-
-  LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
-
-  LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);
-  /**I2C1 GPIO Configuration
-  PB8   ------> I2C1_SCL
-  PB9   ------> I2C1_SDA
-  */
-  GPIO_InitStruct.Pin = LL_GPIO_PIN_8;
-  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
-  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
-  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
-  GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
-  GPIO_InitStruct.Alternate = LL_GPIO_AF_6;
-  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
-  GPIO_InitStruct.Pin = LL_GPIO_PIN_9;
-  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
-  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
-  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
-  GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
-  GPIO_InitStruct.Alternate = LL_GPIO_AF_6;
-  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
-  /* Peripheral clock enable */
-  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1);
-
-  /* I2C1 DMA Init */
-
-  /* I2C1_RX Init */
-  LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_2, LL_DMAMUX_REQ_I2C1_RX);
-
-  LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
-
-  LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PRIORITY_MEDIUM);
-
-  LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PERIPH_NOINCREMENT);
-
-  LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MEMORY_INCREMENT);
-
-  LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PDATAALIGN_BYTE);
-
-  LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MDATAALIGN_BYTE);
-
-  /* I2C1_TX Init */
-  LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_3, LL_DMAMUX_REQ_I2C1_TX);
-
-  LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_3, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
-
-  LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_3, LL_DMA_PRIORITY_MEDIUM);
-
-  LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_3, LL_DMA_PERIPH_NOINCREMENT);
-
-  LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_3, LL_DMA_MEMORY_INCREMENT);
-
-  LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_3, LL_DMA_PDATAALIGN_BYTE);
-
-  LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_3, LL_DMA_MDATAALIGN_BYTE);
-
-  /* I2C1 interrupt Init */
-
-  /* USER CODE BEGIN I2C1_Init 1 */
-  /* Enable DMA transfer complete/error interrupts */
-  LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_2);
-  LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_2);
-  LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_3);
-  LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_3);
-
-  /* USER CODE END I2C1_Init 1 */
-  /** I2C Initialization
-  */
-  I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
-  I2C_InitStruct.Timing = 0x0010061A;
-  I2C_InitStruct.AnalogFilter = LL_I2C_ANALOGFILTER_ENABLE;
-  I2C_InitStruct.DigitalFilter = 0;
-  I2C_InitStruct.OwnAddress1 = 0;
-  I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK;
-  I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT;
-  LL_I2C_EnableAutoEndMode(I2C1);
-  LL_I2C_SetOwnAddress2(I2C1, 0, LL_I2C_OWNADDRESS2_NOMASK);
-  LL_I2C_DisableOwnAddress2(I2C1);
-  LL_I2C_DisableGeneralCall(I2C1);
-  LL_I2C_DisableClockStretching(I2C1);
-  LL_I2C_Init(I2C1, &I2C_InitStruct);
-  /* USER CODE BEGIN I2C1_Init 2 */
-
-  /* USER CODE END I2C1_Init 2 */
-
-}
-
 /**
   * @brief SPI1 Initialization Function
   * @param None