Servus,
ich habe ein Problem mit meinem SAM4S mit der SPI-Schnittstelle in
Verbindung mit dem PDC.
Vorab ich nutze einen SAM4SD32C mit dem Atmel Studio 6.1 und dem ASF
3.11.
Ich nutze die SPI-Schnittstelle als Slave und habe deren Funktion auch
schon getestet. Das funktioniert soweit.
Nun möchte ich das ganze um den PDC erweitern.
Interrupts von der SPI-Schnittstelle habe ich derzeit disabled, da ich
ja sonst nicht die Vorteile vom DMA voll ausschöpfe.
Ich habe meine Pakete für den PDC wie folgt angelegt:
1 | pdc_packet_t pdc_tx_packet;
|
2 | Pdc *g_p_spi_pdc;
|
Die Verlinkung zu den Daten und zum SPI-Modul habe ich folgendermaßen
durchgeführt:
1 | uint8_t spi_test =0xda;
|
2 | pdc_tx_packet.ul_addr = &spi_test;
|
3 | pdc_tx_packet.ul_size = sizeof(spi_test);
|
4 | g_p_spi_pdc = spi_get_pdc_base(SPI);
|
Wobei spi_test eine globale Variable in main.c ist.
Nun Frage ich zyklisch in meiner main-Datei ab, ob schon das ENDTX Flag
der SPI-Schnittstelle gesetzt ist. Dieses wird laut Datenblatt nach der
Übertragung durch den DMA gesetzt.
Wenn dies der Fall ist, lade ich die Daten erneut in den DMA und starte
die Übertragung.
1 | while(1)
|
2 | {
|
3 | if((SPI->SPI_SR)&SPI_SR_ENDTX)
|
4 | {
|
5 | pdc_tx_init(g_p_spi_pdc,&pdc_tx_packet,NULL);
|
6 | pdc_enable_transfer(g_p_spi_pdc,PERIPH_PTCR_RXTEN | PERIPH_PTCR_TXTEN);
|
7 | }
|
8 | }
|
Die If-Bedingung wird auch ausgeführt und es werden auch Daten über die
SPI-Schnittstelle gesendet.
Jedoch empfange ich nicht die korrekten Daten (0xda).
Hat jemand hier vielleicht schonmal mit dem PDC in Verbindung mit der
SPI-Schnittstelle gearbeitet?
Vielen Dank für die Hilfe !
Gruß