Forum: Mikrocontroller und Digitale Elektronik Interrupthandling (SPI) beim AT91SAM7


von Bent M. (rentabent)


Lesenswert?

Moin,

ich hab da ein Problem, komme da nicht weiter...

Ich möchte einen Umsetzer von SPI auf UASRT bauen, also Daten kommen auf 
dem SPI rein und werden dann an den USART weitergereicht.

Mein Problem:

Ich hab keine Ahnung, wie ich die Interrupts vom SPI behandeln soll, 
normalerweise muß man ja einen IRQ nach erhalt "abnicken", also 
maskieren. Nur wie geht das hier? Sobald ich einen Interrupt (RDRF, 
RXBUFF, etc) über das SPI_IER aktiviere erhalte ich sofort laufend 
Interrupts, die ich zwar auch abfangen kann aber nicht wieder maskieren 
kann... Dadurch verhungert mein USART, hier dringt kaum ein Interrupt 
durch, er ist quasi tot. Ich kann die Interrupts nur ganz deaktivieren, 
das ist aber nicht wirklich Sinn der Sache...

BTW: Wenn ich nur den NSS_IRQ nutze, dann ist das System nach reset auch 
erstmal still bis ich vom SPI-Master angesprochen werde. Dann kriege ich 
laufend IRQs, normal, aber wenn ich fertig bin laufen diese weiter, 
selbst wenn Master und Slave physikalisch getrennt werden... Ich denke 
also ich muß den IRQ als "in Bearbeitung" abnicken (so hab ich das mal 
gelernt), kann ich aber nicht, gibt kein Register hierfür (Interruptmask 
Register ist ja read-only, kurioserweise ist dies immer 0, egal was ich 
aktiviert habe..)

Any ideas?, bzw. was mache ich falsch???

von gerhard (Gast)


Lesenswert?

hallo,
hast du das spi interface auch richtig init.?
kannst du deine code mal posten?


mit der folgenden Zeile wird der Interrupt durch Auslesen des 
Status-Register bestätigt:
1
dwstatus = AT91C_BASE_SPI->SPI_SR;

gruss
gerhard

von Bent M. (rentabent)


Lesenswert?

Perfekt, vielen Dank, das war einfach, ist leider nur nirgendwo 
dokumentiert... aber funktioniert!

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.