Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Ubuntu22LTSでRust言語をやる その6:embeded halで外部インターフェースをつかう

実際のところ

toml

[package]
name = "teensy_led_blink"
version = "0.1.0"
edition = "2021"

[dependencies]
cortex-m = "0.7" #Teensy4.0のCortexの低レイヤ実装をする方法
cortex-m-rt = "0.7" #Teensy4.0の起動時のあれこれ。メモリ初期化とか
embedded-hal = "0.2.7" #抽象レイヤー。今回はimxrt-halが実態実装
imxrt-hal = "0.5" #Teensy4.0のプロセッサに特化したHAL実装
teensy4-panic = "0.2" #Teensy4.0のエラーハンドラ

スクリプト

#![no_std]
#![no_main]

use teensy4_panic as _;  // パニックハンドラ
use cortex_m_rt::entry;
use imxrt_hal as hal;
use embedded_hal::digital::v2::OutputPin;

#[entry]
fn main() -> ! {
    // ペリフェラルの取得
    let mut peripherals = hal::Peripherals::take().unwrap();

    // LED (PIN13) の設定
    let mut led = peripherals
        .iomuxc
        .gpio_ad_b0
        .p13
        .configure(&mut peripherals.iomuxc.gpr)
        .as_gpio();
    
    // GPIOを出力モードに設定
    led.set_fast(true);
    led.set_output();

    loop {
        // LED点灯
        led.set_high().unwrap();
        // 遅延
        cortex_m::asm::delay(30_000_000); // 約0.5秒

        // LED消灯
        led.set_low().unwrap();
        // 遅延
        cortex_m::asm::delay(30_000_000); // 約0.5秒
    }
}

Teensy4.0は600MHzで動作しているので、それの30,000,000サイクル=0.5秒。
もっとも、処理時間はすっ飛ばしてるので厳密に0.5秒じゃないのですが

参考もと

Learn Rust - Rust Programming Language
cortex_m_rt - Rust