ATtiny817, SPI ISR löscht IF nicht

OP #5239551
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
}

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