PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LPCxx SSP/SPI TX-Interrupt



Siro
17.06.2015, 08:19
Hallo,
ich beschäftige mich seit längerem mit den Controllern der LPC Serie.
Für das letzte Projekt benutzte ich den LPC1768

Leider fehlt in dem SSP/SPI Modul ein Interrupt-Bit, welches aktiv wird wenn "ALLE" Bits fertig "ausgeschoben" sind.

Nun hab ich ein neues Projekt mit dem LPC1347 und muss zum Bedauern feststellen, auch hier gibt es
keinen Interrupt wenn alle Bits ausgeschoben sind.

Ich habe mehrere 595 Schieberegister an den SPI Port angeschlossen.
und zudem 2 serielle Display vom Typ LTM8522

Mein Problem:
Ich muss warten bis ALLE Bits komplett ausgeschoben sind um dann meine Chip Select Leitung zu bedienen. Das Latch Enable Signal für den 595 bzw. mein Latch Impuls für die Displays.....

Als "Notbehelf" hab ich über einen zusätzlichen Timer benutzt. Da ich weis wieviele Bytes ich aussende, stelle ich den Timer auf die Zeit, die die Hardware benötigt und bekomme dann meinen Interrupt.
Das nenne ich mal Resourcenverschwendung und umständlich hoch 3, wegen einem fehlenden Bit.

Ich benötige also einen Interrupt wenn auch das "LETZTE" Bit vom SPI Interface den Controller Pin verlassen hat.

Vielleicht habe ich auch etwas im Datenblatt übersehen....
Wenn ich das richtig verstehe kann ich NUR einen Interrupt auslösen, wenn der Sende FIFO halb leer ist.
beim LPC1347

Register: IMSC Bit: TXIM

Für Ideen bzw. Info wäre ich dankbar.

Siro

Klebwax
17.06.2015, 10:01
Leider fehlt in dem SSP/SPI Modul ein Interrupt-Bit, welches aktiv wird wenn "ALLE" Bits fertig "ausgeschoben" sind.

Möglicherweise suchst du nach dem falschen Bit. SPI empfängt ja synchron zum Senden, selbst wenn nichts angeschlossen ist. Gibt es einen "empfangen" Interrupt, der ja immer dann kommen würde, wenn ein Wort fertig gesendet ist. Oder es gibt soetwas wie eine "underrun" Situation, weil der Sender leer ist?

MfG Klebwax

Siro
17.06.2015, 14:42
Das ist ein sehr guter Hinweis,
ich bin so auf das Senden fixiert, weil ich das Empfangen ja nicht brauche, das ich daran garnicht gedacht habe.
Hab zwar noch nicht das Richtige Bit im Datenblatt gefunden, aber hier gibts noch einiges zu testen.
Es gibt nämlich ein TimeOutBit, wenn ich das Empfangene nicht innerhalb einer bestimmten Zeit lese.
Ich danke Dir.

durchgebrannt
18.06.2015, 16:55
The SPI Status Register (S0SPSR) contains read-only bits that are used to monitor the status of the SPI interface, including normal functions, and exception conditions. The primary purpose of this register is to detect completion of a data transfer. This is indicated by the SPI Interrupt Flag (SPIF) in the S0SPINT register. The remaining bits in the register are exception condition indicators. These exceptions will be described later in this section.
Ich würde mal sagen, dass das die Lösung deines Problems ist.
Quelle:http://www.nxp.com/documents/user_manual/UM10360.pdf
Seite 413.
Gruß Jannis

Siro
20.06.2015, 23:34
Herzlichen Dank Jannis,
sollte ich das übersehen haben. (schäm)
Ich denke auch, das es zumindest für den LPC17xx die Lösung sein müste.

Beim LPC1347 schau ich dann auch gleich nochmal.

Vielen Dank
Siro