Hallo Leute, ich habe ein vorgefertigtes Source Code für die I2C Kommunikation verwendet, s.u. Nun weiss ich aber in dem Code nicht, wie die Reihenfolge beim senden oder empfangen der Daten aussieht. Wenn ich bspw. Daten nach einem Interrupt senden möchte, was passiert als erstes und was zuletzt?? oder halt umgekehrt? gelang ich dann erst in die ISR oder wird erst die Funktion aufgerufen?? Würde mich freuen, wenn mir da jemand weiterhelfen kann. MFG http://www.atmel.com/Images/doc2565.pdf http://www.atmel.com/Images/AVR311.zip
Wird etwa die funktion solange ausgeführt bis in der ISR die Daten komplett empfangen/gesendet wurden??
Hallo hello, bei den Beispielen, die auf der Atmel-Homepage zu finden sind, wird folgendermaßen vorgegangen: 1. Beim Senden Zuerst müssen im Hauptprogramm die Daten in einem Array zusammengestellt werden. Das Array (genaugenommen die Referenz auf das Array) wird mit dem Aufruf der Sende-Funktion an die TWI-Routinen übergeben. Hier werden die zu sendenden Daten in ein lokales Array umkopiert. Von nun an arbeitet die Sendefunktion interruptgesteuert, das Hauptprogramm kann seiner Lieblingsbeschäftigung nachgehen. 2. Beim Empfangen Beim Eingang eines Bytes wird es in einem lokalen Array (der ISR) gespeichert. Das Hauptprogramm prüft regelmäßig, ob Daten eingegangen sind. Wenn ja, dann übergibt es einen Zeiger auf ein Array an die TWI-Routine, die wiederum kopiert die empfangenen Daten in dieses Array. Nun kann das Hauptprogramm die empfangenen Daten auswerten, während die TWI-Routinen bereits wieder Daten entgegennehmen kann. Das bedeutet, dass in beiden Fällen das Hauptprogramm durch das Senden und Empfangen nicht unterbrochen wird (abgesehen von den Interrupts natürlich). mfg Michael S.
Danke Michael S. hatte ja schon die Hoffnung aufgegeben, dass mir noch jmd schreibt, cool, dann hab ichs ja im Nachhinein richtig verstanden :) VG
Hi Leute, ich habe noch eine Frage,kann man den Buffer der in dem Code verwendet wird als Ringbuffer bezeichnen??
hello schrieb: > Hi Leute, > ich habe noch eine Frage,kann man den Buffer der in dem Code verwendet > wird als Ringbuffer bezeichnen?? Du meinst im 'multi_slave' Beispielcode? Nö. Das ist kein Ringbuffer.
Ja ob multi-slave oder standard spielt eigentlich keine Rolle, weil bei beiden der Aufbau 'gleich' ist. Wie könnte man diesen Buffer bezeichnen?
hello schrieb: > Ja ob multi-slave oder standard spielt eigentlich keine Rolle, weil bei > beiden der Aufbau 'gleich' ist. Wie könnte man diesen Buffer bezeichnen? Soviel ich da sehen kann, ist das einfach nur ein Buffer, in den eine Message zwischengelagert wird, damit das Hauptprogramm weitermachen kann, während die ISR aus diesem Buffer die Ausgabe macht. Nix irgendwie spezielles. Einfach nur ein Sendebuffer. Ein Ringbuffer ist zwar auch 'nur ein Buffer', allerdings mit einer Organisationsform, so dass der komplette zur Verfügung stehende Bufferspeicher komplett ausgenutzt werden kann.
inwiefern macht es sinn, hier von einen Buffer zwei zu machen?? einmal zum senden und einmal zum empfangen??
hello schrieb: > inwiefern macht es sinn, hier von einen Buffer zwei zu machen?? einmal > zum senden und einmal zum empfangen?? Was wird das? Prüfungsvorbereitung ohne Ahnung von der Sache? Wie funktioniert TWI? Daraus ergibt sich die Antwort auf deine Frage.
NEIN!! ich sollte zwar einen zweiten Buffer hinzufügen, aber für mich macht das irgendwie keinen Sinn, daher die Frage. :-/
hmm, ich denke ich habe mich etwas falsch ausgedrückt. In dem Code wird sowohl zum senden als auch zum empfangen derselbe name für den buffer verwendet. also sind es eigentlich 2 buffer die an unterschiedlichen zeiten verwendet werden, daher ist es dann wahrscheinlich nicht von belang diese umzubenennen oder?? Versteht mich bitte nicht falsch, ich versuche den code einfach nur zu verstehen und brauche eure Hilfe, mehr nicht! Danke!
Hallo Michael, meinst du mit dem lokalen Array das TWDR, oder?
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.