#![no_std]
#![no_main]
use cortex_m_rt::entry;
use defmt_rtt as _;
use panic_halt as _;
use gd32e2_hal::crc::{Crc, CrcConfig, ReverseInput, ReverseOutput};
use gd32e2_hal::pac;
use gd32e2_hal::prelude::*;
use gd32e2_hal::rcu::ClockConfig;
const EXPECTED: u8 = 0xF4;
const CHECK_INPUT: &[u8] = b"123456789";
#[entry]
fn main() -> ! {
let dp = pac::Peripherals::take().unwrap();
let mut fmc = dp.fmc.constrain();
let mut rcu = dp.rcu.constrain().freeze(&mut fmc, ClockConfig::default());
let config = CrcConfig::new(ReverseInput::Disabled, ReverseOutput::Disabled);
let mut crc = Crc::new_8bit(&mut rcu, dp.crc, 0x07, config);
crc.reset_with(0);
for &byte in CHECK_INPUT {
crc.write_8bit(byte);
}
let result = crc.read_8bit();
if result == EXPECTED {
defmt::info!("CRC-8/SMBUS(\"123456789\") = {:#04x}, ok", result);
} else {
defmt::warn!(
"CRC-8/SMBUS(\"123456789\") = {:#04x}, expected {:#04x}",
result,
EXPECTED
);
}
defmt::info!("done");
loop {
cortex_m::asm::wfi();
}
}