1
#define InitUART( BRGVal, BRGHighVal )      {                       \
                        UARTTxD = UARTTxDInit;                  \
                        DirUARTTxD = DirOutput;                 \
                        DirUARTRxD = DirInput;                  \
                        SPBRG2 = BRGVal;                        \
                        TXSTA2bits.BRGH = BRGHighVal;           \
                        TXSTA2bits.SYNC = 0;                    \
                        TXSTA2bits.TX9 = 0;                     \
                        TXSTA2bits.TXEN = 1;                    \
                        RCSTA2bits.SPEN = 1;                    \
                        RCSTA2bits.RX9 = 0;                     \
                        IPR3bits.RC2IP = 1;                     \
                        IPR3bits.TX2IP = 0;                     \
                        PIE3bits.TX2IE = 0;                     \
                        PIE3bits.RC2IE = 1;                     \
                        RCSTA2bits.CREN = 0;                    \
                        }

最後の行で、RCSTA2bits.CREN を 0 に設定する必要があるのはなぜですか? oに設定されている場合、入ってくるデータをどのように受け取ることができますか?

優先度の高い受信割り込みで UsART2 を初期化します

InitUART (9600,1);// initialise the USART2 with high priority receive interrupt

これは私の高い割り込みコードです

//when some data is transmitted in through USART2
if (UARTRxIntFlag == 1) {
//receive interrupt occurs, do receive function(UARTChIn = ?)
}

これは私の低割り込みコードです

rom unsigned char * szHello = "Hello\r\n";
if (IsSWI( SWI_LMTData ) ){
    unsigned char ch = *LMTRxCh;

    // if the received character from USART1 is an 'H'
    if (ch=='h' || ch=='H'){
        // say hello back through USART1
        LMTTransmit( szHello, 0, 7, 255, LogicalChannel );
        // send 'H' through USART2
        UARTChOut = ch;
    }
    // remove the character from the receive buffer
    LMTRxAdvanceCh;
    //Receive enable for USART2(RCSTA2bits.CREN = 1;)
    UARTEnable = 1;
    ClearSWI( SWI_LMTData );        // Clear interrupt flag
    return;
}
if (IsSWI( SWI_Tick ) ){
    ClearSWI( SWI_Tick );       // Clear interrupt flag
    return;
}

ページ 106 0F http://www.flexipanel.com/Docs/Toothpick%202.1%20DS484.pdf

このコードは機能していません。理由がわかりません。それを手伝ってもらえますか?

4

2 に答える 2

1

これが連続受信イネーブル ビットで、最大 1 に設定することをお勧めします。

RCSTA2bits.CREN = 1; //Enable UART Receiver

これにより、受信機が非同期モードで有効になります。

ああ、次の方法でレジスタを初期化することもできます。

RCSTA2 = 0b10010000; //Enable SPEN, CREN, no 9th bit

このようにして、データシートを参照する場合、単一ビットを書き込んで他の左 (ADDEN) を気にする代わりに、レジスタを書き込んでいる値と直接比較できます。

于 2014-07-08T11:42:47.857 に答える