diff options
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/nrf54l15/src/bin/spim.rs | 70 |
1 files changed, 14 insertions, 56 deletions
diff --git a/examples/nrf54l15/src/bin/spim.rs b/examples/nrf54l15/src/bin/spim.rs index 0520bf08c..3f5980647 100644 --- a/examples/nrf54l15/src/bin/spim.rs +++ b/examples/nrf54l15/src/bin/spim.rs | |||
| @@ -1,9 +1,7 @@ | |||
| 1 | #![no_std] | 1 | #![no_std] |
| 2 | #![no_main] | 2 | #![no_main] |
| 3 | 3 | ||
| 4 | use defmt::{info, unwrap}; | ||
| 5 | use embassy_executor::Spawner; | 4 | use embassy_executor::Spawner; |
| 6 | use embassy_nrf::gpio::{Level, Output, OutputDrive}; | ||
| 7 | use embassy_nrf::{bind_interrupts, peripherals, spim}; | 5 | use embassy_nrf::{bind_interrupts, peripherals, spim}; |
| 8 | use {defmt_rtt as _, panic_probe as _}; | 6 | use {defmt_rtt as _, panic_probe as _}; |
| 9 | 7 | ||
| @@ -14,59 +12,19 @@ bind_interrupts!(struct Irqs { | |||
| 14 | #[embassy_executor::main] | 12 | #[embassy_executor::main] |
| 15 | async fn main(_spawner: Spawner) { | 13 | async fn main(_spawner: Spawner) { |
| 16 | let p = embassy_nrf::init(Default::default()); | 14 | let p = embassy_nrf::init(Default::default()); |
| 17 | info!("running!"); | ||
| 18 | |||
| 19 | let mut config = spim::Config::default(); | 15 | let mut config = spim::Config::default(); |
| 20 | config.frequency = spim::Frequency::M16; | 16 | config.frequency = spim::Frequency::M32; |
| 21 | 17 | let mut spim = spim::Spim::new(p.SERIAL00, Irqs, p.P2_05, p.P2_09, p.P2_08, config.clone()); | |
| 22 | let mut spim = spim::Spim::new(p.SERIAL00, Irqs, p.P0_01, p.P0_00, p.P0_02, config); | 18 | let data = [ |
| 23 | 19 | 0x42, 0x43, 0x44, 0x45, 0x66, 0x12, 0x23, 0x34, 0x45, 0x19, 0x91, 0xaa, 0xff, 0xa5, 0x5a, 0x77, | |
| 24 | // Example on how to talk to an ADXL343 | 20 | ]; |
| 25 | 21 | let mut buf = [0u8; 16]; | |
| 26 | let mut ncs = Output::new(p.P0_03, Level::High, OutputDrive::Standard); | 22 | |
| 27 | 23 | buf.fill(0); | |
| 28 | // Example on how to talk to an ENC28J60 chip | 24 | spim.blocking_transfer(&mut buf, &data).unwrap(); |
| 29 | 25 | assert_eq!(data, buf); | |
| 30 | // softreset | 26 | |
| 31 | cortex_m::asm::delay(10); | 27 | buf.fill(0); |
| 32 | ncs.set_low(); | 28 | spim.transfer(&mut buf, &data).await.unwrap(); |
| 33 | cortex_m::asm::delay(5); | 29 | assert_eq!(data, buf); |
| 34 | let tx = [0xFF]; | ||
| 35 | unwrap!(spim.transfer(&mut [], &tx).await); | ||
| 36 | cortex_m::asm::delay(10); | ||
| 37 | ncs.set_high(); | ||
| 38 | |||
| 39 | cortex_m::asm::delay(100000); | ||
| 40 | |||
| 41 | let mut rx = [0; 2]; | ||
| 42 | |||
| 43 | // read ESTAT | ||
| 44 | cortex_m::asm::delay(5000); | ||
| 45 | ncs.set_low(); | ||
| 46 | cortex_m::asm::delay(5000); | ||
| 47 | let tx = [0b000_11101, 0]; | ||
| 48 | unwrap!(spim.transfer(&mut rx, &tx).await); | ||
| 49 | cortex_m::asm::delay(5000); | ||
| 50 | ncs.set_high(); | ||
| 51 | info!("estat: {=[?]}", rx); | ||
| 52 | |||
| 53 | // Switch to bank 3 | ||
| 54 | cortex_m::asm::delay(10); | ||
| 55 | ncs.set_low(); | ||
| 56 | cortex_m::asm::delay(5); | ||
| 57 | let tx = [0b100_11111, 0b11]; | ||
| 58 | unwrap!(spim.transfer(&mut rx, &tx).await); | ||
| 59 | cortex_m::asm::delay(10); | ||
| 60 | ncs.set_high(); | ||
| 61 | |||
| 62 | // read EREVID | ||
| 63 | cortex_m::asm::delay(10); | ||
| 64 | ncs.set_low(); | ||
| 65 | cortex_m::asm::delay(5); | ||
| 66 | let tx = [0b000_10010, 0]; | ||
| 67 | unwrap!(spim.transfer(&mut rx, &tx).await); | ||
| 68 | cortex_m::asm::delay(10); | ||
| 69 | ncs.set_high(); | ||
| 70 | |||
| 71 | info!("erevid: {=[?]}", rx); | ||
| 72 | } | 30 | } |
