Added MS/TP tweak to improve byte reception and processing at higher baud rates and larger packet sizes. Thank you Peter Mc Shane!

This commit is contained in:
skarg
2012-03-12 21:26:53 +00:00
parent 9eb0066764
commit 2a51a1db7c
4 changed files with 23 additions and 9 deletions
+11 -5
View File
@@ -1504,11 +1504,17 @@ uint16_t dlmstp_receive(
if (Receive_State == MSTP_RECEIVE_STATE_IDLE) {
transmitting = MSTP_Transmit_FSM();
}
/* only do receive state machine while we don't have a frame */
if ((MSTP_Flag.ReceivedValidFrame == false) &&
(MSTP_Flag.ReceivedValidFrameNotForUs == false) &&
(MSTP_Flag.ReceivedInvalidFrame == false) && (transmitting == false)) {
MSTP_Receive_Frame_FSM();
if (transmitting == false) {
while ((MSTP_Flag.ReceivedValidFrame == false) &&
(MSTP_Flag.ReceivedValidFrameNotForUs == false) &&
(MSTP_Flag.ReceivedInvalidFrame == false)) {
/* only do receive state machine while we don't have a frame */
MSTP_Receive_Frame_FSM();
/* process another byte, if available */
if (!rs485_byte_available(NULL)) {
break;
}
}
}
/* only do master state machine while rx is idle */
if ((Receive_State == MSTP_RECEIVE_STATE_IDLE) && (transmitting == false)) {
+3 -1
View File
@@ -141,7 +141,9 @@ bool rs485_byte_available(
bool data_available = false; /* return value */
if (!FIFO_Empty(&Receive_Buffer)) {
*data_register = FIFO_Get(&Receive_Buffer);
if (data_register) {
*data_register = FIFO_Get(&Receive_Buffer);
}
timer_elapsed_start(&Silence_Timer);
data_available = true;
led_rx_on_interval(10);