I2C Lib für LPC2000 Controller (ARM)

Gast #429405
Lesenswert?
• ▲
▼
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
OP #429408
Lesenswert?
• ▲
▼
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
Gast #429423
Lesenswert?
• ▲
▼
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.
Gast #709740
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.