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.