Forum: Mikrocontroller und Digitale Elektronik CMSIS - was ist das genau?


von oleg (Gast)


Lesenswert?

Eine Frage zum CMSIS, das ist ja eine Softwareschicht auf der Hardware. 
Jetzt habe ich gelesen, dass man auch ohne CMSIS auskommen könnte und 
die Register direkt ansprechen kann. Wie ist das gemeint?
Wenn ich mir das Ref.Manual von z.B. dem STM32F0 anschaue, dann werden 
dort direkt Registernamen angegeben. Aber ohne CMSIS müsste ich dann nur 
noch direkt mit Adressen arbeiten anstatt mit Namen, ist das richtig? 
Somit basiert das Ref.Manual auf dem CMSIS?

von Horst (Gast)


Lesenswert?

oleg schrieb:
> Aber ohne CMSIS müsste ich dann nur noch direkt mit Adressen arbeiten
> anstatt mit Namen, ist das richtig?

Ja

oleg schrieb:
> Somit basiert das Ref.Manual auf dem CMSIS?

Nein, andersherum. Cmsis basiert auf refman.

von oleg (Gast)


Lesenswert?

Super dann bin ich da schonmal einen Schritt weiter, danke dir.

von W.S. (Gast)


Lesenswert?

oleg schrieb:
> Aber ohne CMSIS müsste ich dann nur
> noch direkt mit Adressen arbeiten anstatt mit Namen

Nein. Statt CMSIS benutzt du einfach einige 'relativ' einfache 
Definitionen wie z.B. sowas:
1
#define NVIC_ISER     (*((volatile dword *)   (NVIC + 0x100)))  // Interrupt Set Enable Register

Normalerweise sind alle die HW-Register in solcher oder so ähnlicher 
Weise in irgend einer Headerdatei vorgehalten, die meistens in dem 
Schema 'name des chips.h' benannt ist. Entweder du findest selbige bei 
einer vertrauenswürdigen Quelle oder du machst diese Datei dir selber. 
Ist nicht schwer, wenn man das Schema begriffen hat.

Und dann operierst du in deinem Programm nicht mit Adressen, sondern mit 
den Namen, wie sie im Refman stehen (oder wie du sie selber getauft 
hast).

W.S.

von Bernd K. (prof7bit)


Lesenswert?

W.S. schrieb:
> Entweder du findest selbige bei
> einer vertrauenswürdigen Quelle oder du machst diese Datei dir selber.

Die CMSIS Header sind immer irgendwo in den Downloads vom Hersteller 
zu finden, in irgendwelchen zip-dateien mit Demo-Projekten oder 
dergleichen. Kein Mensch der noch alle Tassen im Schrank hat käme jemals 
auf die Idee die selber zu schreiben, es sei denn er ist auf ner 
einsamen Insel gestrandet und hat alles Werkzeug und Zubehör bis auf die 
Header vom sinkenden Schiff gerettet, aber hat nun leider dort am Strand 
kein Internet.

Von so einer Begebenheit ist mir aber noch nie was zu Ohren gekommen.

von Horst (Gast)


Lesenswert?

W.S. schrieb:
> Nein. Statt CMSIS benutzt du einfach einige 'relativ' einfache
> Definitionen wie z.B. sowas:#define NVIC_ISER     (*((volatile dword *)
> (NVIC + 0x100)))  // Interrupt Set Enable Register

Das gehört doch schon zu CMSIS oder nicht?

Bernd K. schrieb:
> Die CMSIS Header sind immer irgendwo in den Downloads vom Hersteller zu
> finden, in irgendwelchen zip-dateien mit Demo-Projekten oder
> dergleichen.

Wenn man eine zentrale Anlaufstelle haben will: 
https://www.keil.com/dd2/pack/
Einfach die Dateien entpacken nach dem Download und auch in non-Keil 
Software verwenden.

von Janvi (Gast)


Lesenswert?

Zur Orientierung. CMSIS ist von ARM und betrifft nur den CPU Kern. Der 
beinhaltet auch den Interrupt Controller und bereits beim Einlesen in 
dessen Details habe ich das Teil sehr gerne (und problemlos) benutzt. 
(Steht nicht im STM Datenblatt sondern im Arm Architecture Manual). Dazu 
ergänzend sind dann in ähnlicher Weise die Peripherie Libs von ST wo 
produktspezifisch sind. Aber auch die habe ich (als eingefleischter 
Asssembler Programmierer) problemlos benutzt und nur in Sonderfällen 
selbst auf Register zugegriffen. So mal bei einer Trickserei mit Timern 
und Capture die manchmal etwas undurchsichtig sind und es vielleicht 
nicht alle Anwendungen in der Lib vorgefertigt gibt.

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.