12个不稳定版本 (5个破坏性更改)
0.6.2 | 2024年7月7日 |
---|---|
0.5.1 | 2024年7月7日 |
0.5.0 | 2024年2月19日 |
0.4.1 | 2023年12月25日 |
0.2.1 | 2021年4月26日 |
#86 in 嵌入式开发
每月487次下载
用于 2 crates
130KB
3K SLoC
端口扩展器
这是一个提供I²C端口扩展器通用抽象的crate。这种抽象不一定是最高效的,但它允许像直接GPIO一样使用引脚。因为引脚类型还实现了embedded-hal
数字IO特质,它们也可以传递给下游的进一步驱动程序(例如作为复位或芯片选择引脚)。
示例
// Initialize I2C peripheral from HAL
let i2c = todo!();
// A0: HIGH, A1: LOW, A2: LOW
let mut pca9555 = port_expander::Pca9555::new(i2c, true, false, false);
let pca_pins = pca9555.split();
let io0_0 = pca_pins.io0_0.into_output().unwrap();
let io1_5 = pca_pins.io0_1; // default is input
io0_0.set_high().unwrap();
assert!(io1_5.is_high().unwrap());
同时访问多个引脚
有时时序约束要求同时进行多个引脚访问(读取或写入)。为此设计了write_multiple()
和read_multiple()
方法。
支持的设备
以下列表是端口扩展器
目前支持的设备。如果您需要支持其他设备,应该很容易添加。最好以类似现有的实现为灵感。欢迎贡献!
非局部共享
端口扩展器
使用自定义特质来抽象不同类型的互斥锁:PortMutex
。这意味着您也可以在提供适当的互斥锁类型的情况下,在任务/线程边界之间共享引脚。
// Initialize I2C peripheral from HAL
let i2c = todo!();
// A0: HIGH, A1: LOW, A2: LOW
let mut pca9555: port_expander::Pca9555<std::sync::Mutex<_>> =
port_expander::Pca9555::with_mutex(i2c, true, false, false);
let pca_pins = pca9555.split();
许可证
许可协议为以下之一
- Apache许可证版本2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- 麻省理工学院许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献,将按照上述方式双重许可,不附加任何额外条款或条件。
依赖项
~64KB