Domanda

sto cercando di scrivere per utilizzare l'interfaccia seriale multipla sul 68HC12, ma del mattino non riesce a farlo parlare. Credo di aver isolato il problema di non essere in grado di scrivere al registro SC1DRL (SIC Data Register Low).

Di seguito è dalla mia 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 ha la cosa giusta al indice TX_Buffer.out quando i suoi contenuti vengono scritti HWRegPtr-> SCI.sc1drl.byte, ma il mio debugger non mostra un cambiamento, e nessun dato è sua trasmissione attraverso la serie interfaccia.

Qualcuno sa che cosa mi manca?

modifica:

HWRegPtr è definito come:

extern HARDWARE_REGISTER *HWRegPtr;

HARDWARE_REGISTER è una struct gigante con tutti i registri in esso, ed è volatile.

È stato utile?

Soluzione

E 'probabile che SC1DRL è un registro di sola scrittura (controllare la documentazione ufficiale del registro per essere sicuri - Google non è di alzare il diritto PDF per me). Ciò significa che non si può leggere di nuovo (anche con un debugger in-target) per verificare il codice.

Come si definisce HWRegPtr? Ha a volatile nei posti giusti al fine di garantire il compilatore tratta ogni scrittura attraverso quel puntatore come qualcosa che deve accadere immediatamente?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top