From 86a6d386d22d5bdd6144b95532e5de3bcff3c357 Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Sun, 9 Jul 2023 16:12:11 -0400 Subject: [PATCH 1/6] Set up raspberry pi cross-compile tools --- .cargo/config.toml | 4 ++++ flake.nix | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 .cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..a4455de --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,4 @@ +[target.arm-unknown-linux-gnueabihf] +linker = "armv6l-unknown-linux-gnueabihf-gcc" +# rustflags = ["-C", "link-arg=-Wl,-dynamic-linker,/lib/ld-linux-armhf.so.3"] + diff --git a/flake.nix b/flake.nix index 1eab404..addb95a 100644 --- a/flake.nix +++ b/flake.nix @@ -19,6 +19,10 @@ pkgs = import nixpkgs { system = "x86_64-linux"; }; pkgs-unstable = import unstable { system = "x86_64-linux"; }; cargo2nix = pkgs-cargo2nix.packages."x86_64-linux"; + armPkgs = import nixpkgs { + system = "x86_64-linux"; + crossSystem = pkgs.lib.systems.examples.raspberryPi; + }; in pkgs.mkShell { name = "ld-tools-devshell"; -- 2.44.1 From 7e3ee9a5b77d1eafb4a1602de360046babfd1854 Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Sun, 5 Nov 2023 15:51:32 -0500 Subject: [PATCH 2/6] Set up a blink application for the raspberry pi pico --- flake.nix | 19 +- pico-blink/.cargo/config | 12 ++ pico-blink/Cargo.lock | 413 +++++++++++++++++++++++++++++++++++++++ pico-blink/Cargo.toml | 13 ++ pico-blink/memory.x | 36 ++++ pico-blink/src/main.rs | 47 +++++ rust-toolchain | 4 +- 7 files changed, 533 insertions(+), 11 deletions(-) create mode 100644 pico-blink/.cargo/config create mode 100644 pico-blink/Cargo.lock create mode 100644 pico-blink/Cargo.toml create mode 100644 pico-blink/memory.x create mode 100644 pico-blink/src/main.rs diff --git a/flake.nix b/flake.nix index addb95a..e98c08b 100644 --- a/flake.nix +++ b/flake.nix @@ -19,16 +19,17 @@ pkgs = import nixpkgs { system = "x86_64-linux"; }; pkgs-unstable = import unstable { system = "x86_64-linux"; }; cargo2nix = pkgs-cargo2nix.packages."x86_64-linux"; - armPkgs = import nixpkgs { - system = "x86_64-linux"; - crossSystem = pkgs.lib.systems.examples.raspberryPi; - }; + # armPkgs = import nixpkgs { + # system = "x86_64-linux"; + # crossSystem = pkgs.lib.systems.examples.raspberryPi; + # }; in pkgs.mkShell { name = "ld-tools-devshell"; buildInputs = [ - pkgs.libadwaita + pkgs.cargo-nextest pkgs.clang + pkgs.crate2nix pkgs.entr pkgs.glade pkgs.glib @@ -38,16 +39,16 @@ pkgs.gst_all_1.gst-plugins-ugly pkgs.gst_all_1.gstreamer pkgs.gtk4 + pkgs.libadwaita pkgs.nodejs pkgs.openssl pkgs.pipewire pkgs.pkg-config - pkgs.sqlite pkgs.rustup - pkgs.cargo-nextest - pkgs.crate2nix - pkgs.wasm-pack + pkgs.sqlite pkgs.sqlx-cli + pkgs.udev + pkgs.wasm-pack typeshare.packages."x86_64-linux".default ]; LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib"; diff --git a/pico-blink/.cargo/config b/pico-blink/.cargo/config new file mode 100644 index 0000000..ef4d7f1 --- /dev/null +++ b/pico-blink/.cargo/config @@ -0,0 +1,12 @@ +[build] +target = "thumbv6m-none-eabi" + +[target.thumbv6m-none-eabi] +rustflags = [ + "-C", "link-arg=--nmagic", + "-C", "link-arg=-Tlink.x", + "-C", "inline-threshold=5", + "-C", "no-vectorize-loops", +] + +runner = "elf2uf2-rs -d" diff --git a/pico-blink/Cargo.lock b/pico-blink/Cargo.lock new file mode 100644 index 0000000..c6ad1dd --- /dev/null +++ b/pico-blink/Cargo.lock @@ -0,0 +1,413 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "bare-metal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3" +dependencies = [ + "rustc_version", +] + +[[package]] +name = "bitfield" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719" + +[[package]] +name = "cortex-m" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9" +dependencies = [ + "bare-metal", + "bitfield", + "embedded-hal", + "volatile-register", +] + +[[package]] +name = "cortex-m-rt" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee84e813d593101b1723e13ec38b6ab6abbdbaaa4546553f5395ed274079ddb1" +dependencies = [ + "cortex-m-rt-macros", +] + +[[package]] +name = "cortex-m-rt-macros" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f6f3e36f203cfedbc78b357fb28730aa2c6dc1ab060ee5c2405e843988d3c7" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "crc-any" +version = "2.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "774646b687f63643eb0f4bf13dc263cb581c8c9e57973b6ddf78bda3994d88df" +dependencies = [ + "debug-helper", +] + +[[package]] +name = "critical-section" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" + +[[package]] +name = "debug-helper" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e" + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "embedded-dma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "994f7e5b5cb23521c22304927195f236813053eb9c065dd2226a32ba64695446" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "embedded-hal" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" +dependencies = [ + "nb 0.1.3", + "void", +] + +[[package]] +name = "frunk" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11a351b59e12f97b4176ee78497dff72e4276fb1ceb13e19056aca7fa0206287" +dependencies = [ + "frunk_core", + "frunk_derives", +] + +[[package]] +name = "frunk_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af2469fab0bd07e64ccf0ad57a1438f63160c69b2e57f04a439653d68eb558d6" + +[[package]] +name = "frunk_derives" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fa992f1656e1707946bbba340ad244f0814009ef8c0118eb7b658395f19a2e" +dependencies = [ + "frunk_proc_macro_helpers", + "quote", + "syn 2.0.38", +] + +[[package]] +name = "frunk_proc_macro_helpers" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35b54add839292b743aeda6ebedbd8b11e93404f902c56223e51b9ec18a13d2c" +dependencies = [ + "frunk_core", + "proc-macro2", + "quote", + "syn 2.0.38", +] + +[[package]] +name = "fugit" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17186ad64927d5ac8f02c1e77ccefa08ccd9eaa314d5a4772278aa204a22f7e7" +dependencies = [ + "gcd", +] + +[[package]] +name = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "nb" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" +dependencies = [ + "nb 1.1.0", +] + +[[package]] +name = "nb" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "panic-halt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de96540e0ebde571dc55c73d60ef407c653844e6f9a1e2fdbd40c07b9252d812" + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pico-blink" +version = "0.1.0" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "embedded-hal", + "panic-halt", + "rp-pico", +] + +[[package]] +name = "pio" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76e09694b50f89f302ed531c1f2a7569f0be5867aee4ab4f8f729bbeec0078e3" +dependencies = [ + "arrayvec", + "num_enum", + "paste", +] + +[[package]] +name = "proc-macro2" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "rp-pico" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6341771e6f8e5d130b2b3cbc23435b7847761adf198af09f4b2a60407d43bd56" +dependencies = [ + "cortex-m-rt", + "fugit", + "rp2040-boot2", + "rp2040-hal", + "usb-device", +] + +[[package]] +name = "rp2040-boot2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c92f344f63f950ee36cf4080050e4dce850839b9175da38f9d2ffb69b4dbb21" +dependencies = [ + "crc-any", +] + +[[package]] +name = "rp2040-hal" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ec610f738b69100fbe75f3b835501b669d41c889ac9a62ef284f8e6d1f17385" +dependencies = [ + "cortex-m", + "critical-section", + "embedded-dma", + "embedded-hal", + "frunk", + "fugit", + "itertools", + "nb 1.1.0", + "paste", + "pio", + "rand_core", + "rp2040-hal-macros", + "rp2040-pac", + "usb-device", + "vcell", + "void", +] + +[[package]] +name = "rp2040-hal-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86479063e497efe1ae81995ef9071f54fd1c7427e04d6c5b84cde545ff672a5e" +dependencies = [ + "cortex-m-rt", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rp2040-pac" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12d9d8375815f543f54835d01160d4e47f9e2cae75f17ff8f1ec19ce1da96e4c" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "critical-section", + "vcell", +] + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "usb-device" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f6cc3adc849b5292b4075fc0d5fdcf2f24866e88e336dd27a8943090a520508" + +[[package]] +name = "vcell" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "volatile-register" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de437e2a6208b014ab52972a27e59b33fa2920d3e00fe05026167a1c509d19cc" +dependencies = [ + "vcell", +] diff --git a/pico-blink/Cargo.toml b/pico-blink/Cargo.toml new file mode 100644 index 0000000..6c761ef --- /dev/null +++ b/pico-blink/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "pico-blink" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +cortex-m = "0.7.7" +cortex-m-rt = "0.7.3" +embedded-hal = "0.2.7" +panic-halt = "0.2.0" +rp-pico = "0.8.0" diff --git a/pico-blink/memory.x b/pico-blink/memory.x new file mode 100644 index 0000000..e6b80c4 --- /dev/null +++ b/pico-blink/memory.x @@ -0,0 +1,36 @@ +MEMORY { + BOOT2 : ORIGIN = 0x10000000, LENGTH = 0x100 + FLASH : ORIGIN = 0x10000100, LENGTH = 2048K - 0x100 + /* + * RAM consists of 4 banks, SRAM0-SRAM3, with a striped mapping. + * This is usually good for performance, as it distributes load on + * those banks evenly. + */ + RAM : ORIGIN = 0x20000000, LENGTH = 256K + /* + * RAM banks 4 and 5 use a direct mapping. They can be used to have + * memory areas dedicated for some specific job, improving predictability + * of access times. + * Example: Separate stacks for core0 and core1. + */ + SRAM4 : ORIGIN = 0x20040000, LENGTH = 4k + SRAM5 : ORIGIN = 0x20041000, LENGTH = 4k + + /* SRAM banks 0-3 can also be accessed directly. However, those ranges + alias with the RAM mapping, above. So don't use them at the same time! + SRAM0 : ORIGIN = 0x21000000, LENGTH = 64k + SRAM1 : ORIGIN = 0x21010000, LENGTH = 64k + SRAM2 : ORIGIN = 0x21020000, LENGTH = 64k + SRAM3 : ORIGIN = 0x21030000, LENGTH = 64k + */ +} + +EXTERN(BOOT2_FIRMWARE) + +SECTIONS { + /* ### Boot loader */ + .boot2 ORIGIN(BOOT2) : + { + KEEP(*(.boot2)); + } > BOOT2 +} INSERT BEFORE .text; diff --git a/pico-blink/src/main.rs b/pico-blink/src/main.rs new file mode 100644 index 0000000..6ca2229 --- /dev/null +++ b/pico-blink/src/main.rs @@ -0,0 +1,47 @@ +#![no_main] +#![no_std] + +use rp_pico::entry; +use panic_halt as _; +use embedded_hal::digital::v2::OutputPin; +use rp_pico::{hal, hal::{clocks, pac, watchdog::Watchdog, clocks::{Clock, init_clocks_and_plls}}}; + +#[entry] +fn main() -> ! { + let mut pac = pac::Peripherals::take().unwrap(); + let core = pac::CorePeripherals::take().unwrap(); + let sio = hal::Sio::new(pac.SIO); + let mut watchdog = Watchdog::new(pac.WATCHDOG); + + let pins = rp_pico::Pins::new( + pac.IO_BANK0, + pac.PADS_BANK0, + sio.gpio_bank0, + &mut pac.RESETS, + ); + + let external_xtal_freq_hz = 12_000_000u32; + let clocks = init_clocks_and_plls( + external_xtal_freq_hz, + pac.XOSC, + pac.CLOCKS, + pac.PLL_SYS, + pac.PLL_USB, + &mut pac.RESETS, + &mut watchdog, + ).ok().unwrap(); + + let mut delay = cortex_m::delay::Delay::new(core.SYST, clocks.system_clock.freq().to_Hz()); + + let mut led_pin = pins.led.into_push_pull_output(); + let mut blue_pin = pins.gpio3.into_push_pull_output(); + led_pin.set_high().unwrap(); + loop { + led_pin.set_high().unwrap(); + blue_pin.set_low().unwrap(); + delay.delay_ms(500); + led_pin.set_low().unwrap(); + blue_pin.set_high().unwrap(); + delay.delay_ms(500); + } +} diff --git a/rust-toolchain b/rust-toolchain index 18fbce2..fe75ed3 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1,3 +1,3 @@ [toolchain] -channel = "1.71.1" -targets = [ "wasm32-unknown-unknown" ] +channel = "1.73.0" +targets = [ "wasm32-unknown-unknown", "thumbv6-none-eabi" ] -- 2.44.1 From 168ba6eb401b53513ef979b794861559934b88c5 Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Thu, 9 Nov 2023 22:24:37 -0500 Subject: [PATCH 3/6] Try controlling dotstars through SPI and through bit-banging --- Cargo.lock | 353 +++++++++++++++++++++++++++++++- Cargo.toml | 1 + pico-blink/memory.x => memory.x | 0 pico-blink/Cargo.toml | 1 + pico-blink/src/main.rs | 128 +++++++++++- 5 files changed, 475 insertions(+), 8 deletions(-) rename pico-blink/memory.x => memory.x (100%) diff --git a/Cargo.lock b/Cargo.lock index 4d963ce..75465e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -119,6 +119,12 @@ version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + [[package]] name = "atoi" version = "2.0.0" @@ -158,6 +164,15 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "bare-metal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3" +dependencies = [ + "rustc_version 0.2.3", +] + [[package]] name = "base64" version = "0.9.3" @@ -201,6 +216,12 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" +[[package]] +name = "bitfield" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719" + [[package]] name = "bitflags" version = "1.3.2" @@ -480,6 +501,38 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +[[package]] +name = "cortex-m" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9" +dependencies = [ + "bare-metal", + "bitfield", + "embedded-hal", + "volatile-register", +] + +[[package]] +name = "cortex-m-rt" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee84e813d593101b1723e13ec38b6ab6abbdbaaa4546553f5395ed274079ddb1" +dependencies = [ + "cortex-m-rt-macros", +] + +[[package]] +name = "cortex-m-rt-macros" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f6f3e36f203cfedbc78b357fb28730aa2c6dc1ab060ee5c2405e843988d3c7" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "cpufeatures" version = "0.2.9" @@ -498,6 +551,15 @@ dependencies = [ "crc-catalog", ] +[[package]] +name = "crc-any" +version = "2.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "774646b687f63643eb0f4bf13dc263cb581c8c9e57973b6ddf78bda3994d88df" +dependencies = [ + "debug-helper", +] + [[package]] name = "crc-catalog" version = "2.2.0" @@ -513,6 +575,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "critical-section" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" + [[package]] name = "crossbeam-deque" version = "0.8.3" @@ -615,6 +683,12 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +[[package]] +name = "debug-helper" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e" + [[package]] name = "deflate" version = "0.8.6" @@ -692,6 +766,25 @@ dependencies = [ "serde 1.0.188", ] +[[package]] +name = "embedded-dma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "994f7e5b5cb23521c22304927195f236813053eb9c065dd2226a32ba64695446" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "embedded-hal" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" +dependencies = [ + "nb 0.1.3", + "void", +] + [[package]] name = "emseries" version = "0.6.0" @@ -811,7 +904,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ "memoffset", - "rustc_version", + "rustc_version 0.4.0", ] [[package]] @@ -956,12 +1049,60 @@ dependencies = [ "percent-encoding 2.3.0", ] +[[package]] +name = "frunk" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11a351b59e12f97b4176ee78497dff72e4276fb1ceb13e19056aca7fa0206287" +dependencies = [ + "frunk_core", + "frunk_derives", +] + +[[package]] +name = "frunk_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af2469fab0bd07e64ccf0ad57a1438f63160c69b2e57f04a439653d68eb558d6" + +[[package]] +name = "frunk_derives" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fa992f1656e1707946bbba340ad244f0814009ef8c0118eb7b658395f19a2e" +dependencies = [ + "frunk_proc_macro_helpers", + "quote", + "syn 2.0.37", +] + +[[package]] +name = "frunk_proc_macro_helpers" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35b54add839292b743aeda6ebedbd8b11e93404f902c56223e51b9ec18a13d2c" +dependencies = [ + "frunk_core", + "proc-macro2", + "quote", + "syn 2.0.37", +] + [[package]] name = "fuchsia-cprng" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +[[package]] +name = "fugit" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17186ad64927d5ac8f02c1e77ccefa08ccd9eaa314d5a4772278aa204a22f7e7" +dependencies = [ + "gcd", +] + [[package]] name = "futures" version = "0.3.28" @@ -1062,6 +1203,12 @@ dependencies = [ "slab", ] +[[package]] +name = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + [[package]] name = "gdk-pixbuf" version = "0.17.10" @@ -1923,6 +2070,15 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.11.0" @@ -2284,6 +2440,21 @@ dependencies = [ "tempfile", ] +[[package]] +name = "nb" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" +dependencies = [ + "nb 1.1.0", +] + +[[package]] +name = "nb" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" + [[package]] name = "no-std-compat" version = "0.4.1" @@ -2388,6 +2559,26 @@ dependencies = [ "libc", ] +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "object" version = "0.32.1" @@ -2498,6 +2689,12 @@ dependencies = [ "system-deps", ] +[[package]] +name = "panic-halt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de96540e0ebde571dc55c73d60ef407c653844e6f9a1e2fdbd40c07b9252d812" + [[package]] name = "parking_lot" version = "0.12.1" @@ -2634,6 +2831,18 @@ dependencies = [ "siphasher 0.3.11", ] +[[package]] +name = "pico-blink" +version = "0.1.0" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "embedded-hal", + "fugit", + "panic-halt", + "rp-pico", +] + [[package]] name = "pin-project" version = "1.1.3" @@ -2666,6 +2875,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pio" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76e09694b50f89f302ed531c1f2a7569f0be5867aee4ab4f8f729bbeec0078e3" +dependencies = [ + "arrayvec", + "num_enum", + "paste", +] + [[package]] name = "pkcs1" version = "0.7.5" @@ -3119,6 +3339,76 @@ dependencies = [ "thiserror", ] +[[package]] +name = "rp-pico" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6341771e6f8e5d130b2b3cbc23435b7847761adf198af09f4b2a60407d43bd56" +dependencies = [ + "cortex-m-rt", + "fugit", + "rp2040-boot2", + "rp2040-hal", + "usb-device", +] + +[[package]] +name = "rp2040-boot2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c92f344f63f950ee36cf4080050e4dce850839b9175da38f9d2ffb69b4dbb21" +dependencies = [ + "crc-any", +] + +[[package]] +name = "rp2040-hal" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ec610f738b69100fbe75f3b835501b669d41c889ac9a62ef284f8e6d1f17385" +dependencies = [ + "cortex-m", + "critical-section", + "embedded-dma", + "embedded-hal", + "frunk", + "fugit", + "itertools 0.10.5", + "nb 1.1.0", + "paste", + "pio", + "rand_core 0.6.4", + "rp2040-hal-macros", + "rp2040-pac", + "usb-device", + "vcell", + "void", +] + +[[package]] +name = "rp2040-hal-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86479063e497efe1ae81995ef9071f54fd1c7427e04d6c5b84cde545ff672a5e" +dependencies = [ + "cortex-m-rt", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rp2040-pac" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12d9d8375815f543f54835d01160d4e47f9e2cae75f17ff8f1ec19ce1da96e4c" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "critical-section", + "vcell", +] + [[package]] name = "rsa" version = "0.9.2" @@ -3153,13 +3443,22 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + [[package]] name = "rustc_version" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver", + "semver 1.0.19", ] [[package]] @@ -3271,12 +3570,27 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ef965a420fe14fdac7dd018862966a4c14094f900e1650bbc71ddd7d580c8af" +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + [[package]] name = "semver" version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + [[package]] name = "serde" version = "0.9.15" @@ -3472,7 +3786,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b7b278788e7be4d0d29c0f39497a0eef3fba6bbc8e70d8bf7fde46edeaa9e85" dependencies = [ - "itertools", + "itertools 0.11.0", "nom", "unicode_categories", ] @@ -3671,6 +3985,12 @@ dependencies = [ "url 2.4.1", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "stringprep" version = "0.1.4" @@ -4247,6 +4567,12 @@ dependencies = [ "percent-encoding 2.3.0", ] +[[package]] +name = "usb-device" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f6cc3adc849b5292b4075fc0d5fdcf2f24866e88e336dd27a8943090a520508" + [[package]] name = "utf-8" version = "0.7.6" @@ -4288,6 +4614,12 @@ dependencies = [ "getrandom", ] +[[package]] +name = "vcell" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002" + [[package]] name = "vcpkg" version = "0.2.15" @@ -4312,6 +4644,21 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "volatile-register" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de437e2a6208b014ab52972a27e59b33fa2920d3e00fe05026167a1c509d19cc" +dependencies = [ + "vcell", +] + [[package]] name = "wait-timeout" version = "0.2.0" diff --git a/Cargo.toml b/Cargo.toml index 80b71cc..0df76ec 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,7 @@ members = [ "kifu/gtk", "memorycache", "nom-training", + "pico-blink", "result-extended", "screenplay", "sgf", diff --git a/pico-blink/memory.x b/memory.x similarity index 100% rename from pico-blink/memory.x rename to memory.x diff --git a/pico-blink/Cargo.toml b/pico-blink/Cargo.toml index 6c761ef..2c00817 100644 --- a/pico-blink/Cargo.toml +++ b/pico-blink/Cargo.toml @@ -9,5 +9,6 @@ edition = "2021" cortex-m = "0.7.7" cortex-m-rt = "0.7.3" embedded-hal = "0.2.7" +fugit = "0.3.7" panic-halt = "0.2.0" rp-pico = "0.8.0" diff --git a/pico-blink/src/main.rs b/pico-blink/src/main.rs index 6ca2229..cbe3672 100644 --- a/pico-blink/src/main.rs +++ b/pico-blink/src/main.rs @@ -1,10 +1,95 @@ #![no_main] #![no_std] -use rp_pico::entry; -use panic_halt as _; +use embedded_hal::blocking::spi::Write; use embedded_hal::digital::v2::OutputPin; -use rp_pico::{hal, hal::{clocks, pac, watchdog::Watchdog, clocks::{Clock, init_clocks_and_plls}}}; +use fugit::RateExtU32; +use panic_halt as _; +use rp_pico::entry; +use rp_pico::hal::gpio::{FunctionSio, PinId, PullType, SioOutput}; +use rp_pico::{ + hal, + hal::prelude::*, + hal::{ + clocks::{init_clocks_and_plls, Clock}, + gpio::Pin, + pac, + spi::Spi, + watchdog::Watchdog, + }, +}; + +fn send_byte( + data: &mut Pin, P>, + clock: &mut Pin, P>, + delay: &mut cortex_m::delay::Delay, + byte: u8, +) where + I: PinId, + J: PinId, + P: PullType, +{ + (0..7).for_each(|bit| { + if byte & (1 << (7 - bit)) > 0 { + data.set_high(); + } else { + data.set_low(); + } + clock.set_high(); + delay.delay_us(100); + clock.set_low(); + delay.delay_us(100); + }); + clock.set_low(); +} + +fn send_start( + data: &mut Pin, P>, + clock: &mut Pin, P>, + delay: &mut cortex_m::delay::Delay, +) where + I: PinId, + J: PinId, + P: PullType, +{ + send_byte(data, clock, delay, 0); + send_byte(data, clock, delay, 0); + send_byte(data, clock, delay, 0); + send_byte(data, clock, delay, 0); +} + +fn send_term( + data: &mut Pin, P>, + clock: &mut Pin, P>, + delay: &mut cortex_m::delay::Delay, +) where + I: PinId, + J: PinId, + P: PullType, +{ + send_byte(data, clock, delay, 0xff); + send_byte(data, clock, delay, 0xff); + send_byte(data, clock, delay, 0xff); + send_byte(data, clock, delay, 0xff); +} + +fn send( + data: &mut Pin, P>, + clock: &mut Pin, P>, + delay: &mut cortex_m::delay::Delay, + values: &[u8], +) where + I: PinId, + J: PinId, + P: PullType, +{ + send_start(data, clock, delay); + for val in values { + send_byte(data, clock, delay, *val); + } + send_term(data, clock, delay); + clock.set_low(); +} #[entry] fn main() -> ! { @@ -18,7 +103,7 @@ fn main() -> ! { pac.PADS_BANK0, sio.gpio_bank0, &mut pac.RESETS, - ); + ); let external_xtal_freq_hz = 12_000_000u32; let clocks = init_clocks_and_plls( @@ -29,14 +114,47 @@ fn main() -> ! { pac.PLL_USB, &mut pac.RESETS, &mut watchdog, - ).ok().unwrap(); + ) + .ok() + .unwrap(); let mut delay = cortex_m::delay::Delay::new(core.SYST, clocks.system_clock.freq().to_Hz()); + let mut spi_clk = pins.gpio10.into_push_pull_output(); + let mut spi_sdo = pins.gpio11.into_push_pull_output(); + + /* + let spi = Spi::<_, _, _, 8>::new(pac.SPI1, (spi_sdo, spi_clk)); + let mut spi = spi.init( + &mut pac.RESETS, + clocks.peripheral_clock.freq(), + 1.MHz(), + embedded_hal::spi::MODE_0, + ); + */ + let mut led_pin = pins.led.into_push_pull_output(); let mut blue_pin = pins.gpio3.into_push_pull_output(); led_pin.set_high().unwrap(); + spi_clk.set_low(); + spi_sdo.set_low(); loop { + send( + &mut spi_sdo, + &mut spi_clk, + &mut delay, + &[ + 0, 0, 0, 0, 0xf0, 0x80, 0x0, 0x0, 0xe1, 0x0, 0x80, 0x0, 0xe1, 0x0, 0x0, 0x80, 0xff, + 0xff, 0xff, 0xff, + ], + ); + /* + spi.write(&[ + 0, 0, 0, 0, 0xf0, 0x80, 0x0, 0x0, 0xe1, 0x0, 0x80, 0x0, 0xe1, 0x0, 0x0, 0x80, 0xff, + 0xff, 0xff, 0xff, + ]); + */ + led_pin.set_high().unwrap(); blue_pin.set_low().unwrap(); delay.delay_ms(500); -- 2.44.1 From c46ab1b389d41092422e9b7bb159e3a72605afb2 Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Mon, 13 Nov 2023 18:21:07 -0500 Subject: [PATCH 4/6] Tweak the bit-banging code to get the protocol right --- pico-blink/src/main.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pico-blink/src/main.rs b/pico-blink/src/main.rs index cbe3672..57ff34a 100644 --- a/pico-blink/src/main.rs +++ b/pico-blink/src/main.rs @@ -29,8 +29,8 @@ fn send_byte( J: PinId, P: PullType, { - (0..7).for_each(|bit| { - if byte & (1 << (7 - bit)) > 0 { + (0..8).for_each(|bit| { + if byte & (1 << (8 - bit)) > 0 { data.set_high(); } else { data.set_low(); @@ -144,10 +144,13 @@ fn main() -> ! { &mut spi_clk, &mut delay, &[ - 0, 0, 0, 0, 0xf0, 0x80, 0x0, 0x0, 0xe1, 0x0, 0x80, 0x0, 0xe1, 0x0, 0x0, 0x80, 0xff, - 0xff, 0xff, 0xff, + 0xe1, 0x80, 0x00, 0x00, + 0xe1, 0x00, 0x80, 0x00, + 0xe1, 0x00, 0x00, 0x80, ], ); + spi_clk.set_low(); + spi_sdo.set_low(); /* spi.write(&[ 0, 0, 0, 0, 0xf0, 0x80, 0x0, 0x0, 0xe1, 0x0, 0x80, 0x0, 0xe1, 0x0, 0x0, 0x80, 0xff, -- 2.44.1 From 6d14cdbe2a45be1ab2331b082caf50a526b0e831 Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Tue, 14 Nov 2023 08:04:31 -0500 Subject: [PATCH 5/6] Build a color test pattern. --- pico-blink/src/main.rs | 104 +++++++++++++++++++++++++++++++++++------ 1 file changed, 91 insertions(+), 13 deletions(-) diff --git a/pico-blink/src/main.rs b/pico-blink/src/main.rs index 57ff34a..e857ac9 100644 --- a/pico-blink/src/main.rs +++ b/pico-blink/src/main.rs @@ -120,49 +120,127 @@ fn main() -> ! { let mut delay = cortex_m::delay::Delay::new(core.SYST, clocks.system_clock.freq().to_Hz()); - let mut spi_clk = pins.gpio10.into_push_pull_output(); - let mut spi_sdo = pins.gpio11.into_push_pull_output(); - /* + let mut spi_clk = pins.gpio10.into_function(); + let mut spi_sdo = pins.gpio11.into_function(); let spi = Spi::<_, _, _, 8>::new(pac.SPI1, (spi_sdo, spi_clk)); let mut spi = spi.init( &mut pac.RESETS, clocks.peripheral_clock.freq(), 1.MHz(), - embedded_hal::spi::MODE_0, + embedded_hal::spi::MODE_1, ); */ let mut led_pin = pins.led.into_push_pull_output(); let mut blue_pin = pins.gpio3.into_push_pull_output(); led_pin.set_high().unwrap(); + delay.delay_ms(500); + led_pin.set_low().unwrap(); + + let mut spi_clk = pins.gpio10.into_push_pull_output(); + let mut spi_sdo = pins.gpio11.into_push_pull_output(); spi_clk.set_low(); spi_sdo.set_low(); + + let bits_1 = &[ + 0, 0, 0, 0, + 0xe1, 0x80, 0x00, 0x00, + 0xe1, 0x00, 0x80, 0x00, + 0xe1, 0x00, 0x00, 0x80, + 0xe1, 0x80, 0x00, 0x00, + 0xe1, 0x00, 0x80, 0x00, + 0xe1, 0x00, 0x00, 0x80, + 0xe1, 0x80, 0x00, 0x00, + 0xe1, 0x00, 0x80, 0x00, + 0xe1, 0x00, 0x00, 0x80, + 0xe1, 0x80, 0x00, 0x00, + 0xe1, 0x00, 0x80, 0x00, + 0xe1, 0x00, 0x00, 0x80, + 0xff, 0xff, 0xff, 0xff, + ]; + let bits_2 = &[ + 0, 0, 0, 0, + 0xe1, 0x00, 0x80, 0x00, + 0xe1, 0x00, 0x00, 0x80, + 0xe1, 0x80, 0x00, 0x00, + 0xe1, 0x00, 0x80, 0x00, + 0xe1, 0x00, 0x00, 0x80, + 0xe1, 0x80, 0x00, 0x00, + 0xe1, 0x00, 0x80, 0x00, + 0xe1, 0x00, 0x00, 0x80, + 0xe1, 0x80, 0x00, 0x00, + 0xe1, 0x00, 0x80, 0x00, + 0xe1, 0x00, 0x00, 0x80, + 0xe1, 0x80, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, + ]; + let bits_3 = &[ + 0, 0, 0, 0, + 0xe1, 0x00, 0x00, 0x80, + 0xe1, 0x80, 0x00, 0x00, + 0xe1, 0x00, 0x80, 0x00, + 0xe1, 0x00, 0x00, 0x80, + 0xe1, 0x80, 0x00, 0x00, + 0xe1, 0x00, 0x80, 0x00, + 0xe1, 0x00, 0x00, 0x80, + 0xe1, 0x80, 0x00, 0x00, + 0xe1, 0x00, 0x80, 0x00, + 0xe1, 0x00, 0x00, 0x80, + 0xe1, 0x80, 0x00, 0x00, + 0xe1, 0x00, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, + ]; + + let a = 15 / 2; + loop { send( &mut spi_sdo, &mut spi_clk, &mut delay, - &[ - 0xe1, 0x80, 0x00, 0x00, - 0xe1, 0x00, 0x80, 0x00, - 0xe1, 0x00, 0x00, 0x80, - ], + bits_1, ); spi_clk.set_low(); spi_sdo.set_low(); + delay.delay_ms(500); + + send( + &mut spi_sdo, + &mut spi_clk, + &mut delay, + bits_2, + ); + spi_clk.set_low(); + spi_sdo.set_low(); + delay.delay_ms(500); + + send( + &mut spi_sdo, + &mut spi_clk, + &mut delay, + bits_3, + ); + spi_clk.set_low(); + spi_sdo.set_low(); + delay.delay_ms(500); + /* - spi.write(&[ - 0, 0, 0, 0, 0xf0, 0x80, 0x0, 0x0, 0xe1, 0x0, 0x80, 0x0, 0xe1, 0x0, 0x0, 0x80, 0xff, - 0xff, 0xff, 0xff, - ]); + spi.write(bits_1); + delay.delay_ms(500); + spi.write(bits_2); + delay.delay_ms(500); + spi.write(bits_3); + delay.delay_ms(500); */ + /* led_pin.set_high().unwrap(); blue_pin.set_low().unwrap(); delay.delay_ms(500); led_pin.set_low().unwrap(); blue_pin.set_high().unwrap(); delay.delay_ms(500); + */ } } -- 2.44.1 From 3310c460ba65935928b911f157e213ed3b2a0524 Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Tue, 14 Nov 2023 08:27:13 -0500 Subject: [PATCH 6/6] Cleanups --- .cargo/config.toml | 4 ---- Cargo.toml | 1 + flake.nix | 4 ---- rust-toolchain | 2 +- 4 files changed, 2 insertions(+), 9 deletions(-) delete mode 100644 .cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml deleted file mode 100644 index a4455de..0000000 --- a/.cargo/config.toml +++ /dev/null @@ -1,4 +0,0 @@ -[target.arm-unknown-linux-gnueabihf] -linker = "armv6l-unknown-linux-gnueabihf-gcc" -# rustflags = ["-C", "link-arg=-Wl,-dynamic-linker,/lib/ld-linux-armhf.so.3"] - diff --git a/Cargo.toml b/Cargo.toml index 0df76ec..6c07497 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,5 @@ [workspace] +resolver = "2" members = [ "changeset", "config", diff --git a/flake.nix b/flake.nix index e98c08b..bac9d63 100644 --- a/flake.nix +++ b/flake.nix @@ -19,10 +19,6 @@ pkgs = import nixpkgs { system = "x86_64-linux"; }; pkgs-unstable = import unstable { system = "x86_64-linux"; }; cargo2nix = pkgs-cargo2nix.packages."x86_64-linux"; - # armPkgs = import nixpkgs { - # system = "x86_64-linux"; - # crossSystem = pkgs.lib.systems.examples.raspberryPi; - # }; in pkgs.mkShell { name = "ld-tools-devshell"; diff --git a/rust-toolchain b/rust-toolchain index fe75ed3..3e044fb 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1,3 +1,3 @@ [toolchain] channel = "1.73.0" -targets = [ "wasm32-unknown-unknown", "thumbv6-none-eabi" ] +targets = [ "wasm32-unknown-unknown" ] -- 2.44.1