So, natürlich werde ich bestimmt wieder "verhauen" aber vllt. gibt es ja
auch konstruktive Stellungsname.
Nachdem hier ab und an für billigste Mikrocontroller (neben PFS154) eben
auch CH32V003 auftaucht, habe ich mich jetzt doch dazu durchgerungen
mich mit diesem (dann neben STM32) auch zu befassen. Da mir das
Herstellerpaket "mounriver" dann doch ein Brocken zu arg ist und ich
sowieso meine Dinge mittels Editor(en) und Makefiles erstelle, befasse
ich mich jetzt eben auf der Basis von ch32v003fun.
Da mir der Aufbau und die Benennung der Funktionsnamen nicht so gefällt
(weil er in mein Schema der von mir benutzten anderen Controllerfamilien
nicht so passt), passe ich mir dieses Framework jetzt an meine
Gegebenheiten an und stolpere gleich zu Beginn an den GPIO's.
Mir gefällt bspw. das Initialisieren eines Pins als Ausgang oder Eingang
respektive das Setzen/Löschen eines Pins in Form von funPinMode und
funDigitalWrite so gar nicht, also möchte ich das durch meine eigenen
Namen ersetzen (und dabei auch einigen Overhead von ch32v003fun
beseitigen).
Natürlich schaue ich mir hierbei an, wie der Autor von ch32fun das
gemacht hat und durchforste dessen Headerdateien (die ich weiter
verwenden möchte, weil ich aus dem Datenblatt nicht das Rad noch einmal
neu erfinden will).
Also Datenblatt zur Hand genommen und geschaut, was ch32fun so macht
(und hier <ironiean> freue <!ironieaus> ich mich schon einmal über die
Darstellungen im Datenblatt, weil ich mir erst einmal das Hirn verrenken
muß, wie etwas dargestellt ist).
Im Speziellen geht es mir hier jetzt um das CFGLR Register (welches ich
im Aufbau schon etwas "merkwürdig" finde).
Lt. Datenblatt sind die Bits 0 und 1 Modebits und im speziellen für den
Takt der GPIOs zustäandig (bzw. Inputmode)... siehe Bildanhang
Hier soll es lt. Datenblatt 10MHz, 2MHz und 30MHz geben. Hier ist
gesagt, dass im gesamten Datenblatt es ausser der Busfrequenz keinen
Hinweis auf 50MHz gibt.
In einer Headerdatei hat der Autor die Taktfrequenzen folgendermaßen
deklariert:
1 | /* Output Maximum frequency selection */
|
2 | typedef enum
|
3 | {
|
4 | GPIO_Speed_In = 0,
|
5 | GPIO_Speed_10MHz,
|
6 | GPIO_Speed_2MHz,
|
7 | GPIO_Speed_50MHz
|
8 | } GPIOSpeed_TypeDef;
|
Nach diesem Enumerator bekomme ich für die Bezeichnung GPIO_Speed_50MHz
den Wert 3. Lt. Datenblatt müßte das dann doch GPIO_Speed_30MHz heißen,
oder sehe ich das falsch?