Wenn ich mspgcc Vers 060502 zur Programmierung eines MSP430F1611 einsetze, funktioniert der I2C Bus nicht. Bei der Verwendung von IAR Kickstart gibt es keine Probleme. Hat jemand ähnliche Erfahrungen gemacht oder müssen hier noch irgendwelche Dateien eingebunden werden? Wolfgang
Na was genau funktioniert denn nicht? Haste du auch die signal.h usw mit eingebunden?
Am MSP430F1611 ist über I2C ein DS2482-100 angeschlossen, der den Temperaturfühler DS18B20 über 1wire abfragt. Die Temperatur wird auf einer Flüssigkristallanzeige angezeigt und soll auf einer Smart Media Karte abgespeichert werden. Mit IAR funktionieren das Auslesen der Temperatur und die Anzeige auf der Flüssigkristallanzeige. Für das Abspeichern auf SM karte will ich auf mspgcc umstellen, da die Programmgröße bei IAR auf 4kB begrenzt ist. Bei der Verwendung von mspgcc wird immer der gleiche (und falsche) Messwert ermittelt, obwohl sich die Temperatur ändert. Welche Dateien müssen für I2C eingebunden werden? Für interrupt TimerA0 habe ich bereits signal.h verwendet. Wolfgang
Also mit I2C hab ich speziell noch nix gemacht am MSP430, aber mitnahezu jedem anderen Modul. Und einen Compiler-Fehler hate ich noch nie, deshalb vermute ich, dass was am Code nicht stimmt. Eigentlich sind ja nur die ISR-Aufrufe bissl anders, die Register sind ja alle in den Header-Files ordentlich deklariert und per define auch kompatibel zu den IAR Registernamen.
Gibt es jemand, bei dem I2C unter Verwendung des vorhandenen Moduls mit mspgcc funktioniert? Bitte melden. Wolfgang
Soviel Zeit muss sein. Im Anhang ein Programmschnipsel, welcher mit dem IAR Compiler funktioniert. Ich hoffe, dass ich keine Teile vergessen habe. Schon mal vielen Dank für Deine Bemühungen. Wolfgang
Das kompiliert doch der GCC garantiert nich ohne zumindest Warnungen?!? Die Interrupts werden da anders deklariert. Ebenso fehlt die für Interrupts zuständige signal.h includiert.
Offensichtlich ein Missverständnis. Für mspgcc wurden von mir, wie in Zeile 1..4 geschrieben, nur die Teile von Zeile 6..46 verwendet. Alles was nach Zeile 46 kommt, ist nur das komplette Beispiel von TI zur Anbindung eines TMP175 an einen MSP430. Wolfgang
Hallo Steven, beschäftigst Du dich noch mit dem Problem oder liegt es auf Eis? MfG Wolfgang hat vielleicht jemand einen Tipp?
>Bei mir ist dann eben der Unterschied, dass ich ein EEPROM abfrage, >während du nur Daten empfängst. Nein, durch die Zwischenschaltung des DS2482 besteht ein Datenverkehr in beiden Richtungen. >Wenn du ein Oszi oder einen Logicanalyzer hast oder an sowas rankommst, >kannst du direkt die beiden Programme vergleichen. Das werde ich nun >auch testen. Steck nicht zuviel Arbeit rein. Mit einem Oszi habe ich die Schaltung und das Programm, welches mit IAR compiliert wurde, zur Inbetriebnahme getestet. Hier lief ja I2C schon. Es geht also „nur“ darum, ob oder unter welchen Bedingungen der I2C Bus mit mspgcc funktioniert. >Und teste es mal bitte mit Optimierung und ohne. Werd ich mal probieren. Vielleicht optimiert der mspgcc irgendetwas weg. Was muss ich dazu eingeben? Wolfgang
das war ein blinder Alarm. Tut mir leid. Mit einem TMP275, welcher über I2C direkt an den MSP430 angebunden ist, läuft I2C mit mspgcc . Die Ursache für die Fehlfunktion mit DS2482 muss ich noch suchen Wolfgang
Ursache gefunden. Es lag offensichtlich an einer Warteschleife, z.B. void pause (void) { unsigned int i; for (i=60000; i>0; i++) } die zwischen IAR und mspggc bei gleicher Schleifenlänge in unterschiedlicher Zeit ausfällt. Die Warteschleife ist für die Funktion des Temperaturfühlers notwendig. Jetzt läuft mein Programm auch mit mspgcc. Wolfgang
> unsigned int i; > for (i=60000; i>0; i++) Solange raufzählen bis i==0??? Macht sich ganz besonders gut auf einer 32bit Kiste ;-) Könnte sein, dass du den GCC damit so verwirrt hast, dass er die Schleife drin liess. Normalerweise optimiert er die komplett weg, weil sinnlos.
Klar geht es. Ich bezweifle nur dass das Absicht war. Und bei grösserem "int" dauert's etwas lang.
>Solange raufzählen bis i==0??? Macht sich ganz besonders gut auf einer >32bit Kiste ;-) >>Ich bezweifle nur dass das Absicht war. ist ein Dreckfehler, sollte i-- sein >Jetzt wäre es schön zu wissen, wer der Übeltäter von beiden ist. m. E. nicht nötig, jeder Compiler macht offensichtlich sein eigenes Ding
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.