Impossible d'écrire sur le registre SC1DRL 68HC12 bord - ce que je manque?

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

  •  30-09-2019
  •  | 
  •  

Question

Je suis en train d'écrire à utiliser l'interface multi-série sur le 68HC12, mais je suis ne peut pas le faire parler. Je pense avoir isolé le problème de ne pas pouvoir écrire sur le registre SC1DRL (SCI registre de données bas).

Ce qui suit est de mon 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 a la bonne chose à l'index TX_Buffer.out lorsque son contenu est en cours d'écriture à HWRegPtr-> SCI.sc1drl.byte, mais mon débogueur ne montre pas de changement, et aucune donnée est transmise sur la série interface.

Quelqu'un sait ce que je suis absent?

edit:

HWRegPtr est défini comme suit:

extern HARDWARE_REGISTER *HWRegPtr;

HARDWARE_REGISTER est un struct géant avec tous les registres, et est volatile.

Était-ce utile?

La solution

Il est probable que SC1DRL est un registre en écriture seule (vérifier la documentation du registre officiel pour être sûr - Google ne tourne pas le droit PDF pour moi). Cela signifie que vous ne pouvez pas lire de nouveau (même avec un débogueur en cible) pour vérifier votre code.

Comment est définie HWRegPtr? At-il volatile dans les bons endroits pour assurer le compilateur traite chaque écriture par ce pointeur comme quelque chose qui doit se faire immédiatement?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top