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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren