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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.