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);
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.