Hallo,
ich sitze gerade an folgedem Problem.
Ich habe ein AVR32 32UC3A0512-UES auf einem EVK1100 Board, AVR32 Studio
2.1.1 und das zum Controller gehörende Software-Framework 1.2.2ES.
Ich möchte den Spare SPI (SPI0) Anschluss auf dem Board verwenden. Die
initialisierung klappt auch (alle Rückgaben SPI_OK), aber sobald ich die
Funktion spi_write aufrufe, erhalte ich als Rückgabewert
SPI_ERROR_TIMEOUT.
An den entsprechenden Pins am Board ändert sich der Takt von 0 auf 1,
dann tut sich nichts mehr.
Die Ansteuerung des Displays auf dem Board ebenfalls über SPI (SPI1)
klappt gleichzeitig problemlos.
Hat jemand eine Idee woran es liegen könnte?
Zuerst lege dich die GPIO Map folgdermaßen fest:
Die Vergleiche in den if-Bedingungen sind jeweils wahr.
Die "selbe" Initialisierung wird parallel auch mit dem SPI für das
Display ausgeführt. Natürlich mit angepasster IO-Map usw... Dieses
funktioniert fehlerfrei.
Nachtrag: Das Problem das hier
(Beitrag "AVR32 SPI Problem (gelöst)") beschrieben wird ist
ähnlich, allerding habe ich schon die vorgeschlagene Lösung umgesetzt.
Zudem habe ich den betreffenden Code mit Main angefügt.
So, ich muss das Thema noch mal hoch holen.
Da bisher niemand geantwortet hat, erweitere ich die Fragestellung.
Ich will nicht mehr wissen, wo der Fehler liegt, sondern nur ob es
überhaupt schon mal jemand geschafft hat den SPARE SPI auf dem EVK1100
zu nutzen.
Inzwischen habe ich nämlich mehr Hinweise darauf gefunden, dass es nicht
geht, als das es geht.
Für eine (positive?) Antwort wäre ich dankbar.
Gruß nezaya
Nachtrag: Der obige Code funktioniert. Falls also jemand das selbe
Problem hat oder SPI nutzen will kann er obigen Code als Beispiel
verwenden.
Das Problem war, das ich vor dem Schreiben auf den SPI nicht wie oben
den Chip-Select mit spi_selectChip(&AVR32_SPI0, 0) sondern versehentlich
mit spi_selectChip(&AVR32_SPI0, 1) ausgewählt hatte. Mit
spi_selectChip(&AVR32_SPI0, 0) funktioniert der obige Code. Mit
spi_selectChip(&AVR32_SPI0, 1) gibt es beim Schreiben den beschriebenen
Fehler. Damit spi_selectChip(&AVR32_SPI0, 1) funktioniert, müssten wohl
die Einstellungen des SPI geändert werden. Fall ich dass mal angepasst
habe poste ich es auch hier.
Hallo Holger und Effray
Ich habe hier auch versucht über den SPI0 etwas zu senden.
Erstmal Danke, dass Ihr euch die Mühe gemacht habt Beispielcode
hochzuladen, das ist der verständlichste den ich bisher gefunden habe.
Dennoch habe ich ein Verständnisproblem:
Holger hat geschrieben
Zuerst lege dich die GPIO Map folgendermaßen fest:
//GPIO MAP for SPARE SPI
static const gpio_map_t SPI0_GPIO_MAP = { { AVR32_SPI0_SCK_0_PIN,
AVR32_SPI0_SCK_0_FUNCTION }, //SPI Clock
{ AVR32_SPI0_MISO_0_PIN, AVR32_SPI0_MISO_0_FUNCTION }, //MISO
{ AVR32_SPI0_MOSI_0_PIN, AVR32_SPI0_MOSI_0_FUNCTION }, //MOSI
{ AVR32_SPI0_NPCS_0_PIN, AVR32_SPI0_NPCS_0_FUNCTION }, //Chip
Select NPCS
{ AVR32_SPI0_NPCS_1_PIN, AVR32_SPI0_NPCS_1_FUNCTION } //Chip
Select 2
};
Ich habe das so übernommen, und bekomme bei allen Einträgen Fehler (
AVR32_SPI0_SCK_0_PIN undeclared (first use in this function) etc)
aber komme jezt einfach nicht drauf wie und wo das definiert wird.
Kann man das einfach so festlegen? ist AVR32_SPI0_SCK_0_PIN einfach eine
Variable, die ich frei wählen kann oder sind die in einem file
vordefiniert?
Im Beispiel dip204_example, das mitgeliefert wurde, wird das so ähnlich
definiert und das funktioniert einwandfrei.
Ich wäre froh um jede Hilfe.
Warscheinlich fehlt etwas Grundlegendes, irgendwie die falschen files
included oder so, mein code im Anhang.
Danke!
Gruss André
bin auf etwas interessantes gestossen: im evk1100.h werden all diese
Connections deklariert mit AVR32_SPI0_MISO_0_0_PI etc (habe das im
Beitrag von Effray gar nicht gesehen). wenn ich das in meinem Code
ändere habe ich dafür "multiple definition of ''" von allen gpio und spi
funktionen.
Hat sich erledigt, hatte irgendwie falsche oder doppelte Driver
eingebunden. Habe noch etwas Mühe mit dem ganzen Framework und
Strukturen.
Senden hat aber funktioniert, als nächstes ist lesen dran...