From 7a4ee00118b76375279f307af7f1f2c1073fb23a Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 17 Aug 2023 18:09:32 +0200 Subject: [PATCH] Restructure DAC init --- src/cppmain.cc | 6 ++-- src/main.c | 81 +++++++++++++++++++------------------------------- src/main.h | 2 +- 3 files changed, 34 insertions(+), 55 deletions(-) diff --git a/src/cppmain.cc b/src/cppmain.cc index 8d2edd3..3bdd56a 100644 --- a/src/cppmain.cc +++ b/src/cppmain.cc @@ -32,7 +32,7 @@ namespace Heck { void dac1_set(u32 val) { - HAL_DAC_SetValue(&hdac_global, DAC_CHANNEL_1, DAC_ALIGN_12B_R, val); + HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, val); } void dac1_toggle() @@ -48,12 +48,12 @@ namespace Heck { void dac_start_dma() { - HAL_DAC_Start_DMA(&hdac_global, DAC_CHANNEL_1, (u32 *)audio_buffer, BUFFER_SIZE, DAC_ALIGN_12B_R); + HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, (u32 *)audio_buffer, BUFFER_SIZE, DAC_ALIGN_12B_R); } void dac_stop_dma() { - HAL_DAC_Stop_DMA(&hdac_global, DAC_CHANNEL_1); + HAL_DAC_Stop_DMA(&hdac1, DAC_CHANNEL_1); } // LED diff --git a/src/main.c b/src/main.c index c092d2d..dc2737a 100644 --- a/src/main.c +++ b/src/main.c @@ -3,7 +3,7 @@ #include "cppmain.h" #include "usb_device.h" -DAC_HandleTypeDef hdac_global; +DAC_HandleTypeDef hdac1; DMA_HandleTypeDef hdma_dac1; TIM_HandleTypeDef htim2; TIM_HandleTypeDef htim6; @@ -170,8 +170,7 @@ void MX_GPIO_Init(void) HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET); { - GPIO_InitTypeDef GPIO_InitStruct; - memset(&GPIO_InitStruct, 0, sizeof GPIO_InitStruct); + GPIO_InitTypeDef GPIO_InitStruct = { 0 }; GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; @@ -180,8 +179,7 @@ void MX_GPIO_Init(void) } { - GPIO_InitTypeDef GPIO_InitStruct; - memset(&GPIO_InitStruct, 0, sizeof GPIO_InitStruct); + GPIO_InitTypeDef GPIO_InitStruct = { 0 }; GPIO_InitStruct.Pin = GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; @@ -190,7 +188,14 @@ void MX_GPIO_Init(void) HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); } - /* EXTI interrupt init*/ + { + GPIO_InitTypeDef GPIO_InitStruct = { 0 }; + GPIO_InitStruct.Pin = GPIO_PIN_4; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + } + HAL_NVIC_SetPriority(EXTI0_IRQn, 5, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn); } @@ -202,63 +207,38 @@ void MX_GPIO_Init(void) void MX_DAC_Init(void) { - DAC_ChannelConfTypeDef sConfig = { 0 }; - hdac_global.Instance = DAC; - if (HAL_DAC_Init(&hdac_global) != HAL_OK) { + DAC_ChannelConfTypeDef conf = { 0 }; + hdac1.Instance = DAC1; + if (HAL_DAC_Init(&hdac1) != HAL_OK) { Error_Handler(); } - // DAC channel OUT1 config*/ - sConfig.DAC_Trigger = DAC_TRIGGER_T6_TRGO; - sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE; - if (HAL_DAC_ConfigChannel(&hdac_global, &sConfig, DAC_CHANNEL_1) != HAL_OK) { + conf.DAC_Trigger = DAC_TRIGGER_T6_TRGO; + conf.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE; + if (HAL_DAC_ConfigChannel(&hdac1, &conf, DAC_CHANNEL_1) != HAL_OK) { Error_Handler(); } - // DAC channel OUT2 config - sConfig.DAC_Trigger = DAC_TRIGGER_NONE; - if (HAL_DAC_ConfigChannel(&hdac_global, &sConfig, DAC_CHANNEL_2) != HAL_OK) { + hdma_dac1.Instance = DMA1_Stream5; + hdma_dac1.Init.Channel = DMA_CHANNEL_7; + hdma_dac1.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_dac1.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_dac1.Init.MemInc = DMA_MINC_ENABLE; + hdma_dac1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; + hdma_dac1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; + hdma_dac1.Init.Mode = DMA_NORMAL; + hdma_dac1.Init.Priority = DMA_PRIORITY_LOW; + hdma_dac1.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_dac1) != HAL_OK) { Error_Handler(); } -} -void HAL_DAC_MspInit(DAC_HandleTypeDef *dacHandle) -{ - GPIO_InitTypeDef GPIO_InitStruct = { 0 }; - if (dacHandle->Instance == DAC) { - /* DAC clock enable */ - /**DAC GPIO Configuration - PA4 ------> DAC_OUT1 - PA5 ------> DAC_OUT2 - */ - GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /* DAC DMA Init */ - /* DAC1 Init */ - hdma_dac1.Instance = DMA1_Stream5; - hdma_dac1.Init.Channel = DMA_CHANNEL_7; - hdma_dac1.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_dac1.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_dac1.Init.MemInc = DMA_MINC_ENABLE; - hdma_dac1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - hdma_dac1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - hdma_dac1.Init.Mode = DMA_NORMAL; - hdma_dac1.Init.Priority = DMA_PRIORITY_LOW; - hdma_dac1.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma_dac1) != HAL_OK) { - Error_Handler(); - } - - __HAL_LINKDMA(dacHandle, DMA_Handle1, hdma_dac1); - } + __HAL_LINKDMA(&hdac1, DMA_Handle1, hdma_dac1); } void HAL_DAC_MspDeInit(DAC_HandleTypeDef *dacHandle) { - if (dacHandle->Instance == DAC) { + if (dacHandle->Instance == DAC1) { HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4 | GPIO_PIN_5); HAL_DMA_DeInit(dacHandle->DMA_Handle1); } @@ -272,7 +252,6 @@ void HAL_DAC_MspDeInit(DAC_HandleTypeDef *dacHandle) void MX_DMA_Init(void) { - /* DMA interrupt init */ /* DMA1_Stream5_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 5, 0); diff --git a/src/main.h b/src/main.h index a93e294..ac9c1e0 100644 --- a/src/main.h +++ b/src/main.h @@ -8,7 +8,7 @@ extern "C" { #endif - extern DAC_HandleTypeDef hdac_global; + extern DAC_HandleTypeDef hdac1; extern RNG_HandleTypeDef hrng; extern TIM_HandleTypeDef htim2; extern TIM_HandleTypeDef htim6;