nrf: port to chiptool-based nrf-pac.
This commit is contained in:
@@ -86,6 +86,11 @@ name = "gpiote"
|
||||
path = "src/bin/gpiote.rs"
|
||||
required-features = []
|
||||
|
||||
[[bin]]
|
||||
name = "spim"
|
||||
path = "src/bin/spim.rs"
|
||||
required-features = [ "easydma",]
|
||||
|
||||
[[bin]]
|
||||
name = "timer"
|
||||
path = "src/bin/timer.rs"
|
||||
|
||||
@@ -50,15 +50,15 @@ async fn main(_spawner: Spawner) {
|
||||
const NSPAM: usize = 17;
|
||||
static mut TX_BUF: [u8; NSPAM] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
|
||||
let _spam = UarteTx::new(peri!(p, UART1), irqs!(UART1), peri!(p, PIN_A), config.clone());
|
||||
let spam_peri: pac::UARTE1 = unsafe { mem::transmute(()) };
|
||||
let event = unsafe { Event::new_unchecked(NonNull::new_unchecked(&spam_peri.events_endtx as *const _ as _)) };
|
||||
let task = unsafe { Task::new_unchecked(NonNull::new_unchecked(&spam_peri.tasks_starttx as *const _ as _)) };
|
||||
let spam_peri = pac::UARTE1;
|
||||
let event = unsafe { Event::new_unchecked(NonNull::new_unchecked(spam_peri.events_endtx().as_ptr())) };
|
||||
let task = unsafe { Task::new_unchecked(NonNull::new_unchecked(spam_peri.tasks_starttx().as_ptr())) };
|
||||
let mut spam_ppi = Ppi::new_one_to_one(p.PPI_CH2, event, task);
|
||||
spam_ppi.enable();
|
||||
let p = (&raw mut TX_BUF) as *mut u8;
|
||||
spam_peri.txd.ptr.write(|w| unsafe { w.ptr().bits(p as u32) });
|
||||
spam_peri.txd.maxcnt.write(|w| unsafe { w.maxcnt().bits(NSPAM as _) });
|
||||
spam_peri.tasks_starttx.write(|w| unsafe { w.bits(1) });
|
||||
spam_peri.txd().ptr().write_value(p as u32);
|
||||
spam_peri.txd().maxcnt().write(|w| w.set_maxcnt(NSPAM as _));
|
||||
spam_peri.tasks_starttx().write_value(1);
|
||||
|
||||
let mut i = 0;
|
||||
let mut total = 0;
|
||||
|
||||
@@ -17,10 +17,12 @@ async fn main(_spawner: Spawner) {
|
||||
let mut output = Output::new(peri!(p, PIN_B), Level::Low, OutputDrive::Standard);
|
||||
|
||||
output.set_low();
|
||||
assert!(output.is_set_low());
|
||||
Timer::after_millis(10).await;
|
||||
assert!(input.is_low());
|
||||
|
||||
output.set_high();
|
||||
assert!(output.is_set_high());
|
||||
Timer::after_millis(10).await;
|
||||
assert!(input.is_high());
|
||||
|
||||
|
||||
42
tests/nrf/src/bin/spim.rs
Normal file
42
tests/nrf/src/bin/spim.rs
Normal file
@@ -0,0 +1,42 @@
|
||||
// required-features: easydma
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
#[path = "../common.rs"]
|
||||
mod common;
|
||||
|
||||
use defmt::{assert_eq, *};
|
||||
use embassy_executor::Spawner;
|
||||
use embassy_nrf::spim::Spim;
|
||||
use embassy_nrf::{peripherals, spim};
|
||||
use {defmt_rtt as _, panic_probe as _};
|
||||
|
||||
#[embassy_executor::main]
|
||||
async fn main(_spawner: Spawner) {
|
||||
let mut p = embassy_nrf::init(Default::default());
|
||||
let mut config = spim::Config::default();
|
||||
config.frequency = spim::Frequency::M1;
|
||||
let mut spim = Spim::new(
|
||||
&mut peri!(p, SPIM0),
|
||||
irqs!(SPIM0),
|
||||
&mut peri!(p, PIN_X),
|
||||
&mut peri!(p, PIN_A), // MISO
|
||||
&mut peri!(p, PIN_B), // MOSI
|
||||
config.clone(),
|
||||
);
|
||||
let data = [
|
||||
0x42, 0x43, 0x44, 0x45, 0x66, 0x12, 0x23, 0x34, 0x45, 0x19, 0x91, 0xaa, 0xff, 0xa5, 0x5a, 0x77,
|
||||
];
|
||||
let mut buf = [0u8; 16];
|
||||
|
||||
buf.fill(0);
|
||||
spim.blocking_transfer(&mut buf, &data).unwrap();
|
||||
assert_eq!(data, buf);
|
||||
|
||||
buf.fill(0);
|
||||
spim.transfer(&mut buf, &data).await.unwrap();
|
||||
assert_eq!(data, buf);
|
||||
|
||||
info!("Test OK");
|
||||
cortex_m::asm::bkpt();
|
||||
}
|
||||
@@ -52,51 +52,66 @@ define_peris!(PIN_A = P0_13, PIN_B = P0_14,);
|
||||
#[cfg(feature = "nrf52832")]
|
||||
define_peris!(
|
||||
PIN_A = P0_11, PIN_B = P0_12,
|
||||
PIN_X = P0_13,
|
||||
UART0 = UARTE0,
|
||||
SPIM0 = TWISPI0,
|
||||
@irq UART0 = {UARTE0_UART0 => uarte::InterruptHandler<peripherals::UARTE0>;},
|
||||
@irq UART0_BUFFERED = {UARTE0_UART0 => buffered_uarte::InterruptHandler<peripherals::UARTE0>;},
|
||||
@irq SPIM0 = {SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 => spim::InterruptHandler<peripherals::TWISPI0>;},
|
||||
);
|
||||
|
||||
#[cfg(feature = "nrf52833")]
|
||||
define_peris!(
|
||||
PIN_A = P1_01, PIN_B = P1_02,
|
||||
PIN_X = P1_03,
|
||||
UART0 = UARTE0,
|
||||
UART1 = UARTE1,
|
||||
SPIM0 = TWISPI0,
|
||||
@irq UART0 = {UARTE0_UART0 => uarte::InterruptHandler<peripherals::UARTE0>;},
|
||||
@irq UART1 = {UARTE1 => uarte::InterruptHandler<peripherals::UARTE1>;},
|
||||
@irq UART0_BUFFERED = {UARTE0_UART0 => buffered_uarte::InterruptHandler<peripherals::UARTE0>;},
|
||||
@irq UART1_BUFFERED = {UARTE1 => buffered_uarte::InterruptHandler<peripherals::UARTE1>;},
|
||||
@irq SPIM0 = {SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 => spim::InterruptHandler<peripherals::TWISPI0>;},
|
||||
);
|
||||
|
||||
#[cfg(feature = "nrf52840")]
|
||||
define_peris!(
|
||||
PIN_A = P1_02, PIN_B = P1_03,
|
||||
PIN_X = P1_04,
|
||||
UART0 = UARTE0,
|
||||
UART1 = UARTE1,
|
||||
SPIM0 = TWISPI0,
|
||||
@irq UART0 = {UARTE0_UART0 => uarte::InterruptHandler<peripherals::UARTE0>;},
|
||||
@irq UART1 = {UARTE1 => uarte::InterruptHandler<peripherals::UARTE1>;},
|
||||
@irq UART0_BUFFERED = {UARTE0_UART0 => buffered_uarte::InterruptHandler<peripherals::UARTE0>;},
|
||||
@irq UART1_BUFFERED = {UARTE1 => buffered_uarte::InterruptHandler<peripherals::UARTE1>;},
|
||||
@irq SPIM0 = {SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 => spim::InterruptHandler<peripherals::TWISPI0>;},
|
||||
);
|
||||
|
||||
#[cfg(feature = "nrf5340")]
|
||||
define_peris!(
|
||||
PIN_A = P1_08, PIN_B = P1_09,
|
||||
PIN_X = P1_10,
|
||||
UART0 = SERIAL0,
|
||||
UART1 = SERIAL1,
|
||||
SPIM0 = SERIAL0,
|
||||
@irq UART0 = {SERIAL0 => uarte::InterruptHandler<peripherals::SERIAL0>;},
|
||||
@irq UART1 = {SERIAL1 => uarte::InterruptHandler<peripherals::SERIAL1>;},
|
||||
@irq UART0_BUFFERED = {SERIAL0 => buffered_uarte::InterruptHandler<peripherals::SERIAL0>;},
|
||||
@irq UART1_BUFFERED = {SERIAL1 => buffered_uarte::InterruptHandler<peripherals::SERIAL1>;},
|
||||
@irq SPIM0 = {SERIAL0 => spim::InterruptHandler<peripherals::SERIAL0>;},
|
||||
);
|
||||
|
||||
#[cfg(feature = "nrf9160")]
|
||||
define_peris!(
|
||||
PIN_A = P0_00, PIN_B = P0_01,
|
||||
PIN_X = P0_02,
|
||||
UART0 = SERIAL0,
|
||||
UART1 = SERIAL1,
|
||||
SPIM0 = SERIAL0,
|
||||
@irq UART0 = {UARTE0_SPIM0_SPIS0_TWIM0_TWIS0 => uarte::InterruptHandler<peripherals::SERIAL0>;},
|
||||
@irq UART1 = {UARTE1_SPIM1_SPIS1_TWIM1_TWIS1 => uarte::InterruptHandler<peripherals::SERIAL1>;},
|
||||
@irq UART0_BUFFERED = {UARTE0_SPIM0_SPIS0_TWIM0_TWIS0 => buffered_uarte::InterruptHandler<peripherals::SERIAL0>;},
|
||||
@irq UART1_BUFFERED = {UARTE1_SPIM1_SPIS1_TWIM1_TWIS1 => buffered_uarte::InterruptHandler<peripherals::SERIAL1>;},
|
||||
@irq SPIM0 = {UARTE0_SPIM0_SPIS0_TWIM0_TWIS0 => spim::InterruptHandler<peripherals::SERIAL0>;},
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user