www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik eigene controller lib in KEIL


Autor: ARMer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ARMer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#define PIOA_PER (*(unsigned long*)0x0000FFFF)

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grad interessehalber mal nachgeschaut:

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

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

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

Autor: ARMer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super dank dir!

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.