ATmega + Pollingbetrieb mit 16C554

Gast #440746
Lesenswert?

Hallo,

ich versuche einen TL16C554 im Pollingmodus zu betreiben.
Es sollen nur Daten gelesen werden 8bit,noparity,1stopbit.
Leider werden nur einige Zeichen eingelsen und dann merkwürdigerweise 
das line control register gelöscht.
Kennt sich jemand aus?

Hyperterminalauszug:

Vor dem Reset:

 Receiver buffer: 00010101 IER: 00000000 IIR: 00000001 LCR: 00000000 
MCR: 00000000 LSR: 11100001 MSR: 11110000 SP: 00000000
A0/A1/A2:111 IOW/IOR:10 RESET/RXRDY/TXRDY:000 CSA/CSB/CSC/CSD:0111

Nach dem Reset und der Initialisierung:

LSB: 00011000 MSB: 00000000
Receiver buffer: 00000000 IER: 00000000 IIR: 11000001 LCR: 00000011 MCR: 
00000000 LSR: 01100011 MSR: 11110000 SP: 00000000
A0/A1/A2:111 IOW/IOR:10 RESET/RXRDY/TXRDY:000 CSA/CSB/CSC/CSD:0111

Ausgabe im günstigsten Fall mit Abbruch, da line control register 
merkwürdigerweise gelöscht:

GGPRMC,153335,V$______

Receiver buffer: 00001001 IER: 00000000 IIR: 00000001 LCR: 00000000 MCR: 
00000000 LSR: 11100001 MSR: 11110000 SP: 00000000
A0/A1/A2:111 IOW/IOR:10 RESET/RXRDY/TXRDY:000 CSA/CSB/CSC/CSD:0111

Codeauszug:

DDRA  = 0x00;                  // 0000 0000 -> D7D6D5D4D3D2D1D0 eingänge
PORTA = 0xff;                  // 1111 1111 -> D7D6D5D4D3D2D1D0 mit 
pullups
PORTC &= ~( 1 << PC4 );        // xxx0 xxxx -> IOR = 0  ->> lesen vom 
tl16c554

i=0;
j=0;
while(1) {
  PORTB = 0x05;     //line status register

  if (PINA & 1) {      // prüfe auf LSR bit0 (dataready)

  PORTB = 0x00;     // 0000 0000 A2A1A0=000 Receiver Buffer
  puffer2[i]=PINA;
  i=i+1;
  }
j=j+1;
if (i>80) break;
if (j>150) break;
}
uart_puts(puffer2);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren