1

68HC12 で複数のシリアル インターフェイスを使用するように書き込もうとしていますが、通信できません。問題を SC1DRL レジスタ (SCI Data Register Low) に書き込めないことに切り分けたと思います。

以下は私の SCI ISR からのものです。

else if (HWRegPtr->SCI.sc1sr1.bit.tdre) {
    /* Transmit the next byte in TX_Buffer. */
    if (TX_Buffer.in != TX_Buffer.out || TX_Buffer.full) {
        HWRegPtr->SCI.sc1drl.byte = TX_Buffer.buffer[TX_Buffer.out];
        TX_Buffer.out++;
        if (TX_Buffer.out >= SCI_Buffer_Size) {
            TX_Buffer.out = 0;
        }
        TX_Buffer.full = 0;
    }
    /* Disable the transmit interrupt if the buffer is empty. */
    if (TX_Buffer.in == TX_Buffer.out && !TX_Buffer.full) {
        Disable_SCI_TX();
    }
} 

TX_Buffer.buffer の内容が HWRegPtr->SCI.sc1drl.byte に書き込まれているとき、インデックス TX_Buffer.out に正しいものがありますが、私のデバッガーは変更を表示せず、シリアル インターフェイス経由でデータが送信されていません。

私が欠けているものを誰か知っていますか?

編集:

HWRegPtr は次のように定義されます。

extern HARDWARE_REGISTER *HWRegPtr;

HARDWARE_REGISTER は、すべてのレジスタを含む巨大な構造体であり、揮発性です。

4

1 に答える 1

2

SC1DRL は書き込み専用のレジスターである可能性があります (公式のレジスター ドキュメントを確認してください。Google は適切な PDF を表示していません)。つまり、コードを検証するために (ターゲット内のデバッガーを使用しても) 読み戻すことはできません。

HWRegPtr はどのように定義されていますか? volatileコンパイラーがそのポインターを介したすべての書き込みを、すぐに発生する必要があるものとして確実に処理できるようにする適切な場所がありますか?

于 2010-11-10T01:42:50.800 に答える