2016年2月28日日曜日

MSP430FR5969 UART 送信割り込みの罠

MSP430FR5969 UART 送信割り込みの罠

リングバッファと送信バッファエンプティ割り込みで送信しようとして罠にはまったので覚書

一回目複数文字の送信はうまくいくけど、二回目の送信できない

調査不足かもしれないけどワークアランド見つけた

送信完了割り込み中で、送信バッファエンプティフラグを立てるとうまくいった

void __attribute__ ((interrupt(USCI_A0_VECTOR))) USCI_A0_ISR (void)
{
        int ch;

        switch(__even_in_range(UCA0IV, USCI_UART_UCTXCPTIFG)) {
        case USCI_NONE:
                break;

        case USCI_UART_UCRXIFG:
                ch = UCA0RXBUF;
                snrRingBuffer_PutByte(rx_ring, ch);
                break;

        case USCI_UART_UCTXIFG:
                if ((ch = snrRingBuffer_GetByte(tx_ring)) != -1) {
                        UCA0TXBUF = ch;
                        flag_complete++;
                }
                else {
                        uart_a_disable_tx_int();
                        uart_a_disable_tx_cmpl_int();
                }
                break;

        case USCI_UART_UCSTTIFG:
                break;

        case USCI_UART_UCTXCPTIFG:
#ifdef __MSP430FR5969
                UCA0IFG |= UCTXIFG;     // <<-- work arround                              
#endif
                break;
        }
}

0 件のコメント:

コメントを投稿