Register zugriff bei Cortex-M4(SAM4s)

Gast #4082525
Lesenswert?
• ▲
▼
Hallo,
ich versuche mich derzeit auf einem Atmel SAMA4S Prozessor.
Leider hänge ich bereits ganz am Anfang: beim Register zugriff.
Bei der ATega8 Serie war das ja recht einfach und bei der AVR32 auch.
jedoch habe ich keinen schimmre wie ich ohne AFS auf die Pereferie 
Funktionen zugreifen kann.
ich habe bereits sogar die Adresse direkt versucht:
- 0x400E1200 = 1<<32; // PIOC Register

Würde mich freuen wenn mir einer die richtige Syntax anahnd eines 
einfachen Beispiels zeigen könnte.

grüße
Martin
Gast #4082572
Lesenswert?
• ▲
▼
A. K. schrieb:
> Üblicherweise verwendet mal allerdings die vordefinierten Namen aus den
> zuständigen Include-Files,

Die Dateien dazu gibt es im Atmel Toolchain Verzeichnis, heissen
allesamt pio*.h und stehen für jede Prozessorfamilie im eigenen
Unterverzeichnis, und die braucht man sich daher nicht explizit
herunterzuladen. (einfach mal die Windows-Suchfunktion anwerfen)
Moderator Persönliche Seite #4082582
Lesenswert?
• ▲
▼
Naja, normalerweise macht man da ein #include <sam.h> drüber.

Allerdings ist die Toolchain nicht so schön bequem wie beim AVR,
man muss die passenden Include-Pfade mehr oder minder mit der Hand
setzen, und auch das MCU-#define, also bspw. -D__SAM4E16E__ mit
übergeben.  Hier ein Beispiel-Makefile:
1
CC=arm-none-eabi-gcc
2

3
CMSIS=../CMSIS_Atmel
4

5
CDEFS=-D__SAM4E16E__
6
COPTS=-g -O -mthumb -DARM_MATH_CM4=true -mcpu=cortex-m4 -std=gnu99 -Wall -Wextra
7
CINCS=-I$(CMSIS)/Device/ATMEL -I$(CMSIS)/Device/ATMEL/sam4e/include -I$(CMSIS)/CMSIS/Include
8

9
CFLAGS=$(CDEFS) $(COPTS) $(CINCS)
10
LDFLAGS=-mthumb -mcpu=cortex-m4 -nostartfiles -Wl,-Map=test.map -L$(CMSIS)/Device/ATMEL/sam4e/source/as_gcc -T$(CMSIS)/Device/ATMEL/sam4e/source/as_gcc/sam4e16e_flash.ld
11

12
all: test.elf
13

14
test.elf: test.c
15
        $(CC) -o test.elf $(CFLAGS) $(LDFLAGS) $(CMSIS)/Device/ATMEL/sam4e/source/as_gcc/startup_sam4e.c $(CMSIS)/Device/ATMEL/sam4e/source/system_sam4e.c test.c
16

17
.PHONY: clean
18
clean:
19
        rm -f test.elf test.map *.o

Das entsprechende test.c fängt etwa so an:
1
#include "sam.h"
2

3
void _init(void)
4
{
5
}
6

7
int
8
main(void)
9
{
10
    system_init_flash(120000000);
11
    SystemInit();
12
    SUPC->SUPC_CR = SUPC_CR_KEY_PASSWD | SUPC_CR_XTALSEL | SUPC_CR_VROFF_NO_EFFECT;
13
    int i;
14
    for (i = 0; i < 10000; i++)
15
        if (SUPC->SUPC_SR & SUPC_SR_OSCSEL)
16
            break;
17

18
    PIOD->PIO_PER = 1 << 22;
19
    PIOD->PIO_OER = 1 << 22;
20
    PIOD->PIO_SODR = 1 << 22;
21
…
Gast #4082589
Lesenswert?
• ▲
▼
Hallo,
vielen dank so weit mit
 *((uint32_t*)0x400E1200) = 1<<23; funktioniert es.
Nach Suchen hab ichs dann auch in PIOX.h gefunden.

ich habe zuerst in der PIO.h gesucht und dort werden nur über Strukturen 
die einzelnen Bit beschrieben.



Die Register werden über:
REG_PIOC_OER = PIO_PER_P23; // 1<<23

Beschrieben.
Alle anderen Register werden über REG_XXX angesprochen

vielen dank
grüße
Martin

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.