#arm #driver #aarch64 #gic #interrupt-controller

no-std arm-gic

Arm通用中断控制器版本3或4的驱动程序

2个版本

0.1.1 2024年8月9日
0.1.0 2023年4月17日

嵌入式开发中排名第1536

Download history 100/week @ 2024-04-26 105/week @ 2024-05-03 103/week @ 2024-05-10 111/week @ 2024-05-17 70/week @ 2024-05-24 101/week @ 2024-05-31 70/week @ 2024-06-07 105/week @ 2024-06-14 100/week @ 2024-06-21 114/week @ 2024-06-28 155/week @ 2024-07-05 94/week @ 2024-07-12 124/week @ 2024-07-19 107/week @ 2024-07-26 90/week @ 2024-08-02 192/week @ 2024-08-09

每月下载量520
libhermit-rs使用

MIT/Apache

27KB
430

Arm通用中断控制器驱动程序

crates.io page docs.rs page

本crate提供Arm通用中断控制器版本3或4(GICv3和GICv4)的Rust驱动程序。

目前它仅支持AArch64。欢迎贡献补丁以添加对AArch32和其他GIC版本的支持。

这不是Google的官方支持产品。

许可证

根据以下任一项许可

任选其一。

贡献

如果您想为项目做出贡献,请参阅我们如何接受贡献的详细信息。


lib.rs:

AArch64上的Arm通用中断控制器版本3或4的驱动程序

此顶级模块包含不特定于任何特定中断控制器的函数,因为可能在未来添加对其他GIC版本的支持。

示例

use arm_gic::{
    gicv3::{GicV3, IntId, SgiTarget},
    irq_enable,
};

// Base addresses of the GICv3 distributor and redistributor.
const GICD_BASE_ADDRESS: *mut u64 = 0x800_0000 as _;
const GICR_BASE_ADDRESS: *mut u64 = 0x80A_0000 as _;

// Initialise the GIC.
let mut gic = unsafe { GicV3::new(GICD_BASE_ADDRESS, GICR_BASE_ADDRESS) };
gic.setup();

// Configure an SGI and then send it to ourself.
let sgi_intid = IntId::sgi(3);
GicV3::set_priority_mask(0xff);
gic.set_interrupt_priority(sgi_intid, 0x80);
gic.enable_interrupt(sgi_intid, true);
irq_enable();
GicV3::send_sgi(
    sgi_intid,
    SgiTarget::List {
        affinity3: 0,
        affinity2: 0,
        affinity1: 0,
        target_list: 0b1,
    },
);

依赖项

~110KB