вообще, по даташиту, приоритет у usci a0, затем a1. по идее, если прием символов закончился (usci_a0), начинается отсчет интервалов 3,5 символа (usci_a1). главное, что на 149-м msp эта
алгоритм работала, а на 5437a нет. вот код, может добавит немного ясности
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV,4))
{
case 0:break;
case 2:
b = UCA0RXBUF;
if ( UCA0STAT & UCRXERR ) return;
__no_operation();
if ( BlockReceive ) return;
if(ModBusMode == MODE_ASCII)
{
if ( ! FrameReady )
{
if(PDUlen >= 254){ PDUlen = 0; mbCRC16 = 0xFFFF; MB_Diag.BusCommErrorCount++; } //Message too long
if (! mbFrameStarted) // waiting for new frame
{
if (b == ':') // SOF
{
mbFrameStarted = 1;
mbAsciiChar = 0;
mbLRC = 0;
PDUlen = 0;
}
}
else
{
if((PDUlen != 0) && (b == ':')) { PDUlen = 0; MB_Diag.BusCommErrorCount++; } // SOF occured before previous EOF
if(b == 10)
{// EOF
if (mbLRC == 0)
{
FrameReady = 1;PDUlen--; mbFrameStarted = 0; eventAdd();
BlockReceive = 1;
return;
}
else
{
mbFrameStarted = 0; PDUlen = 0; MB_Diag.BusCommErrorCount++;
}
}
if (mbAsciiChar)
{
mbLRC += (serialPDU [PDUlen] = Get_ASCII_Byte(mbAsciiChar,

);
PDUlen ++;
mbAsciiChar = 0;
}
else
mbAsciiChar = b;
}
}
}
else
{ // RTU
if ( ! FrameReady )
{
CharCounter=0;
UCA1TXBUF=0;
UCA1IE |= UCTXIE ;
if(! mbFrameStarted) // starting new frame
{
mbFrameStarted = 1;
PDUlen = 0;
}
if ( PDUlen >= sizeof ( serialPDU ) )
{
PDUlen = 0;
}
serialPDU [PDUlen] = b;
if (PDUlen >= 2)
{
prev2CRC16 = prev1CRC16;
prev1CRC16 = mbCRC16;
}
nextCRC16(

;
*/
PDUlen ++;
}
}
}
break;
case 4:
break;
default: break;}
}
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
switch(__even_in_range(UCA1IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: break;
case 4:
++CharCounter;
if(CharCounter > 3 ) // end of frame period (3.5 ch) expired => complete frame
{
CharCounter=0;
if (ModBusMode == MODE_RTU)
{
if ( PDUlen > 3 )
{
if ( ! crc16_calc ( serialPDU, PDUlen ) )
{
CharCounter=0;
FrameReady = 1;
BlockReceive = 1;
mbFrameStarted = 0;
PDUlen -= 2;
eventAdd();
}
else
{
FrameReady = 0;
mbFrameStarted = 0;
MB_Diag.BusCommErrorCount++;
}
}
else
{
FrameReady = 0;
mbFrameStarted = 0;
MB_Diag.BusCommErrorCount++;
}
}
UCA1IE &= ~UCTXIE ;
}
else UCA1TXBUF = 0;
break;
default: break;
}
}