Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

what does mean by __even_in_range(UCA0IV,0x08)

I found this part from the example code for UART for MSP430FR57xx from TI. I don't understand what __even_in_range(UCA0IV,0x08) does mean?

#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
    switch(__even_in_range(UCA0IV,0x08))
    {
    case 0:break;                             // Vector 0 - no interrupt
    case 2:                                   // Vector 2 - RXIFG
        while (!(UCA0IFG&UCTXIFG));           // USCI_A0 TX buffer ready?
        UCA0TXBUF = UCA0RXBUF;                // TX -> RXed character
        break;
    case 4:break;                             // Vector 4 - TXIFG
    default: break;
    }
}
like image 321
engineer nikemen Avatar asked Sep 05 '25 03:09

engineer nikemen


1 Answers

The interrupt vector register never has a value that is odd, or larger than eight. So if you tell the compiler about this, it is possible to generate slightly more efficient code by leaving out the checks for those values, and by implementing the cases with a simple jump table.

like image 51
CL. Avatar answered Sep 07 '25 22:09

CL.