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?
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.