Elektronik-Labor
Projekte
Mikrocontroller
Raspberry
#define CLK_SYS_CTRL ((volatile uint32_t*) 0x4000803C)
#define PLL_SYS_PWR ((volatile uint32_t*) 0x40028004)
#define PLL_USB_PWR ((volatile uint32_t*) 0x4002C004)
#define ROSC_CTRL ((volatile uint32_t*) 0x40060000)
#define XOSC_CTRL ((volatile uint32_t*) 0x40024000)
Hier werden die Adressen der notwendigen Register für die Arduino-IDE zugänglich gemacht.
*CLK_SYS_CTRL = 0x00000061;// SYS_CLK = XOSC
Schaltet ausschließlich den Systemtakt direkt auf den Quarzoszillator um. Andere Komponenten des RP 2040 (z.B. ADC, Schnittstellen, Timer, ..) müssen in separaten Registern auf die gewünschte Taktquelle umgeschaltet werden.
*PLL_USB_PWR = 0x0000000F;// PLL_USB = AUS
*PLL_SYS_PWR = 0x0000000F;// PLL_SYS = AUS
Die PLL-Schaltkreise werden ausgeschaltet.
Der RP 2040 verfügt
über einen Ringoszillator (Kapitel 2.17) der grundsätzlich
eingeschaltet ist.
*ROSC_CTRL = 0x00D1EFA4;// ROSC = AUS
Schaltet den Ringoszillator aus.
Läuft dieser Sketch auf dem RPi Pico sinkt die Stromaufnahme auf ca. 2,7 mA. Die Frequenz an GPIO 15 beträgt 55,55 kHz.
Hier wird der Systemtakt auf den Ringoszillator (ROSC) mit kleinstmöglicher Oszillatorfrequenz umgeschaltet. Die Stromaufnahme beträgt weniger als 2 mA bei ausgeschaltetem Quarzoszillator, an GPIO 15 misst man 25,84 kHz. Natürlich ist der Ringoszillator weniger frequenzstabil als der Quarzoszillator. Die Frequenz des Ringoszillators lässt sich über verschiedene Registereinstellungen im Bereich von 1,8 MHz bis 12 MHz regeln.
*XOSC_CTRL = 0x00D1EAA0;// XOSC = AUS
Schaltet den Quarzoszillator aus (Kapitel 2.16 des Datenblatts).