From 9cf9bb05f460a830384c211fa3ed94580de755df Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Sun, 11 Aug 2019 22:12:51 -0400 Subject: WIP: sample code and runner for mdk board. --- ble/.cargo/config | 6 ++++++ ble/.gdbinit | 13 +++++++++++++ ble/Cargo.lock | 31 +++++++++++++++++++++++++++++++ ble/Cargo.toml | 10 +++++++--- ble/openocd.cfg | 2 ++ ble/src/main.rs | 40 ++++++++++++++++++++++++++++++++++++++-- 6 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 ble/.cargo/config create mode 100644 ble/.gdbinit create mode 100644 ble/openocd.cfg diff --git a/ble/.cargo/config b/ble/.cargo/config new file mode 100644 index 0000000..c4ce5ef --- /dev/null +++ b/ble/.cargo/config @@ -0,0 +1,6 @@ +[build] +target = "thumbv7em-none-eabihf" + +[target.thumbv7em-none-eabihf] +rustflags = ["-C", "link-arg=-Tlink.x"] +runner = "gdb-multiarch" diff --git a/ble/.gdbinit b/ble/.gdbinit new file mode 100644 index 0000000..a32f910 --- /dev/null +++ b/ble/.gdbinit @@ -0,0 +1,13 @@ +# print demangled symbols by default +set print asm-demangle on + +# OpenOCD +#set remote hardware-breakpoint-limit 6 +#set remote hardware-watchpoint-limit 4 +#target extended-remote :3333 +target remote :3333 +#monitor flash breakpoints 1 +#monitor semihosting enable +#monitor semihosting IOClient 3 +monitor reset +load diff --git a/ble/Cargo.lock b/ble/Cargo.lock index 1ae5de2..42cc690 100644 --- a/ble/Cargo.lock +++ b/ble/Cargo.lock @@ -39,7 +39,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "ble" version = "0.1.0" dependencies = [ + "cortex-m 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cortex-m-rt 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", + "nb 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "nrf52840-hal 0.8.1", + "nrf52840-mdk-bsp 0.1.0", + "panic-semihosting 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "rubble 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "rubble-nrf52 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -84,6 +89,14 @@ dependencies = [ "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "cortex-m-semihosting" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cortex-m 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "embedded-hal" version = "0.2.3" @@ -142,6 +155,13 @@ dependencies = [ "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "nrf52840-mdk-bsp" +version = "0.1.0" +dependencies = [ + "nrf52840-hal 0.8.1", +] + [[package]] name = "nrf52840-pac" version = "0.8.0" @@ -153,6 +173,15 @@ dependencies = [ "vcell 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "panic-semihosting" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cortex-m 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cortex-m-semihosting 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "proc-macro2" version = "0.4.30" @@ -295,11 +324,13 @@ dependencies = [ "checksum cortex-m 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f3c18719fdc57db65668bfc977db9a0fa1a41d718c5d9cd4f652c9d4b0e0956a" "checksum cortex-m-rt 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "17805910e3ecf029bdbfcc42b7384d9e3d9e5626153fa810002c1ef9839338ac" "checksum cortex-m-rt-macros 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d7ae692573e0acccb1579fef1abf5a5bf1d2f3f0149a22b16870ec9309aee25f" +"checksum cortex-m-semihosting 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "165f3f86f4d1031351a6c9dc8d5a3f8fae2050f9dd6ef925e3d675c232cc0e46" "checksum embedded-hal 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ee4908a155094da7723c2d60d617b820061e3b4efcc3d9e293d206a5a76c170b" "checksum fpa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f074479d683e5a8fd0bf1251d0a5d91b0d9178b867b44962191ed0eaaf8d4009" "checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" "checksum nb 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b1411551beb3c11dedfb0a90a0fa256b47d28b9ec2cdff34c25a2fa59e45dbdc" "checksum nrf52840-pac 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e375b19eec5ae6c75387ea2fff3d5a6f989d65a0af350fcfe854f31243bfdfe2" +"checksum panic-semihosting 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "97cfb37c1d3b5f0cc18bf14485018cccd13bdd24f7b5bfd456c1d8760afef824" "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" "checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" "checksum r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2a38df5b15c8d5c7e8654189744d8e396bddc18ad48041a500ce52d6948941f" diff --git a/ble/Cargo.toml b/ble/Cargo.toml index be54397..ad7b888 100644 --- a/ble/Cargo.toml +++ b/ble/Cargo.toml @@ -4,15 +4,19 @@ version = "0.1.0" authors = ["Brian Cully "] edition = "2018" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] +nrf52840-mdk-bsp = { path = "../../nrf52-hal/boards/nrf52840-mdk" } nrf52840-hal = "0.8" rubble = "0.0" rubble-nrf52 = "0.0" +cortex-m = "~0.6" +cortex-m-rt = "~0.6" +panic-semihosting = "~0.5" +nb = "~0.1" [features] -default = ["rubble-nrf52/52840"] +default = ["rt", "rubble-nrf52/52840"] +rt = ["nrf52840-hal/rt"] [patch.crates-io] nrf52840-hal = { path = "../../nrf52-hal/nrf52840-hal" } diff --git a/ble/openocd.cfg b/ble/openocd.cfg new file mode 100644 index 0000000..1aa6f38 --- /dev/null +++ b/ble/openocd.cfg @@ -0,0 +1,2 @@ +source [find interface/cmsis-dap.cfg] +source [find target/nrf52.cfg] diff --git a/ble/src/main.rs b/ble/src/main.rs index e7a11a9..8b8c513 100644 --- a/ble/src/main.rs +++ b/ble/src/main.rs @@ -1,3 +1,39 @@ -fn main() { - println!("Hello, world!"); +//! BLE interface. +#![no_std] +#![no_main] + +use core::fmt::Write; +use cortex_m_rt::entry; +use nb::block; + +#[allow(unused_imports)] +extern crate panic_semihosting; + +use nrf52840_mdk_bsp::{ + hal::{ + prelude::*, + timer::{self, Timer}, + }, + Board, +}; + +#[entry] +fn main() -> ! { + let mut nrf52 = Board::take().unwrap(); + + let mut timer = Timer::new(nrf52.TIMER0); + + write!(nrf52.cdc, "Bootstrap complete.").ok(); + loop { + write!(nrf52.cdc, ".").ok(); + delay(&mut timer, 1_000_000); // 1s + } +} + +fn delay(timer: &mut Timer, cycles: u32) +where + T: timer::Instance, +{ + timer.start(cycles); + let _ = block!(timer.wait()); } -- cgit v1.2.3