i2c config adjustments during testing

This commit is contained in:
2025-12-28 13:43:03 +01:00
parent 334b2d94e1
commit e4b62bc4b4
+20 -24
View File
@@ -3,17 +3,21 @@
#![feature(type_alias_impl_trait)] #![feature(type_alias_impl_trait)]
#![feature(impl_trait_in_assoc_type)] #![feature(impl_trait_in_assoc_type)]
use ch32_hal::i2c::Duty; use ch32_hal::i2c::{self, Duty};
use ch32_hal::pac::{self, I2C1};
use ch32_hal::println;
use ch32_hal::time::Hertz; use ch32_hal::time::Hertz;
use embassy_executor::Spawner; use embassy_executor::Spawner;
use embassy_time::{Duration, Timer}; use embassy_time::{Duration, Timer};
use hal::bind_interrupts; use hal::bind_interrupts;
use hal::gpio::{Level, Output}; use hal::gpio::{Level, Output};
use hal::i2c::{Config, I2c, SlaveAddress, SlaveConfig}; use hal::i2c::{Config, I2c, SlaveAddress, SlaveConfig};
use hal::debug::SDIPrint;
use hal::peripherals::USBD; use hal::peripherals::USBD;
use hal::usbd::InterruptHandler; use hal::usbd::InterruptHandler;
use {ch32_hal as hal, panic_halt as _}; use {ch32_hal as hal, panic_halt as _};
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {
USB_LP_CAN1_RX0 => InterruptHandler<USBD>; USB_LP_CAN1_RX0 => InterruptHandler<USBD>;
I2C1_EV => ch32_hal::i2c::EventInterruptHandler<ch32_hal::peripherals::I2C1>; I2C1_EV => ch32_hal::i2c::EventInterruptHandler<ch32_hal::peripherals::I2C1>;
@@ -23,43 +27,35 @@ bind_interrupts!(struct Irqs {
#[embassy_executor::main(entry = "qingke_rt::entry")] #[embassy_executor::main(entry = "qingke_rt::entry")]
async fn main(_spawner: Spawner) -> ! { async fn main(_spawner: Spawner) -> ! {
let p = hal::init(Default::default()); let p = hal::init(Default::default());
SDIPrint::enable();
let mut led = Output::new(p.PB2, Level::Low, Default::default()); let config = Config::default();
let mut i2c_slave = I2c::new_blocking(p.I2C1, p.PB6, p.PB7, Hertz::khz(100), config)
let mut config = Config::default();
config.duty = Duty::Duty16_9;
let mut i2c_slave = I2c::new_blocking(p.I2C1, p.PB6, p.PB7, Hertz::khz(400), config)
.into_slave(SlaveConfig { .into_slave(SlaveConfig {
address: SlaveAddress::SevenBit(0x55), address: SlaveAddress::SevenBit(0x55),
general_call: false, general_call: false,
}); });
let mut blinks: u8 = 8;
loop { loop {
Timer::after_millis(1000).await; Timer::after_millis(10).await;
if blinks > 0 { match i2c_slave.listen_blocking() {
led.toggle(); Ok(command) => {
if led.is_set_low() {
blinks -= 1;
}
} else {
if let Ok(command) = i2c_slave.listen_blocking() {
blinks = 1;
match command { match command {
ch32_hal::i2c::SlaveCommand::GeneralCall => { /* will not be triggered because we disabled it */ }, ch32_hal::i2c::SlaveCommand::GeneralCall => { /* will not be triggered because we disabled it */
}
ch32_hal::i2c::SlaveCommand::ReadCommand => { ch32_hal::i2c::SlaveCommand::ReadCommand => {
// send empty response // send empty response
i2c_slave.blocking_write_timeout(&[0x01]); let _ = i2c_slave.blocking_write_timeout(&[0x01]);
}, }
ch32_hal::i2c::SlaveCommand::WriteCommand => { ch32_hal::i2c::SlaveCommand::WriteCommand => {
let mut buf: [u8; 1] = [0x0]; let mut buf: [u8; 1] = [0x0];
i2c_slave.blocking_read_timeout(&mut buf); let _ = i2c_slave.blocking_read_timeout(&mut buf);
blinks = buf[0]; }
}
}, },
} Err(err) => {
} else { println!("{:?}", err)
blinks = 2;
} }
} }
} }