SensorLib 0.5.0
Multi-platform sensor driver library for Arduino, PlatformIO, and ESP-IDF
Loading...
Searching...
No Matches
axp192_irq.ino
Go to the documentation of this file.
1
31#include <PmicXPowers.hpp>
32
33#ifndef PMIC_SDA
34#define PMIC_SDA 3
35#endif
36
37#ifndef PMIC_SCL
38#define PMIC_SCL 2
39#endif
40
41#ifndef PMIC_IRQ
42#define PMIC_IRQ 21
43#endif
44
46
47void printU64(uint64_t value)
48{
49 char buffer[20];
50 snprintf(buffer, sizeof(buffer), "0x%016llX", value);
51 Serial.print(buffer);
52}
53
54void setup()
55{
56 Serial.begin(115200);
57 delay(500);
58
59 Serial.println("\n=== AXP192 IRQ Example ===\n");
60
61 if (!pmic.begin(Wire, AXP192_SLAVE_ADDRESS, PMIC_SDA, PMIC_SCL)) {
62 Serial.println("Failed to init AXP192!");
63 while (1) delay(1000);
64 }
65 Serial.println("AXP192 initialized");
66
67 // Set timer 1 minute timeout trigger interrupt ,auto-restart every minute
68 pmic.timer().setTimer(1);
69
70 // Enable selected interrupt sources via base class
71 pmic.irq().enable(
81 );
82 Serial.println("IRQ sources enabled");
83
85
86 Serial.println("\n=== Setup Complete ===\n");
87}
88
89void loop()
90{
91 uint64_t irqStatus = pmic.irq().readStatus(true);
92 if (irqStatus) {
93 Serial.print("\n--- Interrupt : 0x");
94 printU64(irqStatus);
95 Serial.print(" --- ");
96 if (AXP192Irq::isVbusInsert(irqStatus))
97 Serial.println("VBUS inserted");
98 if (AXP192Irq::isVbusRemove(irqStatus))
99 Serial.println("VBUS removed");
100 if (AXP192Irq::isBatInsert(irqStatus))
101 Serial.println("Battery inserted");
102 if (AXP192Irq::isBatRemove(irqStatus))
103 Serial.println("Battery removed");
104 if (AXP192Irq::isBatChgStart(irqStatus))
105 Serial.println("Charge started");
106 if (AXP192Irq::isBatChgDone(irqStatus))
107 Serial.println("Charge done");
108 if (AXP192Irq::isPekeyShortPress(irqStatus))
109 Serial.println("PEKEY short press");
110 if (AXP192Irq::isPekeyLongPress(irqStatus))
111 Serial.println("PEKEY long press");
112 if (AXP192Irq::isAcinOv(irqStatus))
113 Serial.println("ACIN over-voltage");
114 if (AXP192Irq::isAcinInsert(irqStatus))
115 Serial.println("ACIN inserted");
116 if (AXP192Irq::isAcinRemove(irqStatus))
117 Serial.println("ACIN removed");
118 if (AXP192Irq::isVbusOv(irqStatus))
119 Serial.println("VBUS over-voltage");
120 if (AXP192Irq::isChipOvTemp(irqStatus))
121 Serial.println("Chip over-temperature");
122 if (AXP192Irq::isChgCurrLess(irqStatus))
123 Serial.println("Charge current low");
124 if (AXP192Irq::isBatTempHigh(irqStatus))
125 Serial.println("Battery temp high");
126 if (AXP192Irq::isBatTempLow(irqStatus))
127 Serial.println("Battery temp low");
128 if (AXP192Irq::isDc1VoltLess(irqStatus))
129 Serial.println("DCDC1 voltage low");
130 if (AXP192Irq::isDc2VoltLess(irqStatus))
131 Serial.println("DCDC2 voltage low");
132 if (AXP192Irq::isDc3VoltLess(irqStatus))
133 Serial.println("DCDC3 voltage low");
134 if (AXP192Irq::isTimerIrq(irqStatus)) {
135 static uint32_t lastTimerIrq = 0;
136 uint32_t now = millis() / 1000;
137 Serial.print("[");
138 Serial.print(now);
139 Serial.println("] Timer interrupt");
140 if (pmic.timer().isTimedOut()) {
141 Serial.print("Timer timed out");
142 Serial.print(" [");
143 Serial.print((now - lastTimerIrq) / 60);
144 Serial.print("] minute have passed");
146 }
147 lastTimerIrq = now;
148 }
149 }
150
151 delay(100);
152}
@license MIT License
#define PMIC_SDA
#define PMIC_SCL
void setup()
void printU64(uint64_t value)
PmicAXP192 pmic
void loop()
static bool isDc2VoltLess(uint64_t m)
Check DC-DC2 voltage low interrupt.
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 bool isVbusOv(uint64_t m)
Check VBUS overvoltage interrupt.
bool clearStatus() override
Clear all pending interrupt status registers.
static bool isTimerIrq(uint64_t m)
AXP192 alias for isTimerTimeout().
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 bool isDc1VoltLess(uint64_t m)
Check DC-DC1 voltage low interrupt.
static bool isBatRemove(uint64_t m)
Check battery removal interrupt.
static bool isDc3VoltLess(uint64_t m)
Check DC-DC3 voltage low 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 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 constexpr uint64_t IRQ_BAT_INSERT
Battery insertion interrupt mask.
Definition AXP1xxIrq.hpp:85
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 bool isAcinRemove(uint64_t m)
Check ACIN removal interrupt.
static constexpr uint64_t IRQ_TIMER_TIMEOUT
Timer timeout interrupt mask.
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.
AXP192 PMIC Unified Interface.
bool begin(SensorCommCustom::CustomCallback callback, SensorCommCustomHal::CustomHalCallback hal_cb, uint8_t addr)
Initialise the AXP192 with custom communication callbacks.
AXP1xxIrq< axp192_regs > & irq()
Access the IRQ subsystem.
AXP1xxTimer< axp192_regs > & timer()
Access the countdown timer subsystem.