Hallo, im Anhang findet ihr die modifizierte Library von Mike Schaub (http://www.mikrocontroller.net/forum/read-4-251127.html). Es wurden noch die fehlenden Read Funktionalitäten hinzugefügt. Grüße, Patrick
Hallo! Zum angefügten Codeauszug hätte ich eine Frage: warum muß das Flag SI auch im Pollingbetrieb vor oder zusammen mit START gesetzt gesetzt werden? Im Datenblatt ist hierzu nichts angegeben. //Send "START" condition int i2c_start(int addr){ I2C_I2CONCLR = 0x14; // clear STO, AA I2C_I2CONSET = 0x28; // set STA, SI wait_for_SI(); I2C_I2CONCLR = 0x20; // clear STA if (I2C_I2STAT > 0x10) return(-1); // bus is busy I2C_I2DAT = addr; // set address wait_for_SI(); return (I2C_I2STAT != 0x40 && I2C_I2STAT != 0x18); // no acknowledge
Hallo Frank, ich bastel schon länger nicht mehr mit den ARMs (der Code war so ziemlich das letzte was ich veröffentlichen konnte) und weiß daher nichts genaues. Ich glaube aber, dass ohne das setzen von SI die Start Condition nicht gesendet wurde oder etwas ähnliches. Was passiert denn wenn du das SI Flag nicht setzt? Grüße, Patrick
Vielen Dank für die Antwort! Setze ich SI zusammen oder vor START, geht der Bus korrekt auf Start. pegel sind dann LOW und die Daten werden korrekt gesendet. Wenn ich SI nicht vor oder zusammen mit START setze, wird die Startbedingung nicht gesendet. Das Datenwort erscheint dann völlig unkenntlich auf dem Bus. Aus der Bitfolge 10110000 wird dann 00000010. Laut Datenblatt jedoch: STA, STO, and SI must be reset. The master transmitter mode may now be entered by setting the STA bit. The I2C logic will now test the I2C-bus and generate a start condition as soon as the bus becomes free. When a START condition is transmitted, the serial interrupt flag (SI) is set, and the status code in the status register (I2STAT) will be 0x08.
Hallo Frank, ich glaube ich bin in der Hinsicht auch nicht schlauer geworden als du. Steht dazu vielleicht etwas im Errata von deinem LPC? Grüße, Patrick
Hey leute, falls ihr noch enie Ahnung habt....folgende Frage: Für was brauche ich das Timeout wait_for_SI()? Warum muss ich hier überhaupt warten?Das SI bit müsste doch gelöscht werden und danach muss ich doch gleich mir der Übertragung fortfahren können....wenn jemand dazu was weiß, bitte um Antwort
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.