Forum: Mikrocontroller und Digitale Elektronik ATtiny817, SPI ISR löscht IF nicht


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Tycho B. (asellus)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ATtiny817 xplained mini vor mir und implementiere gerade eine 
ISR für SPI. Ich initialisiere einen Transfer indem ich ein Byte an 
SPI0.DATA übergebe. Wenn er übertragen wurde, dann wird die ISR 
angesprungen. Der µC bleibt jedoch in der ISR-Endlosschleife, obwohl im 
Datenblatt steht für unbuffered mode: "IF is cleared by hardware when 
executing the corresponding interrupt vector."
Das passiert aber nicht.
Nur wenn ich mit SPI0.INTFLAGS=0x80; das Bit explizit in der ISR lösche, 
dann funktioniert es.
Kann jemand das Verhalten bestätigen?

Initialisierung:
1
void SPI_MasterInit(void)
2
{
3
  PORTMUX.CTRLB |= PORTMUX_SPI0_bm;
4
  // Set MOSI (PC2), SPI_SS (PC3) and SCK(PC0) output, MISO (PC1) input
5
  PORTC.DIRSET |= 1 << PIN2_bp    // set PC2 as output
6
  | 1 << PIN3_bp          // set PC3 as output
7
  | 1 << PIN0_bp;          // set PC0 as output
8
  PORTC.DIRCLR = PIN1_bm;      // set PC1 as input
9
  
10
  //SPI - select SPI as master
11
  SPI0.CTRLA |= SPI_MASTER_bm;
12
  //SPI - SPI Mode 3
13
  SPI0.CTRLB |= SPI_MODE_3_gc;
14
  //SPI - select the clock speed prescaler 16
15
  SPI0.CTRLA |= SPI_PRESC_DIV16_gc;
16
17
  SPI0.INTCTRL |= 1 << SPI_IE_bp;//enable SPI Interrupt
18
19
  SPI0.CTRLA |= SPI_ENABLE_bm;
20
}

von Christian B. (luckyfu)


Bewertung
0 lesenswert
nicht lesenswert
Ja, kann ich :)
Das passiert beim I²C ebenfalls.

von Tycho B. (asellus)


Bewertung
0 lesenswert
nicht lesenswert
Danke!
Ich habe schon halbes Internet zusammengesucht und nirgends etwas 
Ähnliches gefunden.

Grüsse
Tycho

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.