__even_in_range(UCA0IV,0x08)是什么意思

eng*_*men 3 msp430 interrupt-handling

我从TI的MSP430FR57xx的UART示例代码中找到了这部分。我不明白这__even_in_range(UCA0IV,0x08)是什么意思?

#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;
    }
}
Run Code Online (Sandbox Code Playgroud)

CL.*_*CL. 5

中断向量寄存器的值永远不能为奇数或大于8。因此,如果您将此告知编译器,则可以通过省略对这些值的检查,并通过简单的跳转表来实现这些情况,从而生成效率更高的代码。