Hallo, Frage vorweg: Ab wieviel bytes/Transfer lohnt sich eine PDC(bzw. DMA)-Übertragung? Ich arbeite mit dem AT91SAM7A3 und möchte hiermit 4 Sensoren sehr dynamisch über die SPI-Schnittstelle auslesen. Die eingelesenen Werte werden in einem Regleralgorithmus weiterverarbeitet. Der Sensor wird per Kommando (1 Byte) ausgelesen. Das zurückgesandte Datum beträgt 3 Byte pro Sensor. Der Controller verarbeitet den Regleralgorithmus ohne Auslesen der Sensoren mit 150 kHz. Lese ich die Sensoren aus, sinkt der Takt auf 10 kHz. Im Moment erfolgt das Lesen und Schreiben mit den SPI_TDR/SPI_RDR-Registern (also ohne PDC). Meine Hoffnung ist es, den Reglertakt durch Nutzung der PDC zu erhöhen. Frage: lohnt sich das? Ich würde es gerne ausprobieren, scheitere aber an der Umsetzung. Ich kann am Oszi nicht mal ein Clock-Signal sehen (ohne PDC geht's) Liegt's vielleicht an der falschen Initialisierung? Mein (gescheiterter) PDC-Code: int main(void) { char *receive; char *transmit; transmit = 5;//Testbytes receive = 3; // Enable SPI0 PMC peripheral clock AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_SPI0; // Initialize the io pins, (das sind miso, mosi, clk und npcs1) PIO_Configure(pins, PIO_LISTSIZE(pins)); //ENABLE SPI AT91C_BASE_SPI0->SPI_CR = AT91C_SPI_SPIEN ; AT91C_BASE_SPI0->SPI_MR = AT91C_SPI_MSTR|AT91C_SPI_PS_VARIABLE|0<<2|AT91C_SPI_LLB|SLAVE<<16|AT91C_ SPI_MODFDIS|(255<<24); AT91C_BASE_SPI0->SPI_CSR[3]= AT91C_SPI_NCPHA|AT91C_SPI_CSAAT|AT91C_SPI_BITS_8|(255<<8)|AT91C_SPI_DLYB S| AT91C_SPI_DLYBCT; while(1) { AT91C_BASE_SPI0->SPI_RPR = (unsigned int)receive; AT91C_BASE_SPI0->SPI_RCR = 1; AT91C_BASE_SPI0->SPI_TPR = (unsigned int)transmit; AT91C_BASE_SPI0->SPI_TCR = 1; AT91C_BASE_SPI0->SPI_PTCR = AT91C_PDC_TXTEN|AT91C_PDC_RXTEN; while (! (AT91C_BASE_SPI0->SPI_SR & AT91C_SPI_ENDRX)) ; } }
Lösung: 1. PDC funktioniert nicht mit AT91C_SPI_PS_VARIABLE im SPI_MR Register. 2. Habe keinen Geschwindigkeitsvorteil mit PDC ggü ohne PDC messen können. Bei der Messung wurden maximal 4 Bytes/Transfer übertragen. Ergo: Bleibe bei der ursprünglichen Version ohne PDC (RDR bzw. TDR register)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.