2个不稳定版本
使用旧的Rust 2015
0.2.0 | 2018年5月14日 |
---|---|
0.1.0 | 2018年5月12日 |
#116 in #board
34 每月下载量
19KB
222 行
Rust的sx1509驱动程序
此模块实现了sx1509的驱动程序,sx1509是一个可通过I2C寻址的IO扩展设备。它针对以下板子实现: https://www.sparkfun.com/products/13601
许可证
根据以下之一许可:
- Apache许可证,版本2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
根据您的选择。
贡献
除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交以包含在作品中的任何贡献,均应按照上述方式双许可,不附加任何额外条款或条件。
lib.rs
:
一个基于[sx1509]的平台无关Rust驱动程序,基于embedded-hal
特性。
设备
[sx1509]是一个GPIO扩展器,还提供LED驱动和键盘扫描功能。该设备有两个8GPIO引脚的银行。
支持的功能
截至编写时,支持非常基础:您可以通过操作一个银行来重置设备并配置基本的GPIO功能。
未来
API设计有一些有趣的选项;例如,将GPIO引脚作为实现embedded-hal
的GPIO特性的实例公开,这样就可以将其用于与其他驱动程序进行接口。
通过将引脚/银行移动到不同的模式,键盘和LED驱动程序功能有一些类型安全的API设计潜力。
需要找到一种既经济又方便的方式来表达这些API。
目前我们只有一种相当简单的传递方式!
用法
将此crate导入为embedded_hal
实现
extern crate metro_m0 as hal;
extern crate sx1509;
初始化I2C总线(不同hal实现之间的差异)
let mut i2c = hal::I2CMaster3::new(
&clocks,
400.khz(),
peripherals.SERCOM3,
&mut peripherals.PM,
&mut peripherals.GCLK,
// Metro M0 express has I2C on pins PA22, PA23
Sercom3Pad0::Pa22(pins.pa22.into_function_c(&mut pins.port)),
Sercom3Pad1::Pa23(pins.pa23.into_function_c(&mut pins.port)),
);
然后实例化驱动程序
let mut expander = sx1509::Sx1509::new(&mut i2c, sx1509::DEFAULT_ADDRESS);
expander.borrow(&mut i2c).software_reset()?;
expander.borrow(&mut i2c).set_bank_a_direction(0)?;
// read the pins from bank a
let pins = expander.borrow(&mut i2c).get_bank_a_data()?;
请注意,您必须在每次操作的持续时间内借用i2c总线。这允许总线在操作之间共享并用于寻址其他设备。
可以长时间拥有总线的控制权。这是基于Future
的使用所必需的。虽然目前不支持基于Future
的使用,但我们确实支持这种操作模式
let mut owned = expander.take(i2c);
// Now you can borrow and perform the IO when you are ready:
let pins = owned.borrow().get_bank_a_data()?;
// and relinquish the bus when done
let (expander, i2c) = owned.release();
依赖项
~71KB