176 lines
4.4 KiB
Rust
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();
|
|
}
|