No se puede escribir en el registro SC1DRL en 68HC12 bordo - lo que me estoy perdiendo?

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

  •  30-09-2019
  •  | 
  •  

Pregunta

Estoy intentando escribir en utilizar la interfaz serie múltiple en el 68HC12, pero mañana no puede conseguir que se hable. Creo que he aislado el problema de no ser capaz de escribir en el registro SC1DRL (SCI Registro de Datos Bajo).

El siguiente es de mi 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 tiene lo correcto en el índice TX_Buffer.out cuando su contenido se escriben en HWRegPtr-> SCI.sc1drl.byte, pero mi depurador no muestra un cambio, y no se están transmitiendo datos a través de la serie interfaz.

Alguien sabe lo que me falta?

editar

HWRegPtr se define como:

extern HARDWARE_REGISTER *HWRegPtr;

HARDWARE_REGISTER es un struct gigante con todos los registros en el mismo, y es volátil.

¿Fue útil?

Solución

Es probable que SC1DRL es un registro de sólo escritura (verifique en los documentos oficiales de registro para asegurarse - Google no es subir el PDF adecuado para mí). Esto significa que no puede leer de nuevo (incluso con un depurador en destino) para verificar su código.

¿Cómo se define HWRegPtr? ¿Tiene volatile en los lugares adecuados para asegurar que los compilador trata cada escritura a través de ese puntero como algo que debe suceder inmediatamente?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top