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


von Tycho B. (asellus)


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)


Lesenswert?

Ja, kann ich :)
Das passiert beim I²C ebenfalls.

von Tycho B. (asellus)


Lesenswert?

Danke!
Ich habe schon halbes Internet zusammengesucht und nirgends etwas 
Ähnliches gefunden.

Grüsse
Tycho

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
Noch kein Account? Hier anmelden.