27#include "hpm_gpio_drv.h"
28#include "hpm_plic_drv.h"
77 HPMGPIO(GPIO_Type* gpio, uint32_t port, uint8_t pin, uint32_t irq = INVALID_IRQ,
78 uint16_t pad_index = INVALID_PAD_INDEX);
84 inline bool Read()
override
86 const uint32_t level = gpio_read_pin(gpio_, port_, pin_);
95 inline void Write(
bool value)
override
97 gpio_write_pin(gpio_, port_, pin_, value ? 1u : 0u);
182#if defined(GPIO_DI_GPIOZ)
183 static constexpr uint32_t PORT_COUNT =
185#elif defined(GPIO_DI_GPIOY)
186 static constexpr uint32_t PORT_COUNT =
188#elif defined(GPIO_DI_GPIOX)
189 static constexpr uint32_t PORT_COUNT =
191#elif defined(GPIO_DI_GPIOF)
192 static constexpr uint32_t PORT_COUNT =
194#elif defined(GPIO_DI_GPIOE)
195 static constexpr uint32_t PORT_COUNT =
197#elif defined(GPIO_DI_GPIOD)
198 static constexpr uint32_t PORT_COUNT =
200#elif defined(GPIO_DI_GPIOC)
201 static constexpr uint32_t PORT_COUNT =
204 static constexpr uint32_t PORT_COUNT = 15u;
206 static constexpr uint32_t PIN_COUNT = 32;
207 static constexpr uint32_t INVALID_IRQ =
209 static constexpr uint16_t INVALID_PAD_INDEX =
220 struct PortIrqRouteState
222 GPIO_Type* controller =
nullptr;
223 uint32_t irq = INVALID_IRQ;
224 uint32_t enabled_pin_count = 0u;
236 static uint16_t ResolvePadIndex(GPIO_Type* gpio, uint32_t port, uint8_t pin);
240 static HPMGPIO* map[PORT_COUNT][PIN_COUNT];
241 static GPIO_Type* port_controller_map[PORT_COUNT];
242 static PortIrqRouteState port_irq_route_map[PORT_COUNT];
249 bool interrupt_enabled_ =
通用输入输出(GPIO)接口类。 General Purpose Input/Output (GPIO) interface class.
HPM 平台 GPIO 驱动实现 / GPIO driver implementation for HPM platform.
ErrorCode EnableInterrupt() override
使能当前引脚中断 / Enable GPIO interrupt for current pin.
ErrorCode SetAnalogHighImpedance()
将当前 PAD 配置为模拟高阻 / Configure current pad to analog high-impedance.
ErrorCode SetConfig(Configuration config) override
配置当前引脚模式 / Configure GPIO mode for current pin.
bool Read() override
读取引脚电平 / Read current pin level.
void Write(bool value) override
写引脚电平 / Write output pin level.
static void CheckInterrupt(uint32_t port)
分发某一端口的 GPIO 中断回调 / Dispatch GPIO interrupt callbacks for one port.
ErrorCode DisableInterrupt() override
失能当前引脚中断 / Disable GPIO interrupt for current pin.
HPMGPIO(GPIO_Type *gpio, uint32_t port, uint8_t pin, uint32_t irq=INVALID_IRQ, uint16_t pad_index=INVALID_PAD_INDEX)
构造 HPM GPIO 对象 / Construct an HPM GPIO object.
void libxr_hpm_gpio_check_interrupt(uint32_t port)
GPIO 中断分发的 C 接口 / C entry for GPIO interrupt dispatch.
LibXR 命名空间 / LibXR namespace.
ErrorCode
定义错误码枚举 / Defines an enumeration for error codes