2010-11-10 80 views
1

我想寫在68HC12上使用多個串行接口,但我不能讓它說話。我想我已經解決了無法寫入SC1DRL寄存器(SCI數據寄存器低)的問題。無法寫入68HC12板上的SC1DRL寄存器 - 我錯過了什麼?

以下是從我的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中的索引TX_Buffer.out正確的事情時,其內容被寫入HWRegPtr-> SCI.sc1drl.byte,但我的調試器不顯示更改,並且沒有數據通過串行接口傳輸。

有人知道我錯過了什麼嗎?

編輯:

HWRegPtr定義爲:

extern HARDWARE_REGISTER *HWRegPtr; 

HARDWARE_REGISTER是一個巨大的結構與它的所有寄存器,並且是揮發性的。

回答

2

SC1DRL很可能是一個只寫寄存器(請檢查官方註冊文檔以確保 - 谷歌沒有爲我提供正確的PDF)。這意味着您無法讀取它(即使使用目標調試器)來驗證您的代碼。

HWRegPtr是如何定義的?在正確的位置是否有volatile以確保編譯器將通過該指針的每次寫入視爲必須立即發生的事情?

+0

我試着把我的答案放在這裏,但格式太多,所以我只編輯我的問題並將其添加到那裏。 另外,您可能對只寫內容是正確的,但那是讓我對文檔感到困惑的事情。該文檔指出,寫入SC1DRL訪問只寫SCI發送數據寄存器(TDR)的8位。所以當你寫信給SC1DRL時,你真的寫信給TDR? – Justin 2010-11-10 01:48:19

+1

好吧,我已經自己想出了 - 你是對的,我看不到寄存器中的內容,因爲它是隻寫的,但我的代碼實際上是寫給它的。我看不到通過串行線傳輸的任何內容,因爲我沒有使用虛擬調制解調器電纜。 x.x中 – Justin 2010-11-15 20:35:09