From 628ee68d3db51c447bb3575886200401f0a8cbed Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Mon, 2 Nov 2020 15:02:39 +0100 Subject: [PATCH] tx cmplt by interrupt --- cube/User/Src/main2.c | 7 ++++++- cube/User/Src/mbusComm.c | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/cube/User/Src/main2.c b/cube/User/Src/main2.c index 43c219d..7d7ff5d 100644 --- a/cube/User/Src/main2.c +++ b/cube/User/Src/main2.c @@ -64,5 +64,10 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { if (hadc == &frontendAdc) { frontendAdcCallback(hadc); } - } + +void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { + if (huart == &mbusUart) { + mbusCommTxCpltCallback(huart); + } +} \ No newline at end of file diff --git a/cube/User/Src/mbusComm.c b/cube/User/Src/mbusComm.c index 78b8a4c..288d8f9 100644 --- a/cube/User/Src/mbusComm.c +++ b/cube/User/Src/mbusComm.c @@ -13,6 +13,7 @@ typedef enum { SEND, SEND_CONT, SENDING, + SENDING_DONE, ENABLE_FRONTEND, DISABLE_FRONTEND } e_mbusCommState; @@ -59,18 +60,26 @@ static void handleRequestEngine(void *handle) { localMbusCommHandle->retryCnt = 0; HAL_UART_Transmit_IT(&mbusUart, localMbusCommHandle->sendBuf, 5); localMbusCommHandle->state = SENDING; - schAdd(handleRequestEngine, handle, 15, 0); // ask me again in 15ms in the next state ... + // schAdd(handleRequestEngine, handle, 15, 0); // ask me again in 15ms in the next state ... } break; case SENDING: logMsg("hre state SENDING"); + break; + + case SENDING_DONE: + logMsg("hre state SENDING_DONE"); + /* if (HAL_UART_GetState(&mbusUart) == HAL_UART_STATE_READY) { // ... whether I'm done localMbusCommHandle->state = ENABLE_FRONTEND; schAdd(handleRequestEngine, handle, 3, 0); } else { schAdd(handleRequestEngine, handle, 1, 0); // not yet done, ask me again in 1ms } + */ + localMbusCommHandle->state = ENABLE_FRONTEND; + schAdd(handleRequestEngine, handle, 3, 0); break; case ENABLE_FRONTEND: @@ -93,6 +102,13 @@ static void handleRequestEngine(void *handle) { } } +void mbusCommTxCpltCallback(UART_HandleTypeDef *huart) { + logMsg("mctx: mbus tx done"); + if (mbusCommHandle.state == SENDING) { + mbusCommHandle.state = SENDING_DONE; + schAdd(handleRequestEngine, (void*) &mbusCommHandle, 0, 0); + } +} void mbusCommRequest(uint8_t cmd, uint8_t addr) { if (mbusCommHandle.state == IDLE) {