2个不稳定版本

0.2.0 2019年7月6日
0.1.0 2019年7月4日

#32 in #microcontrollers

MIT 许可证

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