#![recursion_limit = "256"]
#![warn(missing_docs)]
#![no_std]
#[doc(hidden)]
pub use paste;
pub use rp235x_pac as pac;
pub mod adc;
pub mod arch;
#[macro_use]
pub mod async_utils;
pub(crate) mod atomic_register_access;
pub use rp_binary_info as binary_info;
pub mod block;
pub mod clocks;
#[cfg(feature = "critical-section-impl")]
mod critical_section_impl;
#[cfg(all(target_arch = "arm", target_os = "none"))]
pub mod dcp;
pub mod dma;
pub mod gpio;
pub mod hstx;
pub mod i2c;
pub mod lposc;
#[cfg(all(target_arch = "arm", target_os = "none"))]
pub mod multicore;
pub mod otp;
pub mod pio;
pub mod pll;
pub mod powman;
pub mod prelude;
pub mod pwm;
pub mod reboot;
pub mod resets;
pub mod rom_data;
pub mod rosc;
pub mod sio;
pub mod spi;
pub mod timer;
pub mod typelevel;
pub mod uart;
pub mod usb;
pub mod vector_table;
pub mod watchdog;
pub mod xh3irq;
pub mod xosc;
pub use adc::Adc;
pub use clocks::Clock;
pub use i2c::I2C;
pub use rp235x_hal_macros::entry;
#[cfg(all(target_arch = "arm", target_os = "none"))]
pub use cortex_m_rt::entry as arch_entry;
#[cfg(all(target_arch = "riscv32", target_os = "none"))]
pub use riscv_rt::entry as arch_entry;
use sio::CoreId;
pub use sio::Sio;
pub use spi::Spi;
pub use timer::Timer;
pub use watchdog::Watchdog;
pub extern crate fugit;
pub fn reset() -> ! {
unsafe {
crate::arch::interrupt_disable();
(*pac::PSM::PTR).wdsel().write(|w| w.bits(0x0001ffff));
(*pac::WATCHDOG::PTR)
.ctrl()
.write(|w| w.trigger().set_bit());
#[allow(clippy::empty_loop)]
loop {}
}
}
pub fn halt() -> ! {
unsafe {
crate::arch::interrupt_disable();
match crate::Sio::core() {
CoreId::Core0 => {
(*pac::PSM::PTR)
.frce_off()
.modify(|_, w| w.proc1().set_bit());
while !(*pac::PSM::PTR).frce_off().read().proc1().bit_is_set() {
crate::arch::nop();
}
(*pac::PSM::PTR)
.frce_off()
.modify(|_, w| w.proc1().clear_bit());
}
CoreId::Core1 => {
(*pac::PSM::PTR)
.frce_off()
.modify(|_, w| w.proc0().set_bit());
}
};
loop {
crate::arch::wfe()
}
}
}