diff --git a/.cproject b/.cproject
index 94806a0..1c9221e 100644
--- a/.cproject
+++ b/.cproject
@@ -40,7 +40,7 @@
-
+
@@ -152,7 +152,7 @@
-
+
-
+
diff --git a/.mxproject b/.mxproject
index bb83b95..f528bd6 100644
--- a/.mxproject
+++ b/.mxproject
@@ -1,7 +1,7 @@
[PreviousGenFiles]
-HeaderPath=/home/abody/Private/work/private/f407ve_hs_uart/Inc
+HeaderPath=/home/abody/Private/work/private/f407ve_hs_uart/projects/f407ve_hs_uart/Inc
HeaderFiles=gpio.h;crc.h;dma.h;spi.h;usart.h;stm32f4xx_it.h;stm32_assert.h;stm32f4xx_hal_conf.h;main.h;fsmc.h;sdio.h;usb_otg.h;ffconf.h;bsp_driver_sd.h;sd_diskio.h;fatfs.h;sys.h;
-SourcePath=/home/abody/Private/work/private/f407ve_hs_uart/Src
+SourcePath=/home/abody/Private/work/private/f407ve_hs_uart/projects/f407ve_hs_uart/Src
SourceFiles=gpio.c;crc.c;dma.c;spi.c;usart.c;stm32f4xx_it.c;stm32f4xx_hal_msp.c;main.c;fsmc.c;sdio.c;usb_otg.c;bsp_driver_sd.c;sd_diskio.c;fatfs.c;sys.c;
[PreviousLibFiles]
@@ -10,7 +10,7 @@ LibFiles=Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h;Drivers/STM32F4xx_
[PreviousUsedCubeIDEFiles]
SourceFiles=Src/main.c;Src/gpio.c;Src/crc.c;Src/dma.c;Src/bsp_driver_sd.c;Src/sd_diskio.c;Src/fatfs.c;Src/fsmc.c;Src/sdio.c;Src/spi.c;Src/sys.c;Src/usart.c;Src/usb_otg.c;Src/stm32f4xx_it.c;Src/stm32f4xx_hal_msp.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_gpio.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_crc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_rcc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_utils.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_exti.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_dma.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fsmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_spi.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usart.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c;Middlewares/Third_Party/FatFs/src/diskio.c;Middlewares/Third_Party/FatFs/src/ff.c;Middlewares/Third_Party/FatFs/src/ff_gen_drv.c;Middlewares/Third_Party/FatFs/src/option/syscall.c;Middlewares/Third_Party/FatFs/src/option/ccsbcs.c;Src/system_stm32f4xx.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_gpio.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_crc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_rcc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_utils.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_exti.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_dma.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fsmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_spi.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usart.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c;Middlewares/Third_Party/FatFs/src/diskio.c;Middlewares/Third_Party/FatFs/src/ff.c;Middlewares/Third_Party/FatFs/src/ff_gen_drv.c;Middlewares/Third_Party/FatFs/src/option/syscall.c;Middlewares/Third_Party/FatFs/src/option/ccsbcs.c;Src/system_stm32f4xx.c;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;;Middlewares/Third_Party/FatFs/src/diskio.c;Middlewares/Third_Party/FatFs/src/ff.c;Middlewares/Third_Party/FatFs/src/ff_gen_drv.c;Middlewares/Third_Party/FatFs/src/option/syscall.c;Middlewares/Third_Party/FatFs/src/option/ccsbcs.c;
HeaderPath=Drivers/STM32F4xx_HAL_Driver/Inc;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;Middlewares/Third_Party/FatFs/src;Drivers/CMSIS/Device/ST/STM32F4xx/Include;Drivers/CMSIS/Include;Inc;
-CDefines=USE_FULL_LL_DRIVER;USE_HAL_DRIVER;STM32F407xx;USE_FULL_LL_DRIVER;USE_HAL_DRIVER;USE_HAL_DRIVER;
+CDefines=USE_FULL_LL_DRIVER;USE_HAL_DRIVER;STM32F407xx;USE_HAL_DRIVER;USE_HAL_DRIVER;
[PreviousUsedMakefileFiles]
SourceFiles=Src/main.c;Src/gpio.c;Src/crc.c;Src/dma.c;Src/bsp_driver_sd.c;Src/sd_diskio.c;Src/fatfs.c;Src/fsmc.c;Src/sdio.c;Src/spi.c;Src/usart.c;Src/usb_otg.c;Src/stm32f4xx_it.c;Src/stm32f4xx_hal_msp.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_gpio.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_crc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_dma.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fsmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_spi.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usart.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_rcc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_utils.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_exti.c;Middlewares/Third_Party/FatFs/src/diskio.c;Middlewares/Third_Party/FatFs/src/ff.c;Middlewares/Third_Party/FatFs/src/ff_gen_drv.c;Middlewares/Third_Party/FatFs/src/option/syscall.c;Middlewares/Third_Party/FatFs/src/option/ccsbcs.c;Src/system_stm32f4xx.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_gpio.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_crc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_dma.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fsmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_spi.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usart.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_rcc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_utils.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_exti.c;Middlewares/Third_Party/FatFs/src/diskio.c;Middlewares/Third_Party/FatFs/src/ff.c;Middlewares/Third_Party/FatFs/src/ff_gen_drv.c;Middlewares/Third_Party/FatFs/src/option/syscall.c;Middlewares/Third_Party/FatFs/src/option/ccsbcs.c;Src/system_stm32f4xx.c;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;null;Middlewares/Third_Party/FatFs/src/diskio.c;Middlewares/Third_Party/FatFs/src/ff.c;Middlewares/Third_Party/FatFs/src/ff_gen_drv.c;Middlewares/Third_Party/FatFs/src/option/syscall.c;Middlewares/Third_Party/FatFs/src/option/ccsbcs.c;
diff --git a/App/application.c b/App/application.c
index 9284863..286d1a6 100644
--- a/App/application.c
+++ b/App/application.c
@@ -78,8 +78,10 @@ void MainLoop()
for(uint16_t idx = 0; idx < sizeof(g_uartStatuses) / sizeof(g_uartStatuses[0]); ++idx) {
if(!g_uartStatuses[idx].txBuffer.busy && send) {
+ uint16_t len = sizeof(text2Send) - 1 - (rand() & randmask);
DIAG_ENTER_BUSY();
- PostPacket(&g_uartStatuses[idx], text2Send, sizeof(text2Send) - 1 - (rand() & randmask), &g_crcStatus, 1);
+ MemcpyDma(GetTxBuffer(&g_uartStatuses[idx]), text2Send, len);
+ PostPacket(&g_uartStatuses[idx], NULL, len, &g_crcStatus, 1);
DIAG_EXIT_BUSY();
}
for(uint16_t rIdx = 0; rIdx < 2; ++rIdx)
diff --git a/App/application_cpp.cpp b/App/application_cpp.cpp
index c11e9bf..fcbbb49 100644
--- a/App/application_cpp.cpp
+++ b/App/application_cpp.cpp
@@ -12,6 +12,7 @@
#include "f4ll/crchandler.h"
#include "f4ll/memcpydma.h"
#include "f4ll/consolehandler.h"
+#include "f4ll/irqlock.h"
extern "C" {
#include "main.h"
#include "globals.h"
@@ -34,6 +35,7 @@ extern "C" void MainLoop()
"Megszentsegtelenithetetlensegeskedeseitekert\r\n"
"--------------------------------------------\r\n\0\0\0";
+
f4ll::MemcpyDma::Init(MEMCPY_DMA_ENGINE, MEMCPY_DMA_STREAM);
f4ll::CrcHandler::Init(DMA2, LL_DMA_STREAM_4);
f4ll::ConsoleHandler::Init(UART4, CONSOLE_DMA_ENGINE, 0u, CONSOLE_TX_DMA_STREAM);
@@ -44,8 +46,9 @@ extern "C" void MainLoop()
f4ll::PacketUsart u6{ USART6, DMA2, LL_DMA_STREAM_1, LL_DMA_STREAM_6 };
f4ll::PacketUsart * usarts[] = { &u1, &u2, &u3, &u6 };
- for(unsigned int i=0; i < sizeof(usarts) / sizeof(usarts[0]); ++i)
- g_usarts[i] = usarts[i];
+ f4ll::PacketUsart **dst = g_usarts;
+ for(auto usart: usarts)
+ *dst++ = usart;
uint32_t lastStatsTick = 0;
uint32_t prevSentTick = 0;
@@ -62,7 +65,7 @@ extern "C" void MainLoop()
lastStatsTick = HAL_GetTick();
- for(auto u : usarts)
+ for(auto u : g_usarts)
u->SetupReceive();
for(;;) {
@@ -72,7 +75,7 @@ extern "C" void MainLoop()
if(send)
prevSentTick += PACKAGE_DELAY_MS;
- for(auto u : usarts) {
+ for(auto u : g_usarts) {
if(!u->IsTxBusy() && send) {
//DIAG_ENTER_BUSY();
auto len = sizeof(text2Send) - 1 - (rand() & randmask);
@@ -88,10 +91,10 @@ extern "C" void MainLoop()
}
}
if(tick - lastStatsTick > STATS_DELAY_MS) {
- f4ll::ConsoleHandler::Instance().PrintStats(statId, *usarts[statId]);
+ f4ll::ConsoleHandler::Instance().PrintStats(statId, *g_usarts[statId]);
lastStatsTick += STATS_DELAY_MS;
++statId;
- if(statId >= sizeof(usarts) / sizeof(usarts[0]))
+ if(statId >= sizeof(g_usarts) / sizeof(g_usarts[0]))
statId = 0;
}
// uint32_t ein = LL_GPIO_ReadInputPort(KEY1_GPIO_Port);
diff --git a/Src/dma.c b/Src/dma.c
index 3c690e7..1db20db 100644
--- a/Src/dma.c
+++ b/Src/dma.c
@@ -121,31 +121,31 @@ void MX_DMA_Init(void)
/* DMA interrupt init */
/* DMA1_Stream1_IRQn interrupt configuration */
- NVIC_SetPriority(DMA1_Stream1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
+ NVIC_SetPriority(DMA1_Stream1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
NVIC_EnableIRQ(DMA1_Stream1_IRQn);
/* DMA1_Stream2_IRQn interrupt configuration */
- NVIC_SetPriority(DMA1_Stream2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
+ NVIC_SetPriority(DMA1_Stream2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
NVIC_EnableIRQ(DMA1_Stream2_IRQn);
/* DMA1_Stream3_IRQn interrupt configuration */
- NVIC_SetPriority(DMA1_Stream3_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
+ NVIC_SetPriority(DMA1_Stream3_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
NVIC_EnableIRQ(DMA1_Stream3_IRQn);
/* DMA1_Stream4_IRQn interrupt configuration */
- NVIC_SetPriority(DMA1_Stream4_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
+ NVIC_SetPriority(DMA1_Stream4_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
NVIC_EnableIRQ(DMA1_Stream4_IRQn);
/* DMA1_Stream5_IRQn interrupt configuration */
- NVIC_SetPriority(DMA1_Stream5_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
+ NVIC_SetPriority(DMA1_Stream5_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
NVIC_EnableIRQ(DMA1_Stream5_IRQn);
/* DMA1_Stream6_IRQn interrupt configuration */
- NVIC_SetPriority(DMA1_Stream6_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
+ NVIC_SetPriority(DMA1_Stream6_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
NVIC_EnableIRQ(DMA1_Stream6_IRQn);
/* DMA2_Stream0_IRQn interrupt configuration */
- NVIC_SetPriority(DMA2_Stream0_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
+ NVIC_SetPriority(DMA2_Stream0_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
NVIC_EnableIRQ(DMA2_Stream0_IRQn);
/* DMA2_Stream1_IRQn interrupt configuration */
- NVIC_SetPriority(DMA2_Stream1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
+ NVIC_SetPriority(DMA2_Stream1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
NVIC_EnableIRQ(DMA2_Stream1_IRQn);
/* DMA2_Stream2_IRQn interrupt configuration */
- NVIC_SetPriority(DMA2_Stream2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
+ NVIC_SetPriority(DMA2_Stream2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
NVIC_EnableIRQ(DMA2_Stream2_IRQn);
/* DMA2_Stream3_IRQn interrupt configuration */
NVIC_SetPriority(DMA2_Stream3_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
diff --git a/Src/usart.c b/Src/usart.c
index c864883..63afa98 100644
--- a/Src/usart.c
+++ b/Src/usart.c
@@ -88,7 +88,7 @@ void MX_UART4_Init(void)
LL_DMA_DisableFifoMode(DMA1, LL_DMA_STREAM_4);
/* UART4 interrupt Init */
- NVIC_SetPriority(UART4_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
+ NVIC_SetPriority(UART4_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
NVIC_EnableIRQ(UART4_IRQn);
USART_InitStruct.BaudRate = 115200;
@@ -168,7 +168,7 @@ void MX_USART1_UART_Init(void)
LL_DMA_DisableFifoMode(DMA2, LL_DMA_STREAM_7);
/* USART1 interrupt Init */
- NVIC_SetPriority(USART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
+ NVIC_SetPriority(USART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
NVIC_EnableIRQ(USART1_IRQn);
USART_InitStruct.BaudRate = 5250000;
@@ -248,7 +248,7 @@ void MX_USART2_UART_Init(void)
LL_DMA_DisableFifoMode(DMA1, LL_DMA_STREAM_6);
/* USART2 interrupt Init */
- NVIC_SetPriority(USART2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
+ NVIC_SetPriority(USART2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
NVIC_EnableIRQ(USART2_IRQn);
USART_InitStruct.BaudRate = 5250000;
@@ -328,7 +328,7 @@ void MX_USART3_UART_Init(void)
LL_DMA_DisableFifoMode(DMA1, LL_DMA_STREAM_3);
/* USART3 interrupt Init */
- NVIC_SetPriority(USART3_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
+ NVIC_SetPriority(USART3_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
NVIC_EnableIRQ(USART3_IRQn);
USART_InitStruct.BaudRate = 5250000;
@@ -408,7 +408,7 @@ void MX_USART6_UART_Init(void)
LL_DMA_DisableFifoMode(DMA2, LL_DMA_STREAM_6);
/* USART6 interrupt Init */
- NVIC_SetPriority(USART6_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
+ NVIC_SetPriority(USART6_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
NVIC_EnableIRQ(USART6_IRQn);
USART_InitStruct.BaudRate = 5250000;
diff --git a/components/f4ll/src/packetusart.cpp b/components/f4ll/src/packetusart.cpp
index 9b0a1f5..b8141f1 100644
--- a/components/f4ll/src/packetusart.cpp
+++ b/components/f4ll/src/packetusart.cpp
@@ -19,6 +19,8 @@ PacketUsart::PacketUsart(USART_TypeDef *usart, DMA_TypeDef *dma, uint32_t stream
: UsartCore(usart, dma, streamRx, streamTx)
{
CrcHandler::Instance().AttachSlot(m_crcSlot);
+ LL_USART_EnableIT_IDLE(usart);
+ LL_USART_EnableIT_ERROR(usart);
}
diff --git a/components/f4ll/src/usartcore.cpp b/components/f4ll/src/usartcore.cpp
index df53def..27ffbb9 100644
--- a/components/f4ll/src/usartcore.cpp
+++ b/components/f4ll/src/usartcore.cpp
@@ -14,28 +14,37 @@ UsartCore::UsartCore(USART_TypeDef *usart, DMA_TypeDef *dma, uint32_t streamRx,
, m_rxDma(dma, streamRx)
, m_txDma(dma, streamTx)
{
+ uint32_t status = usart->SR;
+ volatile uint32_t tmpreg = usart->DR; // clearing some of the error/status bits in the USART
+ (void) tmpreg;
+ (void) status;
+
+ *m_txDma.GetIfcReg() =
+ m_txDma.GetTcMask() | m_rxDma.GetHtMask() | m_txDma.GetTeMask() | m_rxDma.GetFeMask() | m_rxDma.GetDmeMask();
+ *m_rxDma.GetIfcReg() =
+ m_rxDma.GetTcMask() | m_rxDma.GetHtMask() | m_rxDma.GetTeMask() | m_rxDma.GetFeMask() | m_rxDma.GetDmeMask();
+
LL_DMA_EnableIT_TC(dma, streamRx);
LL_DMA_EnableIT_TE(dma, streamRx);
LL_DMA_EnableIT_TC(dma, streamTx);
LL_DMA_EnableIT_TE(dma, streamTx);
- LL_USART_EnableIT_IDLE(usart);
- LL_USART_EnableIT_ERROR(usart);
}
void UsartCore::UsartIsr()
{
- if(LL_USART_IsActiveFlag_TC(m_usart) && LL_USART_IsEnabledIT_TC(m_usart)) { // transmission complete
+ uint32_t status = m_usart->SR;
+ volatile uint32_t tmpreg = m_usart->DR; // clearing some of the error/status bits in the HW
+ (void) tmpreg;
+
+ if(LL_USART_IsEnabledIT_TC(m_usart) && LL_USART_IsActiveFlag_TC(m_usart)) { // transmission complete
LL_USART_DisableIT_TC(m_usart);
TransmissionComplete();
- } else if(LL_USART_IsEnabledIT_ERROR(m_usart)) {
- uint32_t status = m_usart->SR;
- volatile uint32_t tmpreg = m_usart->DR; // clearing some of the error/status bits in the HW
- (void) tmpreg;
-
- if(status & USART_SR_IDLE) {
- ReceiverIdle();
- }
+ }
+ if(LL_USART_IsEnabledIT_IDLE(m_usart) && (status & USART_SR_IDLE)) {
+ ReceiverIdle();
+ }
+ if(LL_USART_IsEnabledIT_ERROR(m_usart)) {
if(status & USART_SR_FE) {
FramingError();
}
diff --git a/components/f4ll_c/inc/dma_helper.h b/components/f4ll_c/inc/dma_helper.h
index 21949dc..baa5e11 100644
--- a/components/f4ll_c/inc/dma_helper.h
+++ b/components/f4ll_c/inc/dma_helper.h
@@ -28,6 +28,7 @@ uint32_t GetDmeMask(uint32_t stream);
uint32_t GetTeMask(uint32_t stream);
uint32_t GetHtMask(uint32_t stream);
uint32_t GetTcMask(uint32_t stream);
+uint32_t GetFeMask(uint32_t stream);
void InitDmaInfo(DMAINFO *info, DMA_TypeDef *dma, uint32_t stream);
diff --git a/components/f4ll_c/src/usart_handler.c b/components/f4ll_c/src/usart_handler.c
index 21f9cea..6336553 100644
--- a/components/f4ll_c/src/usart_handler.c
+++ b/components/f4ll_c/src/usart_handler.c
@@ -36,6 +36,11 @@ void InitUartStatus(
struct crcstatus_t *crcStatus,
PACKETRECEIVEDCALLBACK packetReceivedCallback, void * packetReceivedCallbackParam)
{
+ uint32_t status = usart->SR;
+ volatile uint32_t tmpreg = usart->DR; // clearing some of the error/status bits in the USART
+ (void) tmpreg;
+ (void) status;
+
st->usart = usart;
InitDmaInfo(&st->rxDmaInfo, dma, stream_rx);
InitDmaInfo(&st->txDmaInfo, dma, stream_tx);
@@ -60,6 +65,13 @@ void InitUartStatus(
AttachCrcTask(crcStatus, &st->crcSlot, st->crcTasks, 2);
memset(&st->stats, 0, sizeof(st->stats));
+ *GetIfcReg(dma, stream_rx) =
+ GetTcMask(stream_rx) | GetHtMask(stream_rx) |
+ GetTeMask(stream_rx) | GetFeMask(stream_rx) | GetDmeMask(stream_rx);
+ *GetIfcReg(dma, stream_tx) =
+ GetTcMask(stream_tx) | GetHtMask(stream_tx) |
+ GetTeMask(stream_tx) | GetFeMask(stream_tx) | GetDmeMask(stream_tx);
+
LL_DMA_EnableIT_TC(dma, stream_rx);
LL_DMA_EnableIT_TE(dma, stream_rx);
LL_DMA_EnableIT_TC(dma, stream_tx);
@@ -98,16 +110,8 @@ uint8_t PostPacket(USARTSTATUS *status, uint8_t const *payload, uint16_t length,
BuildHeader(&status->txBuffer, status->txSerial++, length);
uint16_t payloadLength = RoundUpTo4(length);
- if(payload) {
-#ifdef USART_USE_MEMCPY_DMA
- if((uint32_t)payload & 3)
- memcpy(status->txBuffer.packet.payload, payload, length);
- else
- MemcpyDma(status->txBuffer.packet.payload, payload, length);
-#else
+ if(payload)
memcpy(status->txBuffer.packet.payload, payload, length);
-#endif
- }
status->txBuffer.requestedLength = sizeof(USARTPACKETHEADER) + payloadLength + sizeof(uint32_t); // +4 for the hash
status->txBuffer.busy = 1;
status->txBuffer.error = 0;
diff --git a/f407ve_hs_uart Debug.launch b/f407ve_hs_uart Debug.launch
new file mode 100644
index 0000000..c4f37f6
--- /dev/null
+++ b/f407ve_hs_uart Debug.launch
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/f407ve_hs_uart Release.launch b/f407ve_hs_uart Release.launch
new file mode 100644
index 0000000..624f9d8
--- /dev/null
+++ b/f407ve_hs_uart Release.launch
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/f407ve_hs_uart.ioc b/f407ve_hs_uart.ioc
index 808a780..978d846 100644
--- a/f407ve_hs_uart.ioc
+++ b/f407ve_hs_uart.ioc
@@ -262,15 +262,15 @@ Mcu.UserName=STM32F407VETx
MxCube.Version=5.4.0
MxDb.Version=DB.5.0.40
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
-NVIC.DMA1_Stream1_IRQn=true\:0\:0\:false\:false\:true\:false\:true
-NVIC.DMA1_Stream2_IRQn=true\:0\:0\:false\:false\:true\:false\:true
-NVIC.DMA1_Stream3_IRQn=true\:0\:0\:false\:false\:true\:false\:true
-NVIC.DMA1_Stream4_IRQn=true\:0\:0\:false\:false\:true\:false\:true
-NVIC.DMA1_Stream5_IRQn=true\:0\:0\:false\:false\:true\:false\:true
-NVIC.DMA1_Stream6_IRQn=true\:0\:0\:false\:false\:true\:false\:true
-NVIC.DMA2_Stream0_IRQn=true\:0\:0\:false\:false\:true\:true\:true
-NVIC.DMA2_Stream1_IRQn=true\:0\:0\:false\:false\:true\:false\:true
-NVIC.DMA2_Stream2_IRQn=true\:0\:0\:false\:false\:true\:false\:true
+NVIC.DMA1_Stream1_IRQn=true\:1\:0\:true\:false\:true\:false\:true
+NVIC.DMA1_Stream2_IRQn=true\:1\:0\:true\:false\:true\:false\:true
+NVIC.DMA1_Stream3_IRQn=true\:1\:0\:true\:false\:true\:false\:true
+NVIC.DMA1_Stream4_IRQn=true\:1\:0\:true\:false\:true\:false\:true
+NVIC.DMA1_Stream5_IRQn=true\:1\:0\:true\:false\:true\:false\:true
+NVIC.DMA1_Stream6_IRQn=true\:1\:0\:true\:false\:true\:false\:true
+NVIC.DMA2_Stream0_IRQn=true\:1\:0\:true\:false\:true\:true\:true
+NVIC.DMA2_Stream1_IRQn=true\:1\:0\:true\:false\:true\:false\:true
+NVIC.DMA2_Stream2_IRQn=true\:1\:0\:true\:false\:true\:false\:true
NVIC.DMA2_Stream3_IRQn=true\:0\:0\:false\:false\:true\:true\:true
NVIC.DMA2_Stream4_IRQn=true\:0\:0\:false\:false\:true\:true\:true
NVIC.DMA2_Stream5_IRQn=true\:0\:0\:false\:false\:true\:false\:true
@@ -287,11 +287,11 @@ NVIC.SPI1_IRQn=true\:0\:0\:false\:false\:true\:true\:true
NVIC.SPI2_IRQn=true\:0\:0\:false\:false\:true\:true\:true
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true
-NVIC.UART4_IRQn=true\:0\:0\:false\:false\:true\:true\:true
-NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true
-NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true
-NVIC.USART3_IRQn=true\:0\:0\:false\:false\:true\:true\:true
-NVIC.USART6_IRQn=true\:0\:0\:false\:false\:true\:true\:true
+NVIC.UART4_IRQn=true\:1\:0\:true\:false\:true\:true\:true
+NVIC.USART1_IRQn=true\:1\:0\:true\:false\:true\:true\:true
+NVIC.USART2_IRQn=true\:1\:0\:true\:false\:true\:true\:true
+NVIC.USART3_IRQn=true\:1\:0\:true\:false\:true\:true\:true
+NVIC.USART6_IRQn=true\:1\:0\:true\:false\:true\:true\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
PA0-WKUP.Mode=Asynchronous
PA0-WKUP.Signal=UART4_TX