diff options
| author | Gerzain Mata <[email protected]> | 2025-07-23 00:53:10 -0700 |
|---|---|---|
| committer | Gerzain Mata <[email protected]> | 2025-07-23 00:53:10 -0700 |
| commit | e2cec28805a66fa913fcdc3af2de07b95b06aa0d (patch) | |
| tree | 1ea685cd96ceef15a7b0f2975a55495598c0e5ef /examples/mimxrt1062-evk/src | |
| parent | a80eb48e67d486ace9b9a4733f2b54d58a80eb52 (diff) | |
| parent | 8f5e4ac06d1d06dd6520a8eecf8697b199005f34 (diff) | |
Merge branch 'main' into feat/stm32wba-usb-example
Diffstat (limited to 'examples/mimxrt1062-evk/src')
| -rw-r--r-- | examples/mimxrt1062-evk/src/bin/blinky.rs | 25 | ||||
| -rw-r--r-- | examples/mimxrt1062-evk/src/bin/button.rs | 36 | ||||
| -rw-r--r-- | examples/mimxrt1062-evk/src/lib.rs | 60 |
3 files changed, 121 insertions, 0 deletions
diff --git a/examples/mimxrt1062-evk/src/bin/blinky.rs b/examples/mimxrt1062-evk/src/bin/blinky.rs new file mode 100644 index 000000000..b6d90d94d --- /dev/null +++ b/examples/mimxrt1062-evk/src/bin/blinky.rs | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | #![no_std] | ||
| 2 | #![no_main] | ||
| 3 | |||
| 4 | use defmt::info; | ||
| 5 | use embassy_executor::Spawner; | ||
| 6 | use embassy_nxp::gpio::{Level, Output}; | ||
| 7 | use embassy_time::Timer; | ||
| 8 | // Must include `embassy_imxrt1062_evk_examples` to ensure the FCB gets linked. | ||
| 9 | use {defmt_rtt as _, embassy_imxrt1062_evk_examples as _, panic_probe as _}; | ||
| 10 | |||
| 11 | #[embassy_executor::main] | ||
| 12 | async fn main(_spawner: Spawner) -> ! { | ||
| 13 | let p = embassy_nxp::init(Default::default()); | ||
| 14 | info!("Hello world!"); | ||
| 15 | |||
| 16 | let led = p.GPIO_AD_B0_08; | ||
| 17 | let mut led = Output::new(led, Level::Low); | ||
| 18 | |||
| 19 | loop { | ||
| 20 | Timer::after_millis(500).await; | ||
| 21 | |||
| 22 | info!("Toggle"); | ||
| 23 | led.toggle(); | ||
| 24 | } | ||
| 25 | } | ||
diff --git a/examples/mimxrt1062-evk/src/bin/button.rs b/examples/mimxrt1062-evk/src/bin/button.rs new file mode 100644 index 000000000..d60fa3dac --- /dev/null +++ b/examples/mimxrt1062-evk/src/bin/button.rs | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | #![no_std] | ||
| 2 | #![no_main] | ||
| 3 | |||
| 4 | use defmt::info; | ||
| 5 | use embassy_executor::Spawner; | ||
| 6 | use embassy_nxp::gpio::{Input, Level, Output, Pull}; | ||
| 7 | use {defmt_rtt as _, embassy_imxrt1062_evk_examples as _, panic_probe as _}; | ||
| 8 | |||
| 9 | #[embassy_executor::main] | ||
| 10 | async fn main(_spawner: Spawner) -> ! { | ||
| 11 | let p = embassy_nxp::init(Default::default()); | ||
| 12 | info!("Hello world!"); | ||
| 13 | |||
| 14 | // User LED (D8) | ||
| 15 | let led = p.GPIO_AD_B0_08; | ||
| 16 | // User button (SW5) | ||
| 17 | let button = p.WAKEUP; | ||
| 18 | let mut button = Input::new(button, Pull::Up100K); | ||
| 19 | let mut led = Output::new(led, Level::Low); | ||
| 20 | led.set_high(); | ||
| 21 | |||
| 22 | loop { | ||
| 23 | button.wait_for_falling_edge().await; | ||
| 24 | |||
| 25 | info!("Toggled"); | ||
| 26 | led.toggle(); | ||
| 27 | |||
| 28 | // Software debounce. | ||
| 29 | button.wait_for_rising_edge().await; | ||
| 30 | |||
| 31 | // Stabilization. | ||
| 32 | for _ in 0..100_000 { | ||
| 33 | cortex_m::asm::nop(); | ||
| 34 | } | ||
| 35 | } | ||
| 36 | } | ||
diff --git a/examples/mimxrt1062-evk/src/lib.rs b/examples/mimxrt1062-evk/src/lib.rs new file mode 100644 index 000000000..3f99f9db3 --- /dev/null +++ b/examples/mimxrt1062-evk/src/lib.rs | |||
| @@ -0,0 +1,60 @@ | |||
| 1 | //! FlexSPI configuration block (FCB) for the iMXRT1060-EVK | ||
| 2 | //! | ||
| 3 | //! This uses IS25WP QuadSPI flash. | ||
| 4 | |||
| 5 | #![no_std] | ||
| 6 | |||
| 7 | use imxrt_boot_gen::flexspi::opcodes::sdr::*; | ||
| 8 | use imxrt_boot_gen::flexspi::{self, FlashPadType, ReadSampleClockSource, SerialClockFrequency, SerialFlashRegion, *}; | ||
| 9 | use imxrt_boot_gen::serial_flash::*; | ||
| 10 | pub use nor::ConfigurationBlock; | ||
| 11 | |||
| 12 | const SEQ_READ: Sequence = SequenceBuilder::new() | ||
| 13 | .instr(Instr::new(CMD, Pads::One, 0xEB)) | ||
| 14 | .instr(Instr::new(RADDR, Pads::Four, 0x18)) | ||
| 15 | .instr(Instr::new(DUMMY, Pads::Four, 0x06)) | ||
| 16 | .instr(Instr::new(READ, Pads::Four, 0x04)) | ||
| 17 | .build(); | ||
| 18 | const SEQ_READ_STATUS: Sequence = SequenceBuilder::new() | ||
| 19 | .instr(Instr::new(CMD, Pads::One, 0x05)) | ||
| 20 | .instr(Instr::new(READ, Pads::One, 0x04)) | ||
| 21 | .build(); | ||
| 22 | const SEQ_WRITE_ENABLE: Sequence = SequenceBuilder::new().instr(Instr::new(CMD, Pads::One, 0x06)).build(); | ||
| 23 | const SEQ_ERASE_SECTOR: Sequence = SequenceBuilder::new() | ||
| 24 | .instr(Instr::new(CMD, Pads::One, 0x20)) | ||
| 25 | .instr(Instr::new(RADDR, Pads::One, 0x18)) | ||
| 26 | .build(); | ||
| 27 | const SEQ_PAGE_PROGRAM: Sequence = SequenceBuilder::new() | ||
| 28 | .instr(Instr::new(CMD, Pads::One, 0x02)) | ||
| 29 | .instr(Instr::new(RADDR, Pads::One, 0x18)) | ||
| 30 | .instr(Instr::new(WRITE, Pads::One, 0x04)) | ||
| 31 | .build(); | ||
| 32 | const SEQ_CHIP_ERASE: Sequence = SequenceBuilder::new().instr(Instr::new(CMD, Pads::One, 0x60)).build(); | ||
| 33 | |||
| 34 | const LUT: LookupTable = LookupTable::new() | ||
| 35 | .command(Command::Read, SEQ_READ) | ||
| 36 | .command(Command::ReadStatus, SEQ_READ_STATUS) | ||
| 37 | .command(Command::WriteEnable, SEQ_WRITE_ENABLE) | ||
| 38 | .command(Command::EraseSector, SEQ_ERASE_SECTOR) | ||
| 39 | .command(Command::PageProgram, SEQ_PAGE_PROGRAM) | ||
| 40 | .command(Command::ChipErase, SEQ_CHIP_ERASE); | ||
| 41 | |||
| 42 | const COMMON_CONFIGURATION_BLOCK: flexspi::ConfigurationBlock = flexspi::ConfigurationBlock::new(LUT) | ||
| 43 | .version(Version::new(1, 4, 0)) | ||
| 44 | .read_sample_clk_src(ReadSampleClockSource::LoopbackFromDQSPad) | ||
| 45 | .cs_hold_time(3) | ||
| 46 | .cs_setup_time(3) | ||
| 47 | .controller_misc_options(0x10) | ||
| 48 | .serial_flash_pad_type(FlashPadType::Quad) | ||
| 49 | .serial_clk_freq(SerialClockFrequency::MHz133) | ||
| 50 | .flash_size(SerialFlashRegion::A1, 8 * 1024 * 1024); | ||
| 51 | |||
| 52 | pub const SERIAL_NOR_CONFIGURATION_BLOCK: nor::ConfigurationBlock = | ||
| 53 | nor::ConfigurationBlock::new(COMMON_CONFIGURATION_BLOCK) | ||
| 54 | .page_size(256) | ||
| 55 | .sector_size(4096) | ||
| 56 | .ip_cmd_serial_clk_freq(nor::SerialClockFrequency::MHz30); | ||
| 57 | |||
| 58 | #[no_mangle] | ||
| 59 | #[cfg_attr(all(target_arch = "arm", target_os = "none"), link_section = ".fcb")] | ||
| 60 | pub static FLEXSPI_CONFIGURATION_BLOCK: nor::ConfigurationBlock = SERIAL_NOR_CONFIGURATION_BLOCK; | ||
