TWI mit Interrupts

Gast #172589
Lesenswert?
• ▲
▼
Hi,

seit ein paar Wochen beschaeftige ich mich mit dem Atmel ATMega8
Controller. Ich moechte zwei dieser Controller ueber TWI/I2C mit
einander sprechen lassen.

Dazu verwende ich die I2C Routinen aus der AVRLib. Nachdem ich
keinerlei Kommunikation zustande gebracht hatte, habe ich testweise
einen 24C64 (kleiner 64kB EEPROM) ueber I2C angebunden. Dabei habe ich
festgestellt, dass die interrupt-losen Funktionen (i2cMasterSendNI()
bzw. i2cMasterReceive()) einwandfrei arbeiten, nur die
Interrupt-Versionen funktionieren nicht.

Ich habe testweise einen rprintf Befehl in den Interrupt-Handler (die
SIGNAL() Routine in i2c.c) eingebaut und dabei festgestellt, dass nie
ein Interrupt ausgeloest wird.

i2cInit() wird aber zu anfangs aufgerufen und darin wird sowohl der
TWI-Interrupt enabled (sbi(TWCR, TWIE);) als auch global Interrupts
eingeschaltet (sei();).

Hat jemand einen Tip, warum keine Interrupts ausgeloest werden ?

Vielen Dank,

Gruss Martin
Gast #172591
Lesenswert?
• ▲
▼
Hi Hagen,

nein, hilft leider nichts. i2c.c included es auch schon:

#include <avr/signal.h>
#include <avr/interrupt.h>

Daran lags leider nicht. Ich hab zwischenzeitlich nochmal ueberprueft,
ob ich ueberhaupt Interrupts ausloesen kann - das funktioniert
prinzipiell, denn ein Handler fuer den Overflow Interrupt vom Timer
wird aufgerufen. Es scheint also vermutlich ein TWI-spezifisches
Problem zu sein.

Tappe weiterhin im Dunkeln...

Weitere Ideen ?
#172592
Lesenswert?
• ▲
▼
Ohne C-Quelltext (Dateianhang) keine Hilfe möglich.


Zu oft wurde behauptet, man hätte irgendeinen XY-Code völlig
unverändert genommen und später stellt sich das dann als Lüge heraus.


Auch ist es nicht nett, wenn der Helfende eine XY-Lib erst suchen muß,
ganz abgesehen davon, daß es bestimmt mehrere Versionen der Lib gibt.


Peter
Gast #172593
Lesenswert?
• ▲
▼
Hi Peter,

"Ohne C-Quelltext (Dateianhang) keine Hilfe möglich.

Zu oft wurde behauptet, man hätte irgendeinen XY-Code völlig
unverändert genommen und später stellt sich das dann als Lüge heraus.

Auch ist es nicht nett, wenn der Helfende eine XY-Lib erst suchen muß,
ganz abgesehen davon, daß es bestimmt mehrere Versionen der Lib
gibt."

eine Library-Versionsangabe habe ich leider bei der AVRlib nicht
gefunden. Es gibt aber eine Versionsangabe in die i2c.* Files:
Verion 0.9.

Ich habe mal die relvanten Files und das Makefile zusammengepackt und
angehaengt. In den Files der AVRlib habe ich folgende Dinge
veraendert:

1) Die Zeile "#include "uart2.h"" ein einen #ifdef Block gepackt:

        #ifdef I2C_DEBUG
        #include "uart2.h"
        #endif

2) Im Interrupt-Handler eine Debug-Zeile eingefuegt:

    // Debug-Code: Wird der Interrupt-Handler ueberhaupt
    // ausgefuehrt ?
    rprintf("Interrupt-Handler called\r\n");

Die Details bzgl. der I2C-Calls stehen in der main().

Danke schon mal !

Gruss Martin
Angehängte Dateien:

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