SensorLib 0.5.0
Multi-platform sensor driver library for Arduino, PlatformIO, and ESP-IDF
Loading...
Searching...
No Matches
axp202_irq.ino
Go to the documentation of this file.
1
30#include <PmicXPowers.hpp>
31
32#ifndef PMIC_SDA
33#define PMIC_SDA 3
34#endif
35
36#ifndef PMIC_SCL
37#define PMIC_SCL 2
38#endif
39
40#ifndef PMIC_IRQ
41#define PMIC_IRQ 21
42#endif
43
45
46void printU64(uint64_t value)
47{
48 char buffer[20];
49 snprintf(buffer, sizeof(buffer), "0x%016llX", value);
50 Serial.print(buffer);
51}
52
53void setup()
54{
55 Serial.begin(115200);
56 delay(500);
57
58 Serial.println("\n=== AXP202 IRQ Example ===\n");
59
60 if (!pmic.begin(Wire, AXP202_SLAVE_ADDRESS, PMIC_SDA, PMIC_SCL)) {
61 Serial.println("Failed to init AXP202!");
62 while (1) delay(1000);
63 }
64 Serial.println("AXP202 initialized");
65
66 // Set timer 1 minute timeout trigger interrupt ,auto-restart every minute
67 pmic.timer().setTimer(1);
68
69 // Enable selected interrupt sources
70 // Shared interrupts (also available on AXP192)
71 pmic.irq().enable(
82 // AXP202-specific interrupts
89 );
90
91 Serial.println("IRQ sources enabled");
92
94
95 Serial.println("\n=== Setup Complete ===\n");
96}
97
98void loop()
99{
100 uint64_t irqStatus = pmic.irq().readStatus(true);
101 if (irqStatus) {
102
103 Serial.print("\n--- Interrupt : 0x");
104 printU64(irqStatus);
105 Serial.print(" --- ");
106
107 if (AXP202Irq::isVbusInsert(irqStatus))
108 Serial.println("VBUS inserted");
109 if (AXP202Irq::isVbusRemove(irqStatus))
110 Serial.println("VBUS removed");
111 if (AXP202Irq::isBatInsert(irqStatus))
112 Serial.println("Battery inserted");
113 if (AXP202Irq::isBatRemove(irqStatus))
114 Serial.println("Battery removed");
115 if (AXP202Irq::isBatChgStart(irqStatus))
116 Serial.println("Charge started");
117 if (AXP202Irq::isBatChgDone(irqStatus))
118 Serial.println("Charge done");
119 if (AXP202Irq::isPekeyShortPress(irqStatus))
120 Serial.println("PEKEY short press");
121 if (AXP202Irq::isPekeyLongPress(irqStatus))
122 Serial.println("PEKEY long press");
123 if (AXP202Irq::isAcinOv(irqStatus))
124 Serial.println("ACIN over-voltage");
125 if (AXP202Irq::isAcinInsert(irqStatus))
126 Serial.println("ACIN inserted");
127 if (AXP202Irq::isAcinRemove(irqStatus))
128 Serial.println("ACIN removed");
129 if (AXP202Irq::isVbusOv(irqStatus))
130 Serial.println("VBUS over-voltage");
131 if (AXP202Irq::isChipOvTemp(irqStatus))
132 Serial.println("Chip over-temperature");
133 if (AXP202Irq::isChgCurrLess(irqStatus))
134 Serial.println("Charge current low");
135 if (AXP202Irq::isBatTempHigh(irqStatus))
136 Serial.println("Battery temp high");
137 if (AXP202Irq::isBatTempLow(irqStatus))
138 Serial.println("Battery temp low");
139 if (AXP202Irq::isGpio0EdgeTrigger(irqStatus))
140 Serial.println("GPIO0 edge trigger");
141 if (AXP202Irq::isGpio1EdgeTrigger(irqStatus))
142 Serial.println("GPIO1 edge trigger");
143 if (AXP202Irq::isGpio2EdgeTrigger(irqStatus))
144 Serial.println("GPIO2 edge trigger");
145 // AXP202-specific interrupts
146 if (AXP202Irq::isGpio3EdgeTrigger(irqStatus))
147 Serial.println("GPIO3 edge trigger");
148 if (AXP202Irq::isPkeyPositive(irqStatus))
149 Serial.println("PEK rising edge");
150 if (AXP202Irq::isPkeyNegative(irqStatus))
151 Serial.println("PEK falling edge");
152 if (AXP202Irq::isLowVoltLevel1(irqStatus))
153 Serial.println("APS low voltage level1");
154 if (AXP202Irq::isLowVoltLevel2(irqStatus))
155 Serial.println("APS low voltage level2");
156 if (AXP202Irq::isTimerTimeout(irqStatus)) {
157 static uint32_t lastTimerIrq = 0;
158 uint32_t now = millis() / 1000;
159 Serial.print("[");
160 Serial.print(now);
161 Serial.println("] Timer interrupt");
162 if (pmic.timer().isTimedOut()) {
163 Serial.print("Timer timed out");
164 Serial.print(" [");
165 Serial.print((now - lastTimerIrq) / 60);
166 Serial.print("] minute have passed");
168 }
169 lastTimerIrq = now;
170 }
171 }
172
173 delay(100);
174}
@license MIT License
#define PMIC_SDA
#define PMIC_SCL
void setup()
void printU64(uint64_t value)
PmicAXP202 pmic
void loop()
static bool isGpio1EdgeTrigger(uint64_t m)
Check GPIO1 edge trigger interrupt.
static constexpr uint64_t IRQ_GPIO0_EDGE
GPIO0 edge trigger interrupt mask.
static constexpr uint64_t IRQ_BAT_CHG_START
Charging started interrupt mask.
Definition AXP1xxIrq.hpp:93
static bool isAcinInsert(uint64_t m)
Check ACIN insertion interrupt.
static constexpr uint64_t IRQ_VBUS_INSERT
VBUS insertion interrupt mask.
Definition AXP1xxIrq.hpp:74
static bool isBatChgStart(uint64_t m)
Check charging started interrupt.
static constexpr uint64_t IRQ_LOW_VOLT_LEVEL2
Low voltage level 2 interrupt mask.
static bool isVbusOv(uint64_t m)
Check VBUS overvoltage interrupt.
bool clearStatus() override
Clear all pending interrupt status registers.
static bool isBatChgDone(uint64_t m)
Check charging completed interrupt.
static bool isBatTempLow(uint64_t m)
Check battery temperature low interrupt.
static bool isPekeyShortPress(uint64_t m)
Check PEK short press interrupt.
static constexpr uint64_t IRQ_PKEY_NEGATIVE
PEK press falling edge interrupt mask.
static constexpr uint64_t IRQ_GPIO3_EDGE
GPIO3 edge trigger interrupt mask.
static constexpr uint64_t IRQ_GPIO1_EDGE
GPIO1 edge trigger interrupt mask.
static bool isLowVoltLevel2(uint64_t m)
Check low voltage level 2 interrupt.
static bool isBatRemove(uint64_t m)
Check battery removal interrupt.
static bool isGpio0EdgeTrigger(uint64_t m)
Check GPIO0 edge trigger interrupt.
static bool isPkeyNegative(uint64_t m)
Check PEK press falling edge interrupt.
static constexpr uint64_t IRQ_PEKEY_SHORT_PRESS
PEK short press interrupt mask.
static bool isBatTempHigh(uint64_t m)
Check battery temperature high interrupt.
static bool isVbusRemove(uint64_t m)
Check VBUS removal interrupt.
static constexpr uint64_t IRQ_BAT_REMOVE
Battery removal interrupt mask.
Definition AXP1xxIrq.hpp:87
static bool isGpio3EdgeTrigger(uint64_t m)
Check GPIO3 edge trigger interrupt.
static bool isPekeyLongPress(uint64_t m)
Check PEK long press interrupt.
static bool isVbusInsert(uint64_t m)
Check VBUS insertion interrupt.
static bool isAcinOv(uint64_t m)
Check ACIN overvoltage interrupt.
static constexpr uint64_t IRQ_BAT_CHG_DONE
Charging completed interrupt mask.
Definition AXP1xxIrq.hpp:95
static bool isGpio2EdgeTrigger(uint64_t m)
Check GPIO2 edge trigger interrupt.
static constexpr uint64_t IRQ_BAT_INSERT
Battery insertion interrupt mask.
Definition AXP1xxIrq.hpp:85
static bool isPkeyPositive(uint64_t m)
Check PEK press rising edge interrupt.
static bool isBatInsert(uint64_t m)
Check battery insertion interrupt.
static bool isChipOvTemp(uint64_t m)
Check chip overtemperature interrupt.
bool enable(uint64_t mask) override
Enable one or more interrupt sources.
static constexpr uint64_t IRQ_VBUS_REMOVE
VBUS removal interrupt mask.
Definition AXP1xxIrq.hpp:76
static constexpr uint64_t IRQ_LOW_VOLT_LEVEL1
Low voltage level 1 interrupt mask.
static bool isAcinRemove(uint64_t m)
Check ACIN removal interrupt.
static constexpr uint64_t IRQ_TIMER_TIMEOUT
Timer timeout interrupt mask.
static constexpr uint64_t IRQ_PKEY_POSITIVE
PEK press rising edge interrupt mask.
static bool isLowVoltLevel1(uint64_t m)
Check low voltage level 1 interrupt.
static bool isTimerTimeout(uint64_t m)
Check timer timeout interrupt.
uint64_t readStatus(bool clear=true) override
Read and optionally clear interrupt status.
static constexpr uint64_t IRQ_PEKEY_LONG_PRESS
PEK long press interrupt mask.
static bool isChgCurrLess(uint64_t m)
Check charge current less than target interrupt.
bool isTimedOut() const override
Check whether the timer has expired (bit 7 of REG8AH).
bool clearTimeout() override
Clear the timeout status flag (write 1 to bit 7 of REG8AH).
bool setTimer(uint8_t minutes) override
Start the timer with the given duration, or stop it.
Unified AXP202 PMIC driver.
AXP1xxIrq< axp202_regs > & irq()
Access the IRQ (interrupt) interface.
AXP1xxTimer< axp202_regs > & timer()
Access the countdown timer subsystem.
bool begin(SensorCommCustom::CustomCallback callback, SensorCommCustomHal::CustomHalCallback hal_cb, uint8_t addr)
Initialise the PMIC using custom communication callbacks.