diff --git a/examples/gpio-demo/Cargo.toml b/examples/gpio-demo/Cargo.toml index 1be821a60187d37d7476866ea9d07bc9a1d4cb5d..a92b871435bdaf59d98ca7eb6e5c87b43da3f99d 100644 --- a/examples/gpio-demo/Cargo.toml +++ b/examples/gpio-demo/Cargo.toml @@ -11,6 +11,7 @@ bl-soc = { path = "../..", features = ["bl808"] } base-address = "0.0.0" panic-halt = "0.2.0" embedded-hal = "1.0.0-rc.1" +riscv = "0.10.1" [dependencies.bl-rom-rt] git = "https://gitee.com/rustsbi/bl-rom-rt" diff --git a/examples/gpio-demo/src/main.rs b/examples/gpio-demo/src/main.rs index baa8a36606f06d85d40e09834d3675013bd2374b..3b23472ca4757f4326a501fa7761dec7f26dd387 100644 --- a/examples/gpio-demo/src/main.rs +++ b/examples/gpio-demo/src/main.rs @@ -31,16 +31,12 @@ fn main() -> ! { if button_1_pressed && button_2_pressed { led.set_state(led_state).ok(); led_state = !led_state; - for _ in 0..100_000 { - unsafe { core::arch::asm!("nop") } - } + unsafe { riscv::asm::delay(10_000) } } else if button_1_pressed { led.set_low().ok(); } else if button_2_pressed { led.set_high().ok(); } - for _ in 0..100_000 { - unsafe { core::arch::asm!("nop") } - } + unsafe { riscv::asm::delay(100_000) } } } diff --git a/examples/i2c-demo/Cargo.toml b/examples/i2c-demo/Cargo.toml index 069f7e528386da762915220ff1687adc9de7ee1e..52b8003895cbfb8f1a100974d2f27b5e6bc3b92a 100644 --- a/examples/i2c-demo/Cargo.toml +++ b/examples/i2c-demo/Cargo.toml @@ -11,6 +11,7 @@ bl-soc = { path = "../..", features = ["bl808"] } base-address = "0.0.0" panic-halt = "0.2.0" embedded-time = "0.12.1" +riscv = "0.10.1" [dependencies.bl-rom-rt] git = "https://gitee.com/rustsbi/bl-rom-rt" diff --git a/examples/i2c-demo/src/main.rs b/examples/i2c-demo/src/main.rs index d11e49b32e91597ca4d7550192648159d72145a5..7a948eacffbcf1243509464da89bdc45f35fc8b5 100644 --- a/examples/i2c-demo/src/main.rs +++ b/examples/i2c-demo/src/main.rs @@ -7,14 +7,7 @@ use base_address::Static; use bl_rom_rt::entry; -use bl_soc::{ - clocks::Clocks, - gpio::Pins, - i2c::I2c, - prelude::*, - uart::{BitOrder, Config, Parity, StopBits, UartMuxes, WordLength}, - GLB, I2C, UART, -}; +use bl_soc::{clocks::Clocks, gpio::Pins, i2c::I2c, prelude::*, uart::UartMuxes, GLB, I2C, UART}; use embedded_time::rate::*; use panic_halt as _; @@ -44,12 +37,7 @@ fn main() -> ! { let sig2 = uart_muxes.sig2.into_transmit::<0>(); let sig3 = uart_muxes.sig3.into_receive::<0>(); - let config = Config { - bit_order: BitOrder::LsbFirst, - parity: Parity::None, - stop_bits: StopBits::One, - word_length: WordLength::Eight, - }; + let config = Default::defnault(); let mut serial = uart0.freerun(config, 2000000.Bd(), ((tx, sig2), (rx, sig3)), &clocks); let mut led = gpio.io8.into_floating_output(); @@ -61,9 +49,7 @@ fn main() -> ! { writeln!(serial, "Hello Rust🦀!").ok(); let mut buf = [0u8; 6]; loop { - for _ in 0..100_000 { - unsafe { core::arch::asm!("nop") } - } + unsafe { riscv::asm::delay(100_000) }; match i2c.read(SCREEN_ADDRESS, &mut buf) { Ok(_) => { if buf[2] >> 4 == 8 { diff --git a/examples/jtag-demo/Cargo.toml b/examples/jtag-demo/Cargo.toml index acc10ccb39df33973ed2abb36466edaa1de61c4c..3f0a4c15445c8887c186e2f2d118c866fbd237b6 100644 --- a/examples/jtag-demo/Cargo.toml +++ b/examples/jtag-demo/Cargo.toml @@ -10,6 +10,7 @@ publish = false bl-soc = { path = "../..", features = ["bl808"] } base-address = "0.0.0" panic-halt = "0.2.0" +riscv = "0.10.1" [dependencies.bl-rom-rt] git = "https://gitee.com/rustsbi/bl-rom-rt" diff --git a/examples/jtag-demo/src/main.rs b/examples/jtag-demo/src/main.rs index f194385af94cadf104c759e35e889700096c1be6..0b82f24e0e4a03262339ff7d86131b37b952143c 100644 --- a/examples/jtag-demo/src/main.rs +++ b/examples/jtag-demo/src/main.rs @@ -22,12 +22,8 @@ fn main() -> ! { let mut led = gpio.io8.into_floating_output(); loop { led.set_low().ok(); - for _ in 0..100_000 { - unsafe { core::arch::asm!("nop") } - } + unsafe { riscv::asm::delay(100_000) }; led.set_high().ok(); - for _ in 0..100_000 { - unsafe { core::arch::asm!("nop") } - } + unsafe { riscv::asm::delay(100_000) }; } } diff --git a/examples/pwm-demo/Cargo.toml b/examples/pwm-demo/Cargo.toml index be79d20bbd01317e2dd3127caa2cd1e6d0225d2e..281c75d24ebb80074794a693bc55a6661f7643e3 100644 --- a/examples/pwm-demo/Cargo.toml +++ b/examples/pwm-demo/Cargo.toml @@ -11,6 +11,7 @@ bl-soc = { path = "../..", features = ["bl808"] } base-address = "0.0.0" panic-halt = "0.2.0" embedded-time = "0.12.1" +riscv = "0.10.1" [dependencies.bl-rom-rt] git = "https://gitee.com/rustsbi/bl-rom-rt" diff --git a/examples/pwm-demo/src/main.rs b/examples/pwm-demo/src/main.rs index 98ec9dd4cfb0b4205626f31b109ea78965b3cd3e..53e99c14438134a07ab69ffbfe094aac4c1b8b28 100644 --- a/examples/pwm-demo/src/main.rs +++ b/examples/pwm-demo/src/main.rs @@ -43,25 +43,17 @@ fn main() -> ! { loop { for duty in 0..100 { led.set_duty_cycle(duty).ok(); - for _ in 0..1_000 { - unsafe { core::arch::asm!("nop") } - } + unsafe { riscv::asm::delay(1_000) }; } led.set_high().ok(); - for _ in 0..100_000 { - unsafe { core::arch::asm!("nop") } - } + unsafe { riscv::asm::delay(100_000) }; led.enable_pwm_output(); for duty in (0..100).rev() { led.set_duty_cycle(duty).ok(); - for _ in 0..1_000 { - unsafe { core::arch::asm!("nop") } - } + unsafe { riscv::asm::delay(1_000) }; } led.set_low().ok(); - for _ in 0..200_000 { - unsafe { core::arch::asm!("nop") } - } + unsafe { riscv::asm::delay(200_000) }; led.enable_pwm_output(); } } diff --git a/examples/uart-demo/src/main.rs b/examples/uart-demo/src/main.rs index fbe7aaa236f1295ea1ebe128c96cc9f39dc67285..9e78a8fdf8f31e5966412504617f458750e29940 100644 --- a/examples/uart-demo/src/main.rs +++ b/examples/uart-demo/src/main.rs @@ -7,13 +7,7 @@ use base_address::Static; use bl_rom_rt::entry; -use bl_soc::{ - clocks::Clocks, - gpio::Pins, - prelude::*, - uart::{BitOrder, Config, Parity, StopBits, UartMuxes, WordLength}, - UART, -}; +use bl_soc::{clocks::Clocks, gpio::Pins, prelude::*, uart::UartMuxes, UART}; use embedded_time::rate::*; use panic_halt as _; @@ -38,12 +32,7 @@ fn main() -> ! { let sig2 = uart_muxes.sig2.into_transmit::<0>(); let sig3 = uart_muxes.sig3.into_receive::<0>(); - let config = Config { - bit_order: BitOrder::LsbFirst, - parity: Parity::None, - stop_bits: StopBits::One, - word_length: WordLength::Eight, - }; + let config = Default::default(); let mut serial = uart0.freerun(config, 2000000.Bd(), ((tx, sig2), (rx, sig3)), &clocks); let mut led = gpio.io8.into_floating_output(); diff --git a/src/glb_v1.rs b/src/glb/v1.rs similarity index 100% rename from src/glb_v1.rs rename to src/glb/v1.rs diff --git a/src/glb_v2.rs b/src/glb/v2.rs similarity index 100% rename from src/glb_v2.rs rename to src/glb/v2.rs diff --git a/src/lib.rs b/src/lib.rs index f019a4882dc80b16da0d3904aefeb56a29e4d636..20a0a793f45fecc17c9c250f85b904796d5d7bb0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,9 +14,7 @@ use core::ops; pub mod clocks; /// Global configuration peripheral. pub mod glb { - #[path = "../glb_v1.rs"] pub mod v1; - #[path = "../glb_v2.rs"] pub mod v2; } @@ -38,7 +36,6 @@ pub mod uart; /// Universal Serial Bus peripheral. pub mod usb { - #[path = "../usb_v1.rs"] pub mod v1; } diff --git a/src/uart.rs b/src/uart.rs index b79105cd0ddd84aa4f098f1b5ae0e0f5b525a4e6..1104052e402be6d698798ad397b6f64399c8ee27 100644 --- a/src/uart.rs +++ b/src/uart.rs @@ -1250,6 +1250,19 @@ pub struct Config { pub word_length: WordLength, } +impl Default for Config { + /// Serial configuration defaults to 8-bit word, no parity check, 1 stop bit, LSB first. + #[inline] + fn default() -> Self { + Config { + bit_order: BitOrder::LsbFirst, + parity: Parity::None, + stop_bits: StopBits::One, + word_length: WordLength::Eight, + } + } +} + /// Order of the bits transmitted and received on the wire. #[derive(Debug, Copy, Clone, Eq, PartialEq)] pub enum BitOrder { diff --git a/src/usb_v1.rs b/src/usb/v1.rs similarity index 100% rename from src/usb_v1.rs rename to src/usb/v1.rs