From 938be013365a9151557b9c4c133d61e697b3a5cc Mon Sep 17 00:00:00 2001 From: Friedrich Beckmann Date: Sun, 1 Jun 2025 15:45:33 +0200 Subject: moved project to blinky --- .cargo/config.toml | 40 ----------------- Cargo.toml | 11 ----- blinky/.cargo/config.toml | 40 +++++++++++++++++ blinky/Cargo.toml | 11 +++++ blinky/memory.x | 15 +++++++ blinky/src/main.rs | 112 ++++++++++++++++++++++++++++++++++++++++++++++ memory.x | 15 ------- src/main.rs | 112 ---------------------------------------------- 8 files changed, 178 insertions(+), 178 deletions(-) delete mode 100644 .cargo/config.toml delete mode 100644 Cargo.toml create mode 100644 blinky/.cargo/config.toml create mode 100644 blinky/Cargo.toml create mode 100644 blinky/memory.x create mode 100644 blinky/src/main.rs delete mode 100644 memory.x delete mode 100644 src/main.rs diff --git a/.cargo/config.toml b/.cargo/config.toml deleted file mode 100644 index 5234c74..0000000 --- a/.cargo/config.toml +++ /dev/null @@ -1,40 +0,0 @@ -# -# Cargo Configuration for the https://github.com/rp-rs/rp-hal.git repository. -# -# Copyright (c) The RP-RS Developers, 2021 -# -# You might want to make a similar file in your own repository if you are -# writing programs for Raspberry Silicon microcontrollers. -# -# This file is MIT or Apache-2.0 as per the repository README.md file -# - -[build] -# Set the default target to match the Cortex-M0+ in the RP2040 -target = "thumbv6m-none-eabi" - -# Target specific options -[target.thumbv6m-none-eabi] -# Pass some extra options to rustc, some of which get passed on to the linker. -# -# * linker argument --nmagic turns off page alignment of sections (which saves -# flash space) -# * linker argument -Tlink.x tells the linker to use link.x as the linker -# script. This is usually provided by the cortex-m-rt crate, and by default -# the version in that crate will include a file called `memory.x` which -# describes the particular memory layout for your specific chip. -# * no-vectorize-loops turns off the loop vectorizer (seeing as the M0+ doesn't -# have SIMD) -rustflags = [ - "-C", "link-arg=--nmagic", - "-C", "link-arg=-Tlink.x", - "-C", "no-vectorize-loops", -] - -# This runner will make a UF2 file and then copy it to a mounted RP2040 in USB -# Bootloader mode: -runner = "elf2uf2-rs -d" - -# This runner will find a supported SWD debug probe and flash your RP2040 over -# SWD: -# runner = "probe-rs run --chip RP2040" \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml deleted file mode 100644 index 6ea7014..0000000 --- a/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "picofirst" -version = "0.1.0" -edition = "2024" - -[dependencies] -cortex-m = "0.7.7" -cortex-m-rt = "0.7.5" -embedded-hal = "1.0.0" -panic-halt = "1.0.0" -rp-pico = "0.9.0" diff --git a/blinky/.cargo/config.toml b/blinky/.cargo/config.toml new file mode 100644 index 0000000..5234c74 --- /dev/null +++ b/blinky/.cargo/config.toml @@ -0,0 +1,40 @@ +# +# Cargo Configuration for the https://github.com/rp-rs/rp-hal.git repository. +# +# Copyright (c) The RP-RS Developers, 2021 +# +# You might want to make a similar file in your own repository if you are +# writing programs for Raspberry Silicon microcontrollers. +# +# This file is MIT or Apache-2.0 as per the repository README.md file +# + +[build] +# Set the default target to match the Cortex-M0+ in the RP2040 +target = "thumbv6m-none-eabi" + +# Target specific options +[target.thumbv6m-none-eabi] +# Pass some extra options to rustc, some of which get passed on to the linker. +# +# * linker argument --nmagic turns off page alignment of sections (which saves +# flash space) +# * linker argument -Tlink.x tells the linker to use link.x as the linker +# script. This is usually provided by the cortex-m-rt crate, and by default +# the version in that crate will include a file called `memory.x` which +# describes the particular memory layout for your specific chip. +# * no-vectorize-loops turns off the loop vectorizer (seeing as the M0+ doesn't +# have SIMD) +rustflags = [ + "-C", "link-arg=--nmagic", + "-C", "link-arg=-Tlink.x", + "-C", "no-vectorize-loops", +] + +# This runner will make a UF2 file and then copy it to a mounted RP2040 in USB +# Bootloader mode: +runner = "elf2uf2-rs -d" + +# This runner will find a supported SWD debug probe and flash your RP2040 over +# SWD: +# runner = "probe-rs run --chip RP2040" \ No newline at end of file diff --git a/blinky/Cargo.toml b/blinky/Cargo.toml new file mode 100644 index 0000000..6ea7014 --- /dev/null +++ b/blinky/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "picofirst" +version = "0.1.0" +edition = "2024" + +[dependencies] +cortex-m = "0.7.7" +cortex-m-rt = "0.7.5" +embedded-hal = "1.0.0" +panic-halt = "1.0.0" +rp-pico = "0.9.0" diff --git a/blinky/memory.x b/blinky/memory.x new file mode 100644 index 0000000..070eac7 --- /dev/null +++ b/blinky/memory.x @@ -0,0 +1,15 @@ +MEMORY { + BOOT2 : ORIGIN = 0x10000000, LENGTH = 0x100 + FLASH : ORIGIN = 0x10000100, LENGTH = 2048K - 0x100 + RAM : ORIGIN = 0x20000000, LENGTH = 256K +} + +EXTERN(BOOT2_FIRMWARE) + +SECTIONS { + /* ### Boot loader */ + .boot2 ORIGIN(BOOT2) : + { + KEEP(*(.boot2)); + } > BOOT2 +} INSERT BEFORE .text; \ No newline at end of file diff --git a/blinky/src/main.rs b/blinky/src/main.rs new file mode 100644 index 0000000..c027b11 --- /dev/null +++ b/blinky/src/main.rs @@ -0,0 +1,112 @@ +//! # Pico Blinky Example +//! +//! Blinks the LED on a Pico board. +//! +//! This will blink an LED attached to GP25, which is the pin the Pico uses for +//! the on-board LED. +//! +//! See the `Cargo.toml` file for Copyright and license details. + +#![no_std] +#![no_main] + +// The macro for our start-up function +use rp_pico::entry; + +// GPIO traits +use embedded_hal::digital::OutputPin; + +// Ensure we halt the program on panic (if we don't mention this crate it won't +// be linked) +use panic_halt as _; + +// Pull in any important traits +use rp_pico::hal::prelude::*; + +// A shorter alias for the Peripheral Access Crate, which provides low-level +// register access +use rp_pico::hal::pac; + +// A shorter alias for the Hardware Abstraction Layer, which provides +// higher-level drivers. +use rp_pico::hal; + +fn is_prime (a : u64) -> bool { + if a % 2 == 0 {return false}; + for i in (3..a.isqrt()).step_by(2) { + if a % i == 0 { + return false; + } + } + return true; +} + +fn find_next_smaller_prime(mut x : u64) -> u64 { + if x <= 1 {return x}; + if x % 2 == 0 {x=x-1}; + while !is_prime(x) {x = x - 2}; + return x; +} + +/// Entry point to our bare-metal application. +/// +/// The `#[entry]` macro ensures the Cortex-M start-up code calls this function +/// as soon as all global variables are initialised. +/// +/// The function configures the RP2040 peripherals, then blinks the LED in an +/// infinite loop. +#[entry] +fn main() -> ! { + // Grab our singleton objects + let mut pac = pac::Peripherals::take().unwrap(); + let core = pac::CorePeripherals::take().unwrap(); + + // Set up the watchdog driver - needed by the clock setup code + let mut watchdog = hal::Watchdog::new(pac.WATCHDOG); + + // Configure the clocks + // + // The default is to generate a 125 MHz system clock + let clocks = hal::clocks::init_clocks_and_plls( + rp_pico::XOSC_CRYSTAL_FREQ, + pac.XOSC, + pac.CLOCKS, + pac.PLL_SYS, + pac.PLL_USB, + &mut pac.RESETS, + &mut watchdog, + ) + .ok() + .unwrap(); + + // The delay object lets us wait for specified amounts of time (in + // milliseconds) + let mut delay = cortex_m::delay::Delay::new(core.SYST, clocks.system_clock.freq().to_Hz()); + + // The single-cycle I/O block controls our GPIO pins + let sio = hal::Sio::new(pac.SIO); + + // Set the pins up according to their function on this particular board + let pins = rp_pico::Pins::new( + pac.IO_BANK0, + pac.PADS_BANK0, + sio.gpio_bank0, + &mut pac.RESETS, + ); + + // Set the LED to be an output + let mut led_pin = pins.led.into_push_pull_output(); + + // Blink the LED at 1 Hz + loop { + led_pin.set_high().unwrap(); + delay.delay_ms(500); + if find_next_smaller_prime(1<<36) > 5 { + led_pin.set_high().unwrap(); + } + led_pin.set_low().unwrap(); + delay.delay_ms(500); + } +} + +// End of file \ No newline at end of file diff --git a/memory.x b/memory.x deleted file mode 100644 index 070eac7..0000000 --- a/memory.x +++ /dev/null @@ -1,15 +0,0 @@ -MEMORY { - BOOT2 : ORIGIN = 0x10000000, LENGTH = 0x100 - FLASH : ORIGIN = 0x10000100, LENGTH = 2048K - 0x100 - RAM : ORIGIN = 0x20000000, LENGTH = 256K -} - -EXTERN(BOOT2_FIRMWARE) - -SECTIONS { - /* ### Boot loader */ - .boot2 ORIGIN(BOOT2) : - { - KEEP(*(.boot2)); - } > BOOT2 -} INSERT BEFORE .text; \ No newline at end of file diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index c027b11..0000000 --- a/src/main.rs +++ /dev/null @@ -1,112 +0,0 @@ -//! # Pico Blinky Example -//! -//! Blinks the LED on a Pico board. -//! -//! This will blink an LED attached to GP25, which is the pin the Pico uses for -//! the on-board LED. -//! -//! See the `Cargo.toml` file for Copyright and license details. - -#![no_std] -#![no_main] - -// The macro for our start-up function -use rp_pico::entry; - -// GPIO traits -use embedded_hal::digital::OutputPin; - -// Ensure we halt the program on panic (if we don't mention this crate it won't -// be linked) -use panic_halt as _; - -// Pull in any important traits -use rp_pico::hal::prelude::*; - -// A shorter alias for the Peripheral Access Crate, which provides low-level -// register access -use rp_pico::hal::pac; - -// A shorter alias for the Hardware Abstraction Layer, which provides -// higher-level drivers. -use rp_pico::hal; - -fn is_prime (a : u64) -> bool { - if a % 2 == 0 {return false}; - for i in (3..a.isqrt()).step_by(2) { - if a % i == 0 { - return false; - } - } - return true; -} - -fn find_next_smaller_prime(mut x : u64) -> u64 { - if x <= 1 {return x}; - if x % 2 == 0 {x=x-1}; - while !is_prime(x) {x = x - 2}; - return x; -} - -/// Entry point to our bare-metal application. -/// -/// The `#[entry]` macro ensures the Cortex-M start-up code calls this function -/// as soon as all global variables are initialised. -/// -/// The function configures the RP2040 peripherals, then blinks the LED in an -/// infinite loop. -#[entry] -fn main() -> ! { - // Grab our singleton objects - let mut pac = pac::Peripherals::take().unwrap(); - let core = pac::CorePeripherals::take().unwrap(); - - // Set up the watchdog driver - needed by the clock setup code - let mut watchdog = hal::Watchdog::new(pac.WATCHDOG); - - // Configure the clocks - // - // The default is to generate a 125 MHz system clock - let clocks = hal::clocks::init_clocks_and_plls( - rp_pico::XOSC_CRYSTAL_FREQ, - pac.XOSC, - pac.CLOCKS, - pac.PLL_SYS, - pac.PLL_USB, - &mut pac.RESETS, - &mut watchdog, - ) - .ok() - .unwrap(); - - // The delay object lets us wait for specified amounts of time (in - // milliseconds) - let mut delay = cortex_m::delay::Delay::new(core.SYST, clocks.system_clock.freq().to_Hz()); - - // The single-cycle I/O block controls our GPIO pins - let sio = hal::Sio::new(pac.SIO); - - // Set the pins up according to their function on this particular board - let pins = rp_pico::Pins::new( - pac.IO_BANK0, - pac.PADS_BANK0, - sio.gpio_bank0, - &mut pac.RESETS, - ); - - // Set the LED to be an output - let mut led_pin = pins.led.into_push_pull_output(); - - // Blink the LED at 1 Hz - loop { - led_pin.set_high().unwrap(); - delay.delay_ms(500); - if find_next_smaller_prime(1<<36) > 5 { - led_pin.set_high().unwrap(); - } - led_pin.set_low().unwrap(); - delay.delay_ms(500); - } -} - -// End of file \ No newline at end of file -- cgit v1.2.3