PIC24FJ256GB606デバイスの割り込み駆動型UARTの作業中です。私のコードは、UART受信割り込みが誤って最初にトリガされるのを除いて、うまく動作します。 メインルーチンである。 [コード]PIC24FJ初回実行時の誤割り込みトリガー
int main(){
System_init();
uart_init();
// UART2_PPS
RPINR19bits.U2RXR= 21;
RPOR13bits.RP26R = 5;
TRISGbits.TRISG6 = 1;
TRISGbits.TRISG7 = 0;
uart_puts("\n**********************************************");
uart_puts("\nMy project ");
uart_puts("\n x");
uart_puts("\n x");
uart_puts("\n"__DATE__);
uart_puts("\n**********************************************");
return -1;
}
}
[/コード]
ISRである:
[code]void __attribute__ ((interrupt, no_auto_psv)) _U2RXInterrupt(void)
{
IFS1bits.U2RXIF = 0;
uart_puts("False Trigger");
__delay_ms(1000);
}[/code]
初期化である:
[![\[code\]int uart_init()
{
int status = -1;
size_t i;
// STSEL 1; IREN disabled; PDSEL 8N; UARTEN enabled; RTSMD disabled; USIDL disabled; WAKE disabled; ABAUD disabled; LPBACK disabled; BRGH enabled; URXINV disabled; UEN TX_RX;
U2MODE = 0x8008;
// OERR NO_ERROR_cleared; URXISEL RX_ONE_CHAR; UTXBRK COMPLETED; UTXEN disabled; ADDEN disabled; UTXISEL0 TX_ONE_CHAR; UTXINV disabled;
U2STA = 0x0000;
// U2TXREG 0;
U2TXREG = 0x0000;
// BaudRate = 9600; Frequency = 4000000 Hz; U2BRG 103;
U2BRG = 0x0067;
// ADMADDR 0; ADMMASK 0;
U2ADMD = 0x0000;
rb_attr_t attr = {sizeof(_rbmem\[0\]), ARRAY_SIZE(_rbmem), _rbmem};
if (ring_buffer_init(&_rbd, &attr) == 0) {
U2MODEbits.UARTEN = 1; // And turn the peripheral on
U2STAbits.UTXEN = 1; //UART2 Transmit Enable
IFS1bits.U2RXIF = 0; //_U2RXIF = 0;
IEC1bits.U2RXIE = 1; //_U2RXIE = 1;
status = 0;
}
return status;
}\[/code\]][1]][1]
画像が取り付けを参照してくださいと以下を考慮して、 1)マイクロコントローラこの時点では何も受け取らないと予想されます。私は同じコードを実行しようとすると、同じ結果が得られた。 2)受信割り込みIEC1bits.U2RXIE = 0を無効にすると、このコードは正常に機能します。
私はPIC24の詳細については不明ですが、後半のピンの初期化シーケンスは少し怪しそうです。遅いRxDルーティング設定がペリフェラル入力に低い初期状態をもたらし、グリッチがスタートビットとして解釈されると、私は驚くことはありません。それを動かしてみてください。 – doynax