#interrupt #kernel #controller #no-std

no-std pic8259

8259和8259A中断控制器的抽象

6个版本

0.11.0 2024年3月11日
0.10.4 2023年4月13日
0.10.3 2023年3月9日
0.10.2 2021年8月22日
0.10.1 2021年5月17日

#94硬件支持

Download history 960/week @ 2024-04-04 1155/week @ 2024-04-11 1135/week @ 2024-04-18 1204/week @ 2024-04-25 1073/week @ 2024-05-02 1137/week @ 2024-05-09 1115/week @ 2024-05-16 1121/week @ 2024-05-23 1255/week @ 2024-05-30 1001/week @ 2024-06-06 992/week @ 2024-06-13 1048/week @ 2024-06-20 945/week @ 2024-06-27 584/week @ 2024-07-04 898/week @ 2024-07-11 965/week @ 2024-07-18

3,550 每月下载量
10 个crates中使用 (8 个直接使用)

Apache-2.0/MIT

12KB
91

pic_8259

8259和8259A可编程中断控制器(PICs)的抽象。

本项目是基于pic8259_simple crate的分支,由@emk创建。

我们可能还处理不好的事情包括

  1. 处理假中断。
  2. 非标准配置。

此代码基于OSDev Wiki PIC notes,但不是它们讨论的完整实现。另外请注意,如果您想进行更复杂的中断处理,尤其是在多处理器系统上,您可能需要了解较新的APICIOAPIC接口。

使用

这是8259和8259A中断控制器的一个非常基础的接口,这些控制器用于单处理器系统,用于将硬件中断传递到CPU。

要使用此crate,将其添加到您的Cargo.toml文件中,同时添加适当的内核空间互斥锁实现,如spin

[dependencies]
pic8259 = "0.10.0"
spin = "0.9.0"

然后您可以声明一个全局、可锁定的ChainedPics对象,如下所示


use pic8259::ChainedPics;
use spin::Mutex;

// Map PIC interrupts to 0x20 through 0x2f.
static PICS: Mutex<ChainedPics> =
    Mutex::new(unsafe { ChainedPics::new(0x20, 0x28) });

在启用中断之前,调用initialize以执行运行时PIC初始化

PICS.lock().initialize();

在处理完中断后,运行

PICS.lock().notify_end_of_interrupt(interrupt_id);

在每次中断后调用notify_end_of_interrupt是安全的;notify_end_of_interrupt函数将尝试确定需要做什么。

所有公共PIC接口都是unsafe,因为通过错误配置PIC或错误使用它,很容易触发未定义的行为。

crate功能标志

  • nightly - 使用仅在nightly Rust上可用的功能。默认启用。
  • stable - 启用此功能标志以在稳定版Rust上构建此crate。您需要在您的Cargo.toml中添加default-features = false, features = ["stable"]

许可证

根据您的选择,受Apache许可证第2版MIT许可证的许可。

依赖项

约565KB
约11K SLoC