4#include "hpm_gpio_drv.h"
5#include "hpm_plic_drv.h"
39 inline bool Read()
override
50 inline void Write(
bool value)
override
80 ErrorCode
SetConfig(Configuration config)
override;
116 static uint16_t
ResolvePadIndex(GPIO_Type* gpio, uint32_t port, uint8_t pin);
121 static GPIO_Type* port_controller_map[
kPortCount];
136extern "C" void libxr_hpm_gpio_check_interrupt(uint32_t port);
通用输入输出(GPIO)接口类。General Purpose Input/Output (GPIO) interface class.
HPM 平台 GPIO 驱动实现 / GPIO driver implementation for HPM platform.
static constexpr uint32_t kPortCount
支持的端口数量 / Supported port count.
GPIO_Type * gpio_
GPIO 控制器实例 / GPIO controller instance.
ErrorCode EnableInterrupt() override
使能当前引脚中断 / Enable GPIO interrupt for current pin.
static constexpr uint16_t kInvalidPadIndex
无效 PAD 标记 / Invalid PAD marker.
ErrorCode SetAnalogHighImpedance()
将当前 PAD 配置为模拟高阻 / Configure current pad to analog high-impedance.
static uint16_t ResolvePadIndex(GPIO_Type *gpio, uint32_t port, uint8_t pin)
根据控制器与端口引脚推导 IOC PAD 编号 / Resolve IOC PAD index from controller/port/pin tuple.
ErrorCode SetConfig(Configuration config) override
配置当前引脚模式 / Configure GPIO mode for current pin.
uint16_t pad_index_
IOC PAD 编号 / IOC PAD index.
bool Read() override
读取引脚电平 / Read current pin level.
static constexpr uint32_t kInvalidIrq
无效 IRQ 标记 / Invalid IRQ marker.
void Write(bool value) override
写引脚电平 / Write output pin level.
static void CheckInterrupt(uint32_t port)
分发某一端口的 GPIO 中断回调 / Dispatch GPIO interrupt callbacks for one port.
uint32_t irq_
引脚对应 IRQ 号 / IRQ number for this pin.
ErrorCode DisableInterrupt() override
失能当前引脚中断 / Disable GPIO interrupt for current pin.
HPMGPIO(GPIO_Type *gpio, uint32_t port, uint8_t pin, uint32_t irq=kInvalidIrq, uint16_t pad_index=kInvalidPadIndex)
构造 HPM GPIO 对象 / Construct an HPM GPIO object.
static HPMGPIO * map[kPortCount][kPinCount]
GPIO 对象映射表 / GPIO object dispatch map.
static constexpr uint32_t kPinCount
每个端口引脚数 / Pins per port.
uint8_t pin_
GPIO 引脚号 / GPIO pin index.
uint32_t port_
GPIO 端口号 / GPIO port index.