Atsam3X8E DMA Config Key

OP #7935645
Lesenswert?
• ▲
▼

Ich versuche gerade bei einem Arduino Due die DMA anzuwerfen. Ein Problem, dass eigentlich jeder in der Situation gehabt haben muss finde ich weder bei Microchip noch bei Google.

Teile der Einstellungen sind gegen verändern geschützt, bis man einen Key in ein SFR schreibt. Im Datenblatt (Atmel-11057C-ATARM-SAM3X-SAM3A-Datasheet_23-Mar-15 Seite 380 https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-11057-32-bit-Cortex-M3-Microcontroller-SAM3X-SAM3A_Datasheet.pdf) steht ein 4 Byte langer Key für 24 Bit Platz im SFR -> WTF!

Ein Errata finde ich nicht auf der Atmel Seite.

In einem anderen Forum habe ich einen Code-Schnipsel gefunden. Da schreibt einer die ASCII Codes für "PIO" in den Platz für den Key. Das klingt verdächtig nach Copy-And-Paste, denn so entsperrt man die SFRs der GPIO.

Frage : Wie lautet folgende Code-Zeile korrekt ?

1
  DMAC->DMAC_WPMR = 0x444D414300UL;  // Disable Write Protection
OP #7935722
Lesenswert?
• ▲
▼

Eben ! Genau darum geht es. Ich muss den Schlüssel und die Nullbits für kein Schutz gewünscht in ein 32-bitiges Special Function Register schreiben, aber der Schlüssel allein hat im Datenblatt schon 32 Bit.

Ich habe in Quelldateien vom ASF den Wert 0x444D41 für den Schlüssel entdeckt und werde damit mal einen Versuch starten.

#7935728
Lesenswert?
• ▲
▼

Die Doku ist offensichtlich bei WPKEY für DMAC fehlerhaft. Wie der WPKEY funktioniert sieht man ja ganz gut bei den Werten für die andere Peripherie, dort stehen dann auch nur drei Bytes.

Und konsistent sind sie in der Doku auch nicht, WPKEY heißt teilweise WP_KEY.

Beitrag #7938145 wurde von einem Moderator gelöscht.
Beitrag #7938150 wurde von einem Moderator gelöscht.
#7938156
Lesenswert?
• ▲
▼

Hier aus dem ASF.

Der Wert 0x444D41u wird um 8 Bit nach oben geshiftet, also die oberen 24 Bit. Aber hast recht, im Datenblatt stehen ganz andere Werte.

1
/**
2
* component_dmac.h
3
*/
4
/* -------- DMAC_WPMR : (DMAC Offset: 0x1E4) DMAC Write Protect Mode Register -------- */
5
#define DMAC_WPMR_WPEN (0x1u << 0) /**< \brief (DMAC_WPMR) Write Protect Enable */
6
#define DMAC_WPMR_WPKEY_Pos 8
7
#define DMAC_WPMR_WPKEY_Msk (0xffffffu << DMAC_WPMR_WPKEY_Pos) /**< \brief (DMAC_WPMR) Write Protect KEY */
8
#define DMAC_WPMR_WPKEY(value) ((DMAC_WPMR_WPKEY_Msk & ((value) << DMAC_WPMR_WPKEY_Pos)))
9

10

11
/**
12
* dmac.c
13
*/
14
#ifndef DMAC_WPMR_WPKEY_PASSWD
15
#  define DMAC_WPMR_WPKEY_PASSWD DMAC_WPMR_WPKEY(0x444D41u)
16
#endif
17

18
void dmac_set_writeprotect(Dmac *p_dmac, uint32_t ul_enable)
19
{
20
  /* Validate parameters. */
21
  Assert(p_dmac);
22
  
23
  if (ul_enable) {
24
    p_dmac->DMAC_WPMR = DMAC_WPMR_WPKEY_PASSWD | DMAC_WPMR_WPEN;
25
  } else {
26
    p_dmac->DMAC_WPMR = DMAC_WPMR_WPKEY_PASSWD;
27
  }
28
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.