From 007b2d25696699f82f1f5fd747f7def179e83741 Mon Sep 17 00:00:00 2001 From: Steve Reckamp Date: Thu, 1 Feb 2024 01:28:52 -0600 Subject: [PATCH] DMA Running --- .../Application/Audio/HeadphoneWaveSink.cpp | 50 ----------------- .../Application/Audio/HeadphoneWaveSink.hpp | 2 - .../Application/Audio/RawI2SWaveSink.cpp | 51 +----------------- .../Application/Audio/RawI2SWaveSink.hpp | 2 - .../interface/Application/Audio/WaveSink.cpp | 54 ++++++++++++++++--- .../interface/Application/Audio/WaveSink.hpp | 12 ++++- benchmark/interface/Core/Inc/gpdma.h | 5 +- benchmark/interface/Core/Inc/stm32h5xx_it.h | 1 + benchmark/interface/Core/Src/gpdma.c | 53 ++++++++++++------ benchmark/interface/Core/Src/main.c | 3 +- benchmark/interface/Core/Src/stm32h5xx_it.c | 16 +++++- benchmark/interface/benchmark-interface.ioc | 48 +++++++++-------- 12 files changed, 142 insertions(+), 155 deletions(-) diff --git a/benchmark/interface/Application/Audio/HeadphoneWaveSink.cpp b/benchmark/interface/Application/Audio/HeadphoneWaveSink.cpp index 27933eab..65653b43 100644 --- a/benchmark/interface/Application/Audio/HeadphoneWaveSink.cpp +++ b/benchmark/interface/Application/Audio/HeadphoneWaveSink.cpp @@ -1,51 +1,12 @@ #include "HeadphoneWaveSink.hpp" #include "stm32h573i_discovery_audio.h" -#include "tx_semaphore.h" - -static INT active_buffer = -1; -static TX_SEMAPHORE buffer_semaphore; - -/** - * @brief Tx Transfer completed callbacks. - * @param hsai : pointer to a SAI_HandleTypeDef structure that contains - * the configuration information for SAI module. - * @retval None - */ -void BSP_AUDIO_OUT_TransferComplete_CallBack(uint32_t instance) -{ - if(instance == 0) - { - active_buffer = 1; - tx_semaphore_ceiling_put(&buffer_semaphore, 1); - } -} - -/** - * @brief Tx Transfer Half completed callbacks - * @param hsai : pointer to a SAI_HandleTypeDef structure that contains - * the configuration information for SAI module. - * @retval None - */ -void BSP_AUDIO_OUT_HalfTransfer_CallBack(uint32_t instance) -{ - if(instance == 0) - { - active_buffer = 0; - tx_semaphore_ceiling_put(&buffer_semaphore, 1); - } -} namespace Audio { HeadphoneWaveSink::HeadphoneWaveSink(Tasks::TaskRunner &runner, TX_BYTE_POOL &byte_pool) : WaveSink(runner, byte_pool) { - if(buffer_semaphore.tx_semaphore_id != TX_SEMAPHORE_ID) - { - const char *name = "Headphone buffer playback semaphore"; - tx_semaphore_create(&buffer_semaphore, (char *)name, 0); - } } PlayerState HeadphoneWaveSink::GetState() @@ -86,15 +47,4 @@ namespace Audio { return BSP_AUDIO_OUT_Stop(0) == BSP_ERROR_NONE ? SUCCESS : ERROR; } - - INT HeadphoneWaveSink::WaitForActiveBuffer() - { - while(active_buffer == -1) tx_semaphore_get(&buffer_semaphore, 50); - return active_buffer; - } - - void HeadphoneWaveSink::SetActiveBuffer(INT buffer_id) - { - active_buffer = buffer_id; - } } diff --git a/benchmark/interface/Application/Audio/HeadphoneWaveSink.hpp b/benchmark/interface/Application/Audio/HeadphoneWaveSink.hpp index 2d71d97f..f7f90fc0 100644 --- a/benchmark/interface/Application/Audio/HeadphoneWaveSink.hpp +++ b/benchmark/interface/Application/Audio/HeadphoneWaveSink.hpp @@ -15,8 +15,6 @@ namespace Audio PlayerState Initialize(); PlayerResult Play(UCHAR *buffer, ULONG size); PlayerResult Stop(); - INT WaitForActiveBuffer(); - void SetActiveBuffer(INT buffer_id); }; } diff --git a/benchmark/interface/Application/Audio/RawI2SWaveSink.cpp b/benchmark/interface/Application/Audio/RawI2SWaveSink.cpp index 13de6448..010155dd 100644 --- a/benchmark/interface/Application/Audio/RawI2SWaveSink.cpp +++ b/benchmark/interface/Application/Audio/RawI2SWaveSink.cpp @@ -8,49 +8,11 @@ extern DMA_QListTypeDef RawSAIQueue; -static INT active_buffer = -1; -static TX_SEMAPHORE buffer_semaphore; - -/** - * @brief Tx Transfer completed callbacks. - * @param hsai : pointer to a SAI_HandleTypeDef structure that contains - * the configuration information for SAI module. - * @retval None - */ -void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai) -{ - if(hsai == &hsai_BlockB1) - { - active_buffer = 1; - tx_semaphore_ceiling_put(&buffer_semaphore, 1); - } -} - -/** - * @brief Tx Transfer Half completed callbacks - * @param hsai : pointer to a SAI_HandleTypeDef structure that contains - * the configuration information for SAI module. - * @retval None - */ -void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai) -{ - if(hsai == &hsai_BlockB1) - { - active_buffer = 0; - tx_semaphore_ceiling_put(&buffer_semaphore, 1); - } -} - namespace Audio { RawI2SWaveSink::RawI2SWaveSink(Tasks::TaskRunner &runner, TX_BYTE_POOL &byte_pool) : WaveSink(runner, byte_pool), state(RESET) { - if(buffer_semaphore.tx_semaphore_id != TX_SEMAPHORE_ID) - { - const char *name = "Raw I2S buffer playback semaphore"; - tx_semaphore_create(&buffer_semaphore, (char *)name, 0); - } } PlayerState RawI2SWaveSink::GetState() @@ -60,7 +22,7 @@ namespace Audio PlayerState RawI2SWaveSink::Initialize() { - __HAL_LINKDMA(&hsai_BlockB1, hdmatx, handle_GPDMA1_Channel7); + __HAL_LINKDMA(&hsai_BlockB1, hdmatx, handle_GPDMA2_Channel2); MX_RawSAIQueue_Config(); HAL_DMAEx_List_SetCircularMode(&RawSAIQueue); @@ -96,15 +58,4 @@ namespace Audio } return ERROR; } - - INT RawI2SWaveSink::WaitForActiveBuffer() - { - while(active_buffer == -1) tx_semaphore_get(&buffer_semaphore, 50); - return active_buffer; - } - - void RawI2SWaveSink::SetActiveBuffer(INT buffer_id) - { - active_buffer = buffer_id; - } } diff --git a/benchmark/interface/Application/Audio/RawI2SWaveSink.hpp b/benchmark/interface/Application/Audio/RawI2SWaveSink.hpp index e8bdeb46..ebbf10ad 100644 --- a/benchmark/interface/Application/Audio/RawI2SWaveSink.hpp +++ b/benchmark/interface/Application/Audio/RawI2SWaveSink.hpp @@ -15,8 +15,6 @@ namespace Audio PlayerState Initialize(); PlayerResult Play(UCHAR *buffer, ULONG size); PlayerResult Stop(); - INT WaitForActiveBuffer(); - void SetActiveBuffer(INT buffer_id); private: PlayerState state; }; diff --git a/benchmark/interface/Application/Audio/WaveSink.cpp b/benchmark/interface/Application/Audio/WaveSink.cpp index 476d8a39..354a0667 100644 --- a/benchmark/interface/Application/Audio/WaveSink.cpp +++ b/benchmark/interface/Application/Audio/WaveSink.cpp @@ -1,8 +1,40 @@ #include "WaveSink.hpp" #include "../Tasks/ITask.hpp" +#include "tx_semaphore.h" + #define PLAY_BUFFER_BYTES 8 * 1024 +/** + * @brief Tx Transfer completed callbacks. + * @param hsai : pointer to a SAI_HandleTypeDef structure that contains + * the configuration information for SAI module. + * @retval None + */ +void BSP_AUDIO_OUT_TransferComplete_CallBack(uint32_t instance) +{ + if(instance == 0) + { + Audio::WaveSink::active_buffer = 1; + tx_semaphore_ceiling_put(&Audio::WaveSink::buffer_semaphore, 1); + } +} + +/** + * @brief Tx Transfer Half completed callbacks + * @param hsai : pointer to a SAI_HandleTypeDef structure that contains + * the configuration information for SAI module. + * @retval None + */ +void BSP_AUDIO_OUT_HalfTransfer_CallBack(uint32_t instance) +{ + if(instance == 0) + { + Audio::WaveSink::active_buffer = 0; + tx_semaphore_ceiling_put(&Audio::WaveSink::buffer_semaphore, 1); + } +} + namespace Audio { class PlayWaveTask: public Tasks::ITask @@ -10,7 +42,8 @@ namespace Audio public: PlayWaveTask(WaveSink &player, WaveSource &source): ITask(TX_FALSE), player(player), source(source) - { } + { + } void Run() { @@ -28,8 +61,16 @@ namespace Audio PlayerResult result; }; + INT WaveSink::active_buffer = -1; + TX_SEMAPHORE WaveSink::buffer_semaphore; + WaveSink::WaveSink(Tasks::TaskRunner &runner, TX_BYTE_POOL &byte_pool): runner(runner), size(PLAY_BUFFER_BYTES) { + if(buffer_semaphore.tx_semaphore_id != TX_SEMAPHORE_ID) + { + const char *name = "SAI buffer playback semaphore"; + tx_semaphore_create(&buffer_semaphore, (char *)name, 0); + } tx_byte_allocate(&byte_pool, (void **)&play_buffer, size, TX_NO_WAIT); } @@ -59,19 +100,18 @@ namespace Audio Configure(source); source.Seek(0); - INT active_buffer = 0; ULONG next_bytes = source.ReadData(play_buffer, size); - SetActiveBuffer(-1); + active_buffer = -1; PlayerResult status = Play((UCHAR *)play_buffer, size); while(status == SUCCESS && next_bytes > 0) { - active_buffer = WaitForActiveBuffer(); - - next_bytes = source.ReadData(&play_buffer[active_buffer * size/2], size / 2); + while(active_buffer == -1) tx_semaphore_get(&buffer_semaphore, 50); + INT buffer_idx = active_buffer; + active_buffer = -1; - SetActiveBuffer(-1); + next_bytes = source.ReadData(&play_buffer[buffer_idx * size/2], size / 2); } Stop(); source.Close(); diff --git a/benchmark/interface/Application/Audio/WaveSink.hpp b/benchmark/interface/Application/Audio/WaveSink.hpp index dacb2719..de95c776 100644 --- a/benchmark/interface/Application/Audio/WaveSink.hpp +++ b/benchmark/interface/Application/Audio/WaveSink.hpp @@ -5,6 +5,12 @@ #include "WaveSource.hpp" #include "../Tasks/TaskRunner.hpp" +extern "C" +{ +void BSP_AUDIO_OUT_TransferComplete_CallBack(uint32_t); +void BSP_AUDIO_OUT_HalfTransfer_CallBack(uint32_t); +}; + namespace Audio { typedef enum @@ -34,9 +40,11 @@ namespace Audio virtual PlayerState Initialize() = 0; virtual PlayerResult Play(UCHAR *buffer, ULONG size) = 0; virtual PlayerResult Stop() = 0; - virtual INT WaitForActiveBuffer() = 0; - virtual void SetActiveBuffer(INT buffer_id) = 0; private: + friend void ::BSP_AUDIO_OUT_TransferComplete_CallBack(uint32_t); + friend void ::BSP_AUDIO_OUT_HalfTransfer_CallBack(uint32_t); + static INT active_buffer; + static TX_SEMAPHORE buffer_semaphore; Tasks::TaskRunner &runner; UCHAR *play_buffer; ULONG size; diff --git a/benchmark/interface/Core/Inc/gpdma.h b/benchmark/interface/Core/Inc/gpdma.h index 0162c9df..c05da7c0 100644 --- a/benchmark/interface/Core/Inc/gpdma.h +++ b/benchmark/interface/Core/Inc/gpdma.h @@ -32,15 +32,16 @@ extern "C" { /* USER CODE END Includes */ -extern DMA_HandleTypeDef handle_GPDMA1_Channel7; - extern DMA_HandleTypeDef handle_GPDMA1_Channel2; +extern DMA_HandleTypeDef handle_GPDMA2_Channel2; + /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ void MX_GPDMA1_Init(void); +void MX_GPDMA2_Init(void); /* USER CODE BEGIN Prototypes */ diff --git a/benchmark/interface/Core/Inc/stm32h5xx_it.h b/benchmark/interface/Core/Inc/stm32h5xx_it.h index c37720b0..0dbc9961 100644 --- a/benchmark/interface/Core/Inc/stm32h5xx_it.h +++ b/benchmark/interface/Core/Inc/stm32h5xx_it.h @@ -58,6 +58,7 @@ void TIM6_IRQHandler(void); void USART1_IRQHandler(void); void USART3_IRQHandler(void); void SDMMC1_IRQHandler(void); +void GPDMA2_Channel2_IRQHandler(void); /* USER CODE BEGIN EFP */ /* USER CODE END EFP */ diff --git a/benchmark/interface/Core/Src/gpdma.c b/benchmark/interface/Core/Src/gpdma.c index ca1ba889..7b38c6e6 100644 --- a/benchmark/interface/Core/Src/gpdma.c +++ b/benchmark/interface/Core/Src/gpdma.c @@ -24,8 +24,8 @@ /* USER CODE END 0 */ -DMA_HandleTypeDef handle_GPDMA1_Channel7; DMA_HandleTypeDef handle_GPDMA1_Channel2; +DMA_HandleTypeDef handle_GPDMA2_Channel2; /* GPDMA1 init function */ void MX_GPDMA1_Init(void) @@ -45,20 +45,6 @@ void MX_GPDMA1_Init(void) /* USER CODE BEGIN GPDMA1_Init 1 */ /* USER CODE END GPDMA1_Init 1 */ - handle_GPDMA1_Channel7.Instance = GPDMA1_Channel7; - handle_GPDMA1_Channel7.InitLinkedList.Priority = DMA_HIGH_PRIORITY; - handle_GPDMA1_Channel7.InitLinkedList.LinkStepMode = DMA_LSM_FULL_EXECUTION; - handle_GPDMA1_Channel7.InitLinkedList.LinkAllocatedPort = DMA_LINK_ALLOCATED_PORT0; - handle_GPDMA1_Channel7.InitLinkedList.TransferEventMode = DMA_TCEM_LAST_LL_ITEM_TRANSFER; - handle_GPDMA1_Channel7.InitLinkedList.LinkedListMode = DMA_LINKEDLIST_CIRCULAR; - if (HAL_DMAEx_List_Init(&handle_GPDMA1_Channel7) != HAL_OK) - { - Error_Handler(); - } - if (HAL_DMA_ConfigChannelAttributes(&handle_GPDMA1_Channel7, DMA_CHANNEL_NPRIV) != HAL_OK) - { - Error_Handler(); - } handle_GPDMA1_Channel2.Instance = GPDMA1_Channel2; handle_GPDMA1_Channel2.InitLinkedList.Priority = DMA_HIGH_PRIORITY; handle_GPDMA1_Channel2.InitLinkedList.LinkStepMode = DMA_LSM_FULL_EXECUTION; @@ -77,6 +63,43 @@ void MX_GPDMA1_Init(void) /* USER CODE END GPDMA1_Init 2 */ +} +/* GPDMA2 init function */ +void MX_GPDMA2_Init(void) +{ + + /* USER CODE BEGIN GPDMA2_Init 0 */ + + /* USER CODE END GPDMA2_Init 0 */ + + /* Peripheral clock enable */ + __HAL_RCC_GPDMA2_CLK_ENABLE(); + + /* GPDMA2 interrupt Init */ + HAL_NVIC_SetPriority(GPDMA2_Channel2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(GPDMA2_Channel2_IRQn); + + /* USER CODE BEGIN GPDMA2_Init 1 */ + + /* USER CODE END GPDMA2_Init 1 */ + handle_GPDMA2_Channel2.Instance = GPDMA2_Channel2; + handle_GPDMA2_Channel2.InitLinkedList.Priority = DMA_HIGH_PRIORITY; + handle_GPDMA2_Channel2.InitLinkedList.LinkStepMode = DMA_LSM_FULL_EXECUTION; + handle_GPDMA2_Channel2.InitLinkedList.LinkAllocatedPort = DMA_LINK_ALLOCATED_PORT0; + handle_GPDMA2_Channel2.InitLinkedList.TransferEventMode = DMA_TCEM_LAST_LL_ITEM_TRANSFER; + handle_GPDMA2_Channel2.InitLinkedList.LinkedListMode = DMA_LINKEDLIST_CIRCULAR; + if (HAL_DMAEx_List_Init(&handle_GPDMA2_Channel2) != HAL_OK) + { + Error_Handler(); + } + if (HAL_DMA_ConfigChannelAttributes(&handle_GPDMA2_Channel2, DMA_CHANNEL_NPRIV) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN GPDMA2_Init 2 */ + + /* USER CODE END GPDMA2_Init 2 */ + } /* USER CODE BEGIN 1 */ diff --git a/benchmark/interface/Core/Src/main.c b/benchmark/interface/Core/Src/main.c index 24a629de..7913b4b5 100644 --- a/benchmark/interface/Core/Src/main.c +++ b/benchmark/interface/Core/Src/main.c @@ -100,7 +100,7 @@ int main(void) /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_GPDMA1_Init(); - MX_ADC2_Init(); + MX_GPDMA2_Init(); MX_ETH_Init(); MX_FMC_Init(); MX_ICACHE_Init(); @@ -110,6 +110,7 @@ int main(void) MX_USART1_UART_Init(); MX_USART3_UART_Init(); MX_ADC1_Init(); + MX_ADC2_Init(); MX_SAI1_Init(); /* USER CODE BEGIN 2 */ diff --git a/benchmark/interface/Core/Src/stm32h5xx_it.c b/benchmark/interface/Core/Src/stm32h5xx_it.c index 9865f805..fa71ba93 100644 --- a/benchmark/interface/Core/Src/stm32h5xx_it.c +++ b/benchmark/interface/Core/Src/stm32h5xx_it.c @@ -55,8 +55,8 @@ /* USER CODE END 0 */ /* External variables --------------------------------------------------------*/ -extern DMA_HandleTypeDef handle_GPDMA1_Channel7; extern SAI_HandleTypeDef haudio_out_sai; +extern DMA_HandleTypeDef handle_GPDMA2_Channel2; extern SD_HandleTypeDef hsd1; extern UART_HandleTypeDef huart1; extern UART_HandleTypeDef huart3; @@ -248,6 +248,20 @@ void SDMMC1_IRQHandler(void) /* USER CODE END SDMMC1_IRQn 1 */ } +/** + * @brief This function handles GPDMA2 Channel 2 global interrupt. + */ +void GPDMA2_Channel2_IRQHandler(void) +{ + /* USER CODE BEGIN GPDMA2_Channel2_IRQn 0 */ + + /* USER CODE END GPDMA2_Channel2_IRQn 0 */ + HAL_DMA_IRQHandler(&handle_GPDMA2_Channel2); + /* USER CODE BEGIN GPDMA2_Channel2_IRQn 1 */ + + /* USER CODE END GPDMA2_Channel2_IRQn 1 */ +} + /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ diff --git a/benchmark/interface/benchmark-interface.ioc b/benchmark/interface/benchmark-interface.ioc index d07f352d..ac40de63 100644 --- a/benchmark/interface/benchmark-interface.ioc +++ b/benchmark/interface/benchmark-interface.ioc @@ -32,11 +32,12 @@ FILEX.FX_SD_INTERFACE=1 FILEX.IPParameters=useRTOS,FX_SD_INTERFACE,FX_APP_MEM_POOL_SIZE,FILEX_APPLICATION_THREAD_STACK_SIZE,FX_DRIVER_SDMMC_INIT FILEX.useRTOS=1 File.Version=6 -GPDMA1.IPParameters=PRIORITY_LL_GPDMACH2,LINKEDLISTMODE_GPDMACH2,PRIORITY_LL_GPDMACH7,LINKEDLISTMODE_GPDMACH7 +GPDMA1.IPParameters=PRIORITY_LL_GPDMACH2,LINKEDLISTMODE_GPDMACH2 GPDMA1.LINKEDLISTMODE_GPDMACH2=DMA_LINKEDLIST_CIRCULAR -GPDMA1.LINKEDLISTMODE_GPDMACH7=DMA_LINKEDLIST_CIRCULAR GPDMA1.PRIORITY_LL_GPDMACH2=DMA_HIGH_PRIORITY -GPDMA1.PRIORITY_LL_GPDMACH7=DMA_HIGH_PRIORITY +GPDMA2.IPParameters=PRIORITY_LL_GPDMACH2,LINKEDLISTMODE_GPDMACH2 +GPDMA2.LINKEDLISTMODE_GPDMACH2=DMA_LINKEDLIST_CIRCULAR +GPDMA2.PRIORITY_LL_GPDMACH2=DMA_HIGH_PRIORITY GPIO.groupedBy=Show All KeepUserPlacement=false Linkedlist.MDMA_Channel0.GP_SW.0.BlkHWRequest=DMA_BREQ_SINGLE_BURST @@ -128,28 +129,29 @@ Mcu.ContextProject=TrustZoneDisabled Mcu.Family=STM32H5 Mcu.IP0=ADC1 Mcu.IP1=ADC2 -Mcu.IP10=LINKEDLIST -Mcu.IP11=MEMORYMAP -Mcu.IP12=NVIC -Mcu.IP13=OCTOSPI1 -Mcu.IP14=PWR -Mcu.IP15=RCC -Mcu.IP16=SAI1 -Mcu.IP17=SDMMC1 -Mcu.IP18=SYS -Mcu.IP19=THREADX +Mcu.IP10=ICACHE +Mcu.IP11=LINKEDLIST +Mcu.IP12=MEMORYMAP +Mcu.IP13=NVIC +Mcu.IP14=OCTOSPI1 +Mcu.IP15=PWR +Mcu.IP16=RCC +Mcu.IP17=SAI1 +Mcu.IP18=SDMMC1 +Mcu.IP19=SYS Mcu.IP2=BOOTPATH -Mcu.IP20=UCPD1 -Mcu.IP21=USART1 -Mcu.IP22=USART3 +Mcu.IP20=THREADX +Mcu.IP21=UCPD1 +Mcu.IP22=USART1 +Mcu.IP23=USART3 Mcu.IP3=CORTEX_M33_NS Mcu.IP4=DEBUG Mcu.IP5=ETH Mcu.IP6=FILEX Mcu.IP7=FMC Mcu.IP8=GPDMA1 -Mcu.IP9=ICACHE -Mcu.IPNb=23 +Mcu.IP9=GPDMA2 +Mcu.IPNb=24 Mcu.Name=STM32H573IIKxQ Mcu.Package=UFBGA176 Mcu.Pin0=PI7 @@ -191,7 +193,7 @@ Mcu.Pin13=PI4 Mcu.Pin130=VP_FILEX_VS_FileOoSystemJjFileXJjCore Mcu.Pin131=VP_FILEX_VS_SDOointerface Mcu.Pin132=VP_GPDMA1_VS_GPDMACH2 -Mcu.Pin133=VP_GPDMA1_VS_GPDMACH7 +Mcu.Pin133=VP_GPDMA2_VS_GPDMACH2 Mcu.Pin134=VP_ICACHE_VS_ICACHE Mcu.Pin135=VP_PWR_VS_SECSignals Mcu.Pin136=VP_PWR_VS_LPOM @@ -306,6 +308,7 @@ NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:fals NVIC.EXTI14_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true NVIC.ForceEnableDMAVector=true NVIC.GPDMA1_Channel2_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true +NVIC.GPDMA2_Channel2_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false @@ -317,7 +320,6 @@ NVIC.SavedPendsvIrqHandlerGenerated=true NVIC.SavedSvcallIrqHandlerGenerated=true NVIC.SavedSystickIrqHandlerGenerated=true NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:true\:false -NVIC.TIM6_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:true NVIC.TimeBase=TIM6_IRQn NVIC.TimeBaseIP=TIM6 NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true @@ -900,7 +902,7 @@ ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_GPDMA1_Init-GPDMA1-false-HAL-true,4-MX_ADC2_Init-ADC2-false-HAL-true,5-MX_ETH_Init-ETH-false-HAL-true,6-MX_FMC_Init-FMC-false-HAL-true,7-MX_ICACHE_Init-ICACHE-false-HAL-true,8-MX_OCTOSPI1_Init-OCTOSPI1-false-HAL-true,9-MX_SDMMC1_SD_Init-SDMMC1-false-HAL-true,10-MX_UCPD1_Init-UCPD1-false-LL-true,11-MX_USART1_UART_Init-USART1-false-HAL-true,12-MX_USART3_UART_Init-USART3-false-HAL-true,13-MX_ADC1_Init-ADC1-false-HAL-true,14-MX_FileX_Init-FILEX-true-HAL-false,15-MX_SAI1_Init-SAI1-false-HAL-true,0-MX_CORTEX_M33_NS_Init-CORTEX_M33_NS-false-HAL-true,0-MX_PWR_Init-PWR-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_GPDMA1_Init-GPDMA1-false-HAL-true,4-MX_GPDMA2_Init-GPDMA2-false-HAL-true,5-MX_ETH_Init-ETH-false-HAL-true,6-MX_FMC_Init-FMC-false-HAL-true,7-MX_ICACHE_Init-ICACHE-false-HAL-true,8-MX_OCTOSPI1_Init-OCTOSPI1-false-HAL-true,9-MX_SDMMC1_SD_Init-SDMMC1-false-HAL-true,10-MX_UCPD1_Init-UCPD1-false-LL-true,11-MX_USART1_UART_Init-USART1-false-HAL-true,12-MX_USART3_UART_Init-USART3-false-HAL-true,13-MX_ADC1_Init-ADC1-false-HAL-true,14-MX_FileX_Init-FILEX-true-HAL-false,15-MX_ADC2_Init-ADC2-false-HAL-true,16-MX_SAI1_Init-SAI1-false-HAL-true,0-MX_CORTEX_M33_NS_Init-CORTEX_M33_NS-false-HAL-true,0-MX_PWR_Init-PWR-false-HAL-true RCC.ADCFreq_Value=64000701.904296875 RCC.AHBFreq_Value=64000701.904296875 RCC.APB1Freq_Value=64000701.904296875 @@ -1091,8 +1093,8 @@ VP_FILEX_VS_SDOointerface.Mode=SD_interface VP_FILEX_VS_SDOointerface.Signal=FILEX_VS_SDOointerface VP_GPDMA1_VS_GPDMACH2.Mode=LINKEDLIST_GPDMACH2 VP_GPDMA1_VS_GPDMACH2.Signal=GPDMA1_VS_GPDMACH2 -VP_GPDMA1_VS_GPDMACH7.Mode=LINKEDLIST_GPDMACH7 -VP_GPDMA1_VS_GPDMACH7.Signal=GPDMA1_VS_GPDMACH7 +VP_GPDMA2_VS_GPDMACH2.Mode=LINKEDLIST_GPDMACH2 +VP_GPDMA2_VS_GPDMACH2.Signal=GPDMA2_VS_GPDMACH2 VP_ICACHE_VS_ICACHE.Mode=DefaultMode VP_ICACHE_VS_ICACHE.Signal=ICACHE_VS_ICACHE VP_MEMORYMAP_VS_MEMORYMAP.Mode=CurAppReg