Forum: Mikrocontroller und Digitale Elektronik eigene controller lib in KEIL


von ARMer (Gast)


Lesenswert?

Hallo!

ich würde gerne eine eigene lib mit register definitionen usw schreiben.
also ähnlich den at91sam7xxxx.h files.

ich kenn das von anderen compilern (CVAVR)in etwa so:

.equ PORTA 0x55
.equ TIMSK 0x10

ich hab jetz das selbe einfach mit keil versucht, bekomm abe immer die 
fehlermeldung "unexpected identifier" in jeder zeile.

Hat jemand erfahrung mit dem erstellen solcher bibliotheken oder eine 
ahnung was hier falsch sein könnte?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du willst eine Headerdatei schreiben, keine Library.

Und in eine Headerdatei, die für einen C-Compiler gedacht ist, kommen 
C-Anweisungen bzw. Definitionen.

Was Du da zitierst, sind Assembleranweisungen, und mit denen kann der 
C-Compiler nichts anfangen.


Sieh Dir als Beispiel doch einfach mal eine der mit Deinem Compiler 
mitgelieferten Headerdateien an - das sind Textdateien, die kann man mit 
einem Texteditor bearbeiten.

von ARMer (Gast)


Lesenswert?

Danke für deine Antwort.
ich will eine headerdatei erstellen - stimmt. Ich hab mir die 
at91sam7x256.h natürlich angesehen, aber ich würde gerne ohne structs 
und pointer arbeiten.
mir würde es gefallen, wenn ich auf "altmodische" art weiterarbeiten 
könnte - d.h.: die registeraddressen per #define zuweisen - also etwa 
so:
#define PIOA_PER 0x0000FFFF

funktoiniert nur so nicht - da ich das ganze im sourcecode wie folgt 
verwenden möchte:
PIOA_PER = 0xFFFFFFFF;
also dem register PIOA_PER den wert 0xFFFFFFFF zuweisen.

von ARM-Fan (Gast)


Lesenswert?

Also eben doch mit "pointer".

>#define PIOA_PER 0x0000FFFF

soll ja eine Speicheradresse sein, auf die du zugreifen möchtest.
Also ein Zeiger auf einen 32bit Wert:

(unsigned long *)0x0000FFFF

Um auf den Inhalt zuzugreifen, dereferenzierst du den noch:

*(unsigned long *)0x0000FFFF

und erhälst:
1
#define PIOA_PER (*(unsigned long*)0x0000FFFF)

von ARM-Fan (Gast)


Lesenswert?

Wobei ich allerdings, ohne den SAM7 näher zu kennen, bezweifele dass 
0x0000FFFF die Adresse des Registers ist, das du ansprechen möchtest. 
Eher ein Offset, oder?

von ARM-Fan (Gast)


Lesenswert?

Grad interessehalber mal nachgeschaut:

http://www.keil.com/dd/docs/arm/atmel/sam7x/at91sam7x256.h

Da steht doch alles drin.
1
#define AT91C_PIOA_PER  ((AT91_REG *)   0xFFFFF400) // (PIOA) PIO Enable Register

Wenn du da direkt draufschreiben möchtest, dann mach das so:
1
*AT91C_PIOA_PER = 0xFFFFFFFF;

von ARMer (Gast)


Lesenswert?

super dank dir!

ich versuch jetz mal so eine ehaderdatei zu schreiben - ich vermute 
allerdings stark, dass ich noch weitere fragen haben werde. :)

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.