2025-05-09 07:21:40 -07:00

176 lines
4.4 KiB
Rust

#![no_std]
#![no_main]
extern crate embassy_imxrt_examples;
use defmt::*;
use embassy_executor::Spawner;
use embassy_imxrt::crc::{Config, Crc, Polynomial};
use {defmt_rtt as _, panic_probe as _};
#[embassy_executor::main]
async fn main(_spawner: Spawner) {
let mut p = embassy_imxrt::init(Default::default());
let data = b"123456789";
info!("Initializing CRC");
// CRC-CCITT
let mut crc = Crc::new(p.CRC.reborrow(), Default::default());
let output = crc.feed_bytes(data);
defmt::assert_eq!(output, 0x29b1);
// CRC16-ARC
let mut crc = Crc::new(
p.CRC.reborrow(),
Config {
polynomial: Polynomial::Crc16,
reverse_in: true,
reverse_out: true,
complement_out: false,
seed: 0,
..Default::default()
},
);
let output = crc.feed_bytes(data);
defmt::assert_eq!(output, 0xbb3d);
// CRC16-CMS
let mut crc = Crc::new(
p.CRC.reborrow(),
Config {
polynomial: Polynomial::Crc16,
reverse_in: false,
reverse_out: false,
complement_out: false,
seed: 0xffff,
..Default::default()
},
);
let output = crc.feed_bytes(data);
defmt::assert_eq!(output, 0xaee7);
// CRC16-DDS-110
let mut crc = Crc::new(
p.CRC.reborrow(),
Config {
polynomial: Polynomial::Crc16,
reverse_in: false,
reverse_out: false,
complement_out: false,
seed: 0x800d,
..Default::default()
},
);
let output = crc.feed_bytes(data);
defmt::assert_eq!(output, 0x9ecf);
// CRC16-MAXIM-DOW
let mut crc = Crc::new(
p.CRC.reborrow(),
Config {
polynomial: Polynomial::Crc16,
reverse_in: true,
reverse_out: true,
complement_out: true,
seed: 0,
..Default::default()
},
);
let output = crc.feed_bytes(data);
defmt::assert_eq!(output, 0x44c2);
// CRC16-MODBUS
let mut crc = Crc::new(
p.CRC.reborrow(),
Config {
polynomial: Polynomial::Crc16,
reverse_in: true,
reverse_out: true,
complement_out: false,
seed: 0xffff,
..Default::default()
},
);
let output = crc.feed_bytes(data);
defmt::assert_eq!(output, 0x4b37);
// CRC32-BZIP2
let mut crc = Crc::new(
p.CRC.reborrow(),
Config {
polynomial: Polynomial::Crc32,
reverse_in: false,
reverse_out: false,
complement_out: true,
seed: 0xffff_ffff,
..Default::default()
},
);
let output = crc.feed_bytes(data);
defmt::assert_eq!(output, 0xfc89_1918);
// CRC32-CKSUM
let mut crc = Crc::new(
p.CRC.reborrow(),
Config {
polynomial: Polynomial::Crc32,
reverse_in: false,
reverse_out: false,
complement_out: true,
seed: 0,
..Default::default()
},
);
let output = crc.feed_bytes(data);
defmt::assert_eq!(output, 0x765e_7680);
// CRC32-ISO-HDLC
let mut crc = Crc::new(
p.CRC.reborrow(),
Config {
polynomial: Polynomial::Crc32,
reverse_in: true,
reverse_out: true,
complement_out: true,
seed: 0xffff_ffff,
..Default::default()
},
);
let output = crc.feed_bytes(data);
defmt::assert_eq!(output, 0xcbf4_3926);
// CRC32-JAMCRC
let mut crc = Crc::new(
p.CRC.reborrow(),
Config {
polynomial: Polynomial::Crc32,
reverse_in: true,
reverse_out: true,
complement_out: false,
seed: 0xffff_ffff,
..Default::default()
},
);
let output = crc.feed_bytes(data);
defmt::assert_eq!(output, 0x340b_c6d9);
// CRC32-MPEG-2
let mut crc = Crc::new(
p.CRC.reborrow(),
Config {
polynomial: Polynomial::Crc32,
reverse_in: false,
reverse_out: false,
complement_out: false,
seed: 0xffff_ffff,
..Default::default()
},
);
let output = crc.feed_bytes(data);
defmt::assert_eq!(output, 0x0376_e6e7);
info!("end program");
cortex_m::asm::bkpt();
}