Forum: Mikrocontroller und Digitale Elektronik CMSIS => Werden keine Bitnamen benutzt?


von Gastel (Gast)


Lesenswert?

Hallo,

ich suche mir gerade etwas über CMSIS-Zeugs zusammen. Sehe ich das 
richtig, daß es dort keine Bitnamen gibt, sondern nur magic numbers 
verwendet werden? So wie
LPC_RTC -> CIIR |= 0x02;
oder
LPC_RTC -> ILR = (1<<1);
statt
LPC_RTC -> CIIR |= (1<<IMMIN);
Das wäre ja äußerst unschön; gerade hatte ich mich an sprechende 
Bitnamen gewöhnt (und diese auch schätzen gelernt).

Btw: Kann man bei der RTC des LPC17xx tatsächlich nur auswerten, daß ein 
Increment-Interrupt da war, aber nicht welcher? Wäre auch schlecht, denn 
wenn ich Interrupts bei Increment Minute (Temperaturmessung) und 
Increment Stunde (Übertrage die letzten Meßwerte und prüfe dabei 
Verbindung) aktiviere, kann ich die Interrupts ja gar nicht 
unterscheiden und indivuduell handlen (und bitte nicht den Tip mit 
Variable bis 60 zählen und dann ..)

von Oliver B. (irq)


Lesenswert?

Hallo Gastel,

die Bitnamen gibt es so in dieser Form nicht. Allerdings gibt es z.B. in 
der STMStdPeripherial Library Bitmasken für das setzen bestimmter 
Optionen, was eigentlich noch viel praktischer ist (ok, Ansichtssache).

Z.B. hier in der stm32f10x_adc.h:
1
/** @defgroup ADC_mode 
2
  * @{
3
  */
4
5
#define ADC_Mode_Independent                       ((uint32_t)0x00000000)
6
#define ADC_Mode_RegInjecSimult                    ((uint32_t)0x00010000)
7
#define ADC_Mode_RegSimult_AlterTrig               ((uint32_t)0x00020000)
8
#define ADC_Mode_InjecSimult_FastInterl            ((uint32_t)0x00030000)
9
#define ADC_Mode_InjecSimult_SlowInterl            ((uint32_t)0x00040000)
10
#define ADC_Mode_InjecSimult                       ((uint32_t)0x00050000)
11
#define ADC_Mode_RegSimult                         ((uint32_t)0x00060000)
12
#define ADC_Mode_FastInterl                        ((uint32_t)0x00070000)
13
#define ADC_Mode_SlowInterl                        ((uint32_t)0x00080000)
14
#define ADC_Mode_AlterTrig                         ((uint32_t)0x00090000)

Die kann man dann zur Initialisierung mit den Init-Structs verwenden.

von Gastel (Gast)


Lesenswert?

Danke Oliver,

aber das scheint dann ja STM-spezifisch zu sein (und nicht einheitlich 
durch/in CMSIS geregelt). Ich hatte CMSIS, zumindest überwiegend, als 
Grundlage verstanden; die Gruppe "RTC" für die Real Time Clock z.B. wird 
in CMSIS einheitlich so genannt. Wenn ein Hersteller das bei sich intern 
"Suppenverbieger_td3" nennt darf er das ruhig, er muß nur eine (seine 
spezifische) .h-Datei nach dem Motto
#define RTC Suppenverbieger_td3
liefern, welche diese kranke Bezeichnung vor dem Programmierer verbirgt 
(klar sind da dann konkrete Register in einer Registergruppe).

Leider habe ich wohl bisher zu oberflächlich geschaut. Andererseits 
meine ich genau so eine Aussage z.B. von Herrn Keil gelesen zu haben. 
Weil wenn dem nicht so ist, ist das mit der Vereinheitlichung auch nur 
"halber Kram".

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.