Gast
#582621
Hallo, ich möchte mir folgende Konfiguration aufbauen: Am TWI eines Atmega128 hängen I2C-Display und I2C-Tastatur. Tastatur und Display sind Slaves, der Atmega der Master. Da die Tastatur ein Slave ist, wird sie also vom Master gepollt auf Änderungen an den Ports. Wenn die Tastatur gedrückt wird, soll dies zur Folge haben, dass ein Befehl über den USART verschickt wird. Gleichzeitig sollen Befehle über USART empfangen werden können, die dann eine Änderung des Displays bewirken. Der TWI bietet ja nun die Möglichkeit, "interrupt-driven" oder mit Polling zu arbeiten. Bei Interrupt-Steuerung wird, wenn das TWI-Interrupt-Flag gesetzt ist (passiert immer dann, wenn das TWI-Interface Daten erhalten oder grade rausgeschickt hat), ein Interrupt im Controller ausgelöst. Beim Polling wird eben kein Interrupt ausgelöst, sondern das Interrupt-Flag wird dauernd abgefragt. Die USART-Geschichte möchte ich auf alle Fälle mit Interrupts realisieren, indem beim Empfangen von einem Zeichen in die ISR gesprungen wird, und falls das Ende-Zeichen angekommen ist, ein Flag "Befehl angekommen" gesetzt wird, dass wiederum vom Hauptprogramm gepollt wird. Jetzt meine Fragen: Ist es sinnvoll, sowohl für I2C als auch für USART den Interrupt-Modus zu benutzen? Oder könnte es da Probleme geben und ich fahre besser, wenn ich I2C nur polle? Was passiert, wenn zwei Interrupts genau gleichzeitig ankämen? Und was passiert, wenn der USART ein Zeichen empfängt, während er am Senden ist?