I2C Bus Programmierung ARM9

Gast #946961
Lesenswert?
• ▲
▼
Hallo,

Ich bin neu hier und habe auch schon nach der Problemlösung hier im 
Forum gesucht aber leider nichts gefunden.
Das Problem ist folgendes, ich benutze ein STR912F Board der Firma Hitex 
auf dem ein ARM9 Prozessor läuft, dieser hat zwei I2C Busse.
Die µP Beinchen sind alle auf Pinleisten rausgeführt und ich habe die 
zwei Busse miteinander verbunden.

Nun möchte ich eigentlich nicht viel mehr machen als Daten von dem einen 
Bus zum anderen schicken (dient nur als Test, in der Zukunft soll er 
einen DAC ansteuern der einen I2C Bus als Eingang besitzt).
Dies funktioniert aber überhaupt nicht. Also Programmiersprache fungiert 
C und ich habe bisher folgendes:

I2C_DeInit(I2C0);
I2C_DeInit(I2C1);

I2C_Cmd(I2C0, ENABLE);
I2C_Cmd(I2C1, ENABLE);

I2C_InitStructure.I2C_Ack = I2C_Ack_Disable;
I2C_InitStructure.I2C_OwnAddress = 0x7F;
I2C_InitStructure.I2C_GeneralCall = I2C_GeneralCall_Disable;
I2C_InitStructure.I2C_CLKSpeed = 100000;

I2C_Init(I2C0, &I2C_InitStructure);

I2C_InitStructure.I2C_OwnAddress = 0x00;

I2C_Init(I2C1, &I2C_InitStructure);

I2C_GenerateStart(I2C0, ENABLE);
I2C_GenerateStart(I2C1, ENABLE);

I2C_Send7bitAddress(I2C0, 0x00, I2C_MODE_TRANSMITTER);

I2C_SendData(I2C0, 0xFF);
test = I2C_ReceiveData(I2C0);
Delay(0x7FFFFF);
test = I2C_ReceiveData(I2C0);
Delay(0x7FFFFF);
test = I2C_ReceiveData(I2C1);

Wäre super wenn mal jemand von euch drüber schauen könnte, da ich 
langsam am verzweifeln bin...
Vielen Dank schonmal im Voraus!

Gruß Alex
Gast #952379
Lesenswert?
• ▲
▼
Hallo Alex,

auf dem Evalboard von Hitex ist auch Temperatursensor LM75 zum Test der 
I2C Funktion.

Hier ein Beispiel zum auslesen der Temperatur (12bit):

void I2C_Temp_Read_2Byte (u8 ADDRESS)
{
  // wait for conversion
     u32 k = 0x00FFFFFF;
     while (k-->0);

  //I2C Interface ready?
     I2C_CheckEvent(I2C0, I2C_FLAG_BUSY );

  //Start bit
     I2C_GenerateStart(I2C0, ENABLE);

  //Next check EV5:
    while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_MODE_SELECT) );

  //Send address
    I2C_Send7bitAddress(I2C0,ADDRESS,I2C_MODE_TRANSMITTER);

  //Next check EV6:
    while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_MODE_SELECTED) );

  //Write I2Cn_CR register TWICE with PE=1
    I2C_Cmd (I2C0, ENABLE);

  //Next check EV8:
    while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_BYTE_TRANSMITTED));

  //Send data Pointer Byte
    I2C_SendData(I2C0,0x00);

  //Next check EV8:
    while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_BYTE_TRANSMITTED));

  //I2C Interface ready?
    I2C_CheckEvent(I2C0, I2C_FLAG_BUSY);

  // Start bit
    I2C_GenerateStart(I2C0, ENABLE);

  //Next check EV5:
    while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_MODE_SELECT) );

  //Send address
    I2C_Send7bitAddress(I2C0, ADDRESS, I2C_MODE_RECEIVER);

  //Next check EV6:
    while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_MODE_SELECTED) );

  //Write I2Cn_CR register TWICE with PE=1
    I2C_Cmd (I2C0, ENABLE);

  //Next check EV7
    while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_BYTE_RECEIVED));

  //Read MSB Byte
    TEMP_HIGH_WERT = I2C_ReceiveData(I2C0);

  //Next check EV7
    while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_BYTE_RECEIVED));

  //Stop bit
    I2C_GenerateSTOP (I2C0, ENABLE);

  //Read LSB Byte
    TEMP_LOW_WERT = I2C_ReceiveData(I2C0);


Wie sind denn Deine GPIO konfiguriert?
SCU_APBPeriphClockConfig(__I2Cx ,ENABLE)?

Schau mal noch im Support Forum bei STM vorbei:
http://www.st.com/mcu/modules.php?name=Splatt_Forums

Gruss Heiko

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.