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 | }
|