working now?
This commit is contained in:
@ -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;
|
||||
|
Reference in New Issue
Block a user