Kann nicht an SC1DRL Register auf 68HC12 Tafel schreiben - was bin ich dabei?

StackOverflow https://stackoverflow.com/questions/4139999

  •  30-09-2019
  •  | 
  •  

Frage

Ich versuche, die mehrere serielle Schnittstelle auf dem 68HC12 zu verwenden, um zu schreiben, aber bin, kann es nicht zu sprechen kommen. Ich glaube, ich in der Lage, isoliert habe das Problem nicht auf die SC1DRL Register (SCI-Datenregister Low).

zu schreiben

Im Folgenden ist von meiner 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 hat das Richtige im Index TX_Buffer.out, wenn sein Inhalt geschrieben werden zu HWRegPtr-> SCI.sc1drl.byte, aber mein Debugger zeigt keine Veränderung und keine Daten über die seriellen übertragen werden Schnittstelle.

Jeder weiß, was ich bin fehlt?

edit:

HWRegPtr ist definiert als:

extern HARDWARE_REGISTER *HWRegPtr;

HARDWARE_REGISTER ist eine riesige Struktur mit allen Registern darin, und ist flüchtig.

War es hilfreich?

Lösung

Es ist wahrscheinlich, dass SC1DRL ist ein Nur-Schreib-Register (überprüfen Sie die amtlichen Register docs sicher sein - Google dreht sich nicht die richtige PDF für mich). Das heißt, Sie können es nicht (auch mit einem In-Ziel-Debugger) zurückgelesen Code zu überprüfen.

Wie wird HWRegPtr definiert? Ist es volatile an den richtigen Stellen haben die Compiler behandelt jeden Schreib durch diesen Zeiger als etwas, um sicherzustellen, das sofort geschehen muss?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top