Forum: Mikrocontroller und Digitale Elektronik Interruptproblem beim DUART SCC2692 von Philips


von Oliver (Gast)


Lesenswert?

Hallo,

wer kennt den DoppelUART (siehe Betreff) und vielleicht auch seine
Tücken?

Wenn ich im IMR-Register nur eine Freigabe für den TxRDYA-Interrupt
erteile, dann funktioniert der Senden-Interrupt.

Wenn ich im IMR-Register nur eine Freigabe für den
RxDY/FFULLA-Interrupt erteile, dann funktioniert der
Empfangen-Interrupt.

Beim Auslesen des Statusregisters ISR wird auch das entsprechende Flag
gesetzt.

Wenn ich beide Interrupts für den Empfang und das Senden freigebe, dann
wird kein Empfangen-Interrupt mehr ausgelöst. Es funktioniert nur noch
der Senden-Interrupt.

Initialisierung:

WriteByte(0, ADDR_DUART_MR1A, 0x13); // 8 data,no parity
WriteByte(0, ADDR_DUART_MR2A, 0x07); // 1 stop
WriteByte(0, ADDR_DUART_CSRA, 0xBB); // 9600 Baud fuer
Transmitter+Receiver
WriteByte(0, ADDR_DUART_ACR,  0x00); // choose set 1 for baud rates
WriteByte(0, ADDR_DUART_CRA,  0x05); // switch receiver and transmitter
on
WriteByte(0, ADDR_DUART_IMR,  0x03);   // Transmit+Receive Interrupt
DUART A enable


Handler:
void DUART_TX_READY_INT() interrupt 0x19
{
  char status;
  status = ReadByte(0,ADDR_DUART_ISR);

  // Kommt der Interrupt vom Empfang?
  if (status & 0x02)
  {
    UART_A_RX_BYTE;
    LEDERR ^= 1;
  }

  if (status & 0x01)
  {

    if (bytecounter < TlgLen )
    {
      UART_A_TX_BYTE(TransmitBuf[bytecounter++]);
    }
    else
    {
      TX_BUSY = 0;
    }
  }
}


Wer weiss Rat?

Grüße
Oliver

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.