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

OP #4317723
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
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
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.