working now?

This commit is contained in:
2020-11-25 10:02:38 +01:00
parent 7c63579390
commit edf1942ad3
6 changed files with 40 additions and 35 deletions

View File

@ -106,7 +106,7 @@ typedef struct {
static t_mbusCommHandle mbusCommHandle = { .requestId = 0, .state = MBCS_IDLE, .retryCnt = 0, .cmd = 0, .addr = 0, .startTime = 0, .receiveCnt = 0, .waitForOctet = false, .receiving = false };
static t_mbusCommStats mbusCommStats = { .requestCnt = 0, .errorCnt = 0, .overrunCnt = 0 };
static t_mbusCommStats mbusCommStats = { .mbusRequestCnt = 0, .mbusErrorCnt = 0, .uartOverrunCnt = 0, .uartFramingErrCnt = 0, .uartParityErrCnt = 0 };
static bool mbusCommEnabled = true;
@ -262,15 +262,25 @@ void mbusCommISR() {
uint32_t isrflags = READ_REG(mbusUart.Instance->SR);
if (((isrflags & USART_SR_RXNE) != RESET) || ((isrflags & USART_SR_ORE) != RESET)) {
if ((isrflags & USART_SR_ORE) != RESET) {
mbusCommStats.uartOverrunCnt += 1;
}
// it is required to read the DR in any case here, not only when the buffer has space
// otherwise the interrupt flag won't be disabled, particularly important in case of
// ORE
uint8_t data = (uint8_t)(mbusUart.Instance->DR & (uint8_t)0x00FF);
// coloredMsg(LOG_RED, false, "mbc isr 0x%02x", data);
if (mbusCommHandle.receiveBuffer.writeIdx < mbusCommHandle.receiveBuffer.size) {
mbusCommHandle.receiveBuffer.buffer[mbusCommHandle.receiveBuffer.writeIdx] = data;
mbusCommHandle.receiveBuffer.writeIdx += 1;
}
return;
} else {
coloredMsg(LOG_RED, false, "mbc isr error 0x%02x", isrflags);
if ((isrflags & USART_SR_FE) != RESET) {
mbusCommStats.uartFramingErrCnt += 1;
}
if ((isrflags & USART_SR_PE) != RESET) {
mbusCommStats.uartParityErrCnt += 1;
}
}
}
@ -484,7 +494,7 @@ void mbusCommExec() {
case MBCS_TIMEOUT:
coloredMsg(LOG_RED, false, "mbc hre [%d] state TIMEOUT", mbusCommHandle.requestId);
mbusCommStats.errorCnt += 1;
mbusCommStats.mbusErrorCnt += 1;
mbusCommHandle.device->failures += 1;
mbusCommHandle.startTime = 0; // disable timeout
mbusCommHandle.waitForOctet = false; // disable receiver
@ -527,18 +537,14 @@ static e_mbusCommRequestResult mbusCommRequest(t_mbusDevice *mbusDevice) {
mbusCommHandle.device = mbusDevice;
mbusDevice->requests += 1;
coloredMsg(LOG_YELLOW, true, "mbc mcr [%d] new request %s R:%d F:%d GRC:%d GEC:%d",
coloredMsg(LOG_YELLOW, true, "mbc mcr [%d] new request %s",
mbusCommHandle.requestId,
mbusDevice->deviceName,
mbusDevice->requests,
mbusDevice->failures,
mbusCommStats.requestCnt,
mbusCommStats.errorCnt);
mbusDevice->deviceName);
oledPrint(OLED_SCREEN0, mbusDevice->deviceName);
res = MBCRR_TRIGGERED;
mbusCommStats.requestCnt += 1;
mbusCommStats.mbusRequestCnt += 1;
}
} else {
res = MBCRR_DISABLED;