Gast
#3626987
Hi, ich möchte via SPI große Arrays übertragen, so dass ich überlege inwiefern eine interrupt-gesteuerte Datenübertragung Sinn macht. Der DMA Support wird für das SPI nicht unterstützt. Als Controller verwende ich den LPC1758. In meinem Interrupt lese ich das Statusregister, cleare das Interruptregister und schreibe das nächste Byte in das SPDR Register, welches anschließend übertragen werden soll. Der Datentransfer funktioniert.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
Aber macht das überhaupt wirklich Sinn, die Datenübertragung interrupt-basierend zu gestalten, weil der zeitliche Abstand zwischen dem Beenden des SPI-Interrupts und einem neuen SPI-Interrupt ist so kurz, dass mein Timer Interrupt beispielsweise in dieser Zeit gar nicht ausgelöst wird. Erst wenn der SPI Datentransfer beendet ist, funktioniert der Timer (Intervall: 1ms) wieder ordnungsgemäß. Des Weiteren kann ich während der SPI Übertragungszeit auch keine andere Datenübertragung die interrupt-basierend erfolgt wie z.B. I2C anstoßen, weil sich die Interrupts von SPI und I2C sonst in die Querre kommen. Ich erhalte in einem solchen Fall beispielsweise zwar die richtige Anzahl an ausstehenden I2C Receive Interrupts, die allerdings verzögert statt finden. Die erhaltenen I2C Daten werden allerdings überschrieben, weil das I2C-Datenregister nur ein Byte aufnehmen kann. Die restlichen erhaltenen Bytes sind demnach 0xFF.... Ab welchem Zeitpunkt denkt ihr darüber nach, einen Datenübertragung interrupt-basierend zu machen? Und wie stellt ihr sicher, dass andere Schnittstellen in dieser Zeit nicht mittels Interrupts angesprochen werden? Gruß Lars