Forum: Mikrocontroller und Digitale Elektronik SAMD21: Selbst geschriebene HAL-Module, Anregungen, Kritik.


von Alexxx (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

da mir die ASF zu undurchsichtig / fett ist und ich den Prozessor für
spezielle Anwendungen "voll im Griff" haben will,
programmiere ich "Bare Metal" und habe begonnen,
schlanke, leistungsfähige HAL-Module selbst zu schreiben.
Da für die äußerst komplexe DMA kaum Beispiele existieren,
veröffentliche ich hiermit meine Arbeit.
Meine anderen HAL-Module werde ich auch noch veröffentlichen...

Testprogramm Endlosausgabe Ringpuffer auf SPI:
(RAM-Ringpuffer => DMA => Master-SPI)
1
//---------------------------
2
#include <stdbool.h>
3
#include "sam.h"
4
#include "hal_dma.h"
5
6
uint8_t    buffer[100];
7
DmacDescriptor  *chdescr_ptr;
8
9
//...Standard-Startup-Initialisierungen
10
//- Initialisierung einer Master-SPI (SERCOM0)-> ergänzen!
11
12
//------- DMA-Beispiel --------
13
  SetupDma();
14
  SetupDmaChannel(DMA_CHID_CHANNEL0, DMA_PRIORITY_3,
15
                  DMA_TRIGACT_BEAT, DMA_TRIGSRC_SERCOM0_TX,
16
                  DMA_EVACT_NONE);
17
  chdescr_ptr= 
18
  AddDmaDescriptor(DMA_CHID_CHANNEL0,(void*const)&buffer[99],
19
                   DMA_ADDR_INC_1,(void*const)&SERCOM0->SPI.DATA.reg,
20
       DMA_ADDR_INC_NONE, DMA_BEAT_SIZE_8B, sizeof(buffer),
21
                   DMA_EVENT_OUTPUT_DISABLE);
22
// while((uint32_t)chdescr_ptr == 0);  // Null-Pointer: Fehler-Halt
23
24
   // Endlosausgabe: Descriptor verlinkt auf sich selbst!  
25
  chdescr_ptr->DESCADDR.reg= (uint32_t)chdescr_ptr;
26
27
  EnableDmaChannel(DMA_CHID_CHANNEL0);
28
//---------------------------------------------------------

Konstruktive Anregungen und Kritik willkommen!

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Alexxx schrieb:
> Konstruktive Anregungen und Kritik willkommen!

Pack das ganze auf Github oder Gitlab.com. ;-)

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
Noch kein Account? Hier anmelden.