リングバッファと送信バッファエンプティ割り込みで送信しようとして罠にはまったので覚書
一回目複数文字の送信はうまくいくけど、二回目の送信できない
調査不足かもしれないけどワークアランド見つけた
送信完了割り込み中で、送信バッファエンプティフラグを立てるとうまくいった
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 件のコメント:
コメントを投稿