2个版本
0.1.1 | 2024年8月9日 |
---|---|
0.1.0 | 2023年4月17日 |
在嵌入式开发中排名第1536
每月下载量520
被libhermit-rs使用
27KB
430 行
Arm通用中断控制器驱动程序
本crate提供Arm通用中断控制器版本3或4(GICv3和GICv4)的Rust驱动程序。
目前它仅支持AArch64。欢迎贡献补丁以添加对AArch32和其他GIC版本的支持。
这不是Google的官方支持产品。
许可证
根据以下任一项许可
- Apache许可证版本2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
如果您想为项目做出贡献,请参阅我们如何接受贡献的详细信息。
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