2个不稳定版本
0.2.0 | 2019年7月6日 |
---|---|
0.1.0 | 2019年7月4日 |
#32 in #microcontrollers
77KB
1.5K SLoC
LPC81x 微控制器的中级API和HAL实现。
此库包装了底层的 lpc81x-pac
,以提供一个更人性化的接口来访问LPC81x外设,包括一些 embedded-hal
库的实现,以便这些外设可以用在其他crate中的平台无关的外部设备驱动程序中使用。
注意: 此crate中的接口 不稳定。任何现有的API在后续版本中可能会看到破坏性更改,直到所有外设都获得基本支持,并且直到 embedded-hal
本身足够稳定,可以承诺与其兼容。
在您的应用程序中将它锁定到特定版本,以避免意外破坏。
此库中的核心概念是代表I/O引脚的对象。LPC81x组件包括一个开关矩阵,允许大多数集成外设分配到任何可用引脚,因此此库通过外设对象拥有它们分配的引脚来模拟这种能力。这允许编译时检查确保每个引脚只分配一个输出函数,这是开关矩阵硬件所要求的。
以下示例展示了调用应用程序如何激活SPI0外设,并将GPIO引脚切换到数字输出模式,以便用作片选信号。
// Consume the peripherals singleton. This also consumes the corresponding
// singleton from `lpc81x-pac`, so all peripheral access must be via
// this object alone.
let p = hal::Peripherals::take().unwrap();
// Most of the peripheral APIs require pins as arguments. Unassigned pins
// initially live in p.pins and can be moved out into other devices as
// needed, which automatically configures the switch matrix.
let pins = p.pins;
// Use GPIO pins 12 and 14 as the SCLK and MOSI signals respectively.
// An SCLK pin is always required to activate an SPI peripheral, but
// the other signals can be assigned selectively depending on the needs
// of the application. Must assign at least MOSI or MISO for anything
// useful to happen, though.
let spi = p
.spi0
.activate_as_host(
pins.gpio12,
hal::spi::cfg::Config {
sclk_mode: embedded_hal::spi::MODE_0,
bit_order: hal::spi::cfg::BitOrder::MSBFirst,
},
)
.with_mosi(pins.gpio14);
// GPIO pin 13 will be the chip select signal. Calling to_digital_output
// consumes the unassigned pin and returns an assigned pin that has been
// configured to act as a digital output.
let cs = pins.gpio13.to_digital_output(true);
// Can now pass the "spi" and "cs" objects into any `embedded-hal` device
// driver that works with a SPI interface and a chip select signal.
let dev = any_driver::Driver::new(spi, cs);
crate源代码中的 examples
目录中有更多示例。上述示例是 ssd1322
示例的简化版本。
依赖关系
~8.5MB
~191K SLoC