Hallo zusammen,
ich habe hier ein SAMC21G18A und bin grad an der Implementierung vom
SPI.
Das ASF wird verwendet.
Angeschlossen ist ein AFE4403.
Im Interruptbetrieb funktioniert alles super, auch der Empfang.
Ich takte eine write_buf heraus, dieser enthält die Registeradressen die
ich lesen möchte und erhalte dann im read_buf, die Registerinhalte.
Nun habe ich es auf DMA umgebaut.
Das versenden vom write_buf funktioniert, Werte in Registern setzen.
Durch senden des write_buf mit den Registeradr. sehe ich auch mit dem
LA, dass die vorher gesetzten Werte wieder herausgetaktet werden.
Grundsätzlich war meine Idee, dass ich einfach source und destination in
der DMA Config. vertausche. Jedoch fängt er so nicht mals an zu takten.
1 | dma_descriptor_get_config_defaults(&config);
|
2 |
|
3 | config.beat_size = DMA_BEAT_SIZE_BYTE;
|
4 | config.dst_increment_enable = false;
|
5 | config.block_transfer_count = length;
|
6 | config.source_address = (uint32_t) (&spi_master_instance.hw->SPI.DATA.reg);
|
7 | config.destination_address = (uint32_t) src + (uint32_t) length;
|
Funktioniert das "Lesen" überhaupt mit DMA?
Schliesslich muss ich erst 1 Byte Adresse heraustakten und dann die
3Byte Registerwerte empfangen (für 1 Register).
Irgendwie fehlt mir grad die richtige Idee.