Forum: Mikrocontroller und Digitale Elektronik CMSIS: Ich versteh es nicht


von Manfred (Gast)


Lesenswert?

Hallo,
irgendwie verstehe ich dieses CMSIS nicht. Ich hatte vermutet, daß z.B. 
ARM im CMSIS quasi vorgibt, wie ein Register heißt, welche Funktion es 
hat, wieviele bits drin sind, wie sie heißen und welche Position sie im 
Register haben. Somit wäre es egal, ob man einen z.B. einen LPC17* oder 
einen STM32* programmiert. Der jeweilige Hersteller kann seinen Chip ja 
basteln wie er will, er muß nur ein Headerfile zur Verfügung stellen, 
damit sein Chip exakt wie im CMSIS vorgegeben angesprochen werden kann. 
Ob ein Hersteller nun ein Register 32 bit weit macht und es intern 
SONSTWIE nennt und ein anderer Hersteller dafür zwei 16 bit Register 
macht und sie SONSTWIE_H und SONSTWIE_L nennt, obliegt ihm. Er muß es 
eben nur im Headerfile nach außen wieder "gerade ziehen".

Das ist aber leider nicht so. Im CMSIS Blinky Example gibt es beim 
LPC17xx z.B. die Funktion
1
__INLINE static void LED_Config(void) {
2
  LPC_GPIO1->FIODIR = 0xB0000000;               /* LEDs PORT1 are Output */
3
}
beim STM32* die äquivalente Funktion
1
__INLINE static void LED_Config(void) {
2
RCC->APB2ENR |=  1 <<  3;                /* Enable GPIOB clock          */
3
GPIOB->CRH    = 0x33333333;              /* Configure the GPIO for LEDs */
4
}

Daher erschließt sich mir irgendwie nicht, wie man dadurch übergreifend 
Code wiederverwenden soll. Bitte erklärt es mir, da CMSIS ja wohl 
ziemlich grundlegend beim CM3 sein (bzw. werden) soll.

von (prx) A. K. (prx)


Lesenswert?

Manfred schrieb:

> ARM im CMSIS quasi vorgibt, wie ein Register heißt, welche Funktion es
> hat, wieviele bits drin sind, wie sie heißen und welche Position sie im
> Register haben.

CMSIS definiert bislang nur ein einheitliches Interface für die 
Core-Komponenten. Also hauptsächlich Prozessor und Interrupt-Controller. 
Die sind nämlich von ARM und daher überall sehr ähnlich.

> Somit wäre es egal, ob man einen z.B. einen LPC17* oder
> einen STM32* programmiert.

Eben. Woran diese Hersteller kein gesteigertes Interesse haben. Die 
wollen die Kunden binden, nicht mit ihnen um jeden Cent feilschen.

> Bitte erklärt es mir, da CMSIS ja wohl
> ziemlich grundlegend beim CM3 sein (bzw. werden) soll.

Das was ich vom CMSIS bisher gesehen habe entspricht nicht so ganz 
deinen Vorstellungen. Aufs Hardwarebit runter wird es das sicher nicht 
geben, und ein API mit gleichem Interface nach oben hin wäre ein 
Komitteeentwurf (viele Köche...), der aufgrund der "Dynamik" solcher 
Institutionen erst dann verabschiedet werden würde, wenn es niemanden 
mehr interessiert und dafür mehr Speicher bräuchte, als das grösste 
Modell bietet.

Herrje, das hat ja nicht einmal ein Hersteller allein für sich selbst 
geschafft. ST hat zwar für allerlei Controller jeweils eine 
Periphierielib gebastelt, aber die sieht bei jeder Controller-Familie 
anders aus. Sogar bei den 3 ARM-Familien (STR7, STR9, STM32).

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.