MoinMoin, ich bin grad dabei meinen I2C Code auf Interrupts umzustellen, nach ein paar Tips in diesem Beitrag: Beitrag "I2C/TWI kommunikation. Slave antwortet nicht." Also nochmal ganz kurz, es geht um die Kommunikation per I2C/TWI zwischen einem ATMEGA2560 und einem LSM6DS0 3D-Gyro/Accelerometer. Der 2560 sitzt auf nem Arduinoboard, der Gyro auf einem Sensorshield (X_Nucleo_IKS01A1) von ST. Die Hardware steht also so weit. Auch hat die Kommunikation per Polling schon geklappt. Ich habe nun sei() gesetzt, TWIE gesetzt und auch noch OCIEA0. Der Timerinterrupt wird auch angesprungen, der TWI-interrupt aber nicht. Ich schreibe meine Daten in einen globalen Sendepuffer und setze TWINT TWSTA und TWEN. Aber er springt dann nicht in die Interruptroutine. Dafür kann ich schön sehen, das der Watchdog funktioniert und alle 100 Ticks den TWI reset. Auch schon mal was. Der Quelltext befindet sich im Anhang, für hilfreiche Kommentare wäre ich dankbar =) MfG Chaos
Sorry, hier der aktuelle Quelltext, in dem oberen fehlte noch die Watchdogabfrage während der Warteschleife in der TWI_Send. Ändert aber grundsätzlich nichts. P.S. Kann man das ganze nicht eleganter als mit globalen Variablen lösen? Kann man nicht irgendwie Pointer in die IRQ einschleusen? P.S.S. Das hat ja doch noch beim ersten mit dem Anhängen geklappt. Ich hab einen "Internal Error" gemeldet bekommen. Also falls ein OP Lust hat, könnte er bitte die Anhänge bis auf einmal einen mit "aktuell" im Namen löschen
Ich glaub, ich habs gefunden.... Ich setze das Register ja komplett und nicht mit |=... Dabei schalte ich den Interrupt natürlich aus....
Ne das wars nicht. Hier nochmal die veränderte Version. Er springt nicht in den TWI_IRQ... Auch wenn ich "per Hand" sowohl TWSTA und TWINT oder auch TWSTA oder TWINT lösche... ich komme nicht in den Interrupt.
Hat sich geklärt.
1 | ISR(TWI_vect) |
2 | {
|
3 | switch (TWI_Flags) |
4 | {
|
5 | case ( (1 << TWI_Send_Flag) ): |
hätte es heißen müssen statt
[c]
ISR(TWI_vect)
{
switch (TWI_Flags)
{
case (TWI_Send_Flag):
Die ISR wird doch angesprungen, aber scheinbar übergeht das Studio das,
wenn nix gemacht wird, was bei mir ja irgendwie der Fall war, da keiner
der Cases zutreffen konnte.
P.S. nen BreakPoint möchte er in der ISR haben, damit er sie anzeigt.
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.