I2C und Interrupt. Bzw er wird nicht ausgelöst, der Interrupt.

OP #4317723
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
OP #4317726
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
OP #4317753
Lesenswert?
• ▲
▼
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.

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