diff options
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/mcxa/Cargo.toml | 1 | ||||
| -rw-r--r-- | examples/mcxa/src/bin/crc.rs | 103 |
2 files changed, 84 insertions, 20 deletions
diff --git a/examples/mcxa/Cargo.toml b/examples/mcxa/Cargo.toml index 4d0459f41..19d8d8657 100644 --- a/examples/mcxa/Cargo.toml +++ b/examples/mcxa/Cargo.toml | |||
| @@ -8,6 +8,7 @@ publish = false | |||
| 8 | [dependencies] | 8 | [dependencies] |
| 9 | cortex-m = { version = "0.7", features = ["critical-section-single-core"] } | 9 | cortex-m = { version = "0.7", features = ["critical-section-single-core"] } |
| 10 | cortex-m-rt = { version = "0.7", features = ["set-sp", "set-vtor"] } | 10 | cortex-m-rt = { version = "0.7", features = ["set-sp", "set-vtor"] } |
| 11 | crc = "3.4.0" | ||
| 11 | critical-section = "1.2.0" | 12 | critical-section = "1.2.0" |
| 12 | defmt = "1.0" | 13 | defmt = "1.0" |
| 13 | defmt-rtt = "1.0" | 14 | defmt-rtt = "1.0" |
diff --git a/examples/mcxa/src/bin/crc.rs b/examples/mcxa/src/bin/crc.rs index 12c423980..0125e625c 100644 --- a/examples/mcxa/src/bin/crc.rs +++ b/examples/mcxa/src/bin/crc.rs | |||
| @@ -6,6 +6,28 @@ use hal::config::Config; | |||
| 6 | use hal::crc::Crc; | 6 | use hal::crc::Crc; |
| 7 | use {defmt_rtt as _, embassy_mcxa as hal, panic_probe as _}; | 7 | use {defmt_rtt as _, embassy_mcxa as hal, panic_probe as _}; |
| 8 | 8 | ||
| 9 | const CCITT_FALSE: crc::Algorithm<u16> = crc::Algorithm { | ||
| 10 | width: 16, | ||
| 11 | poly: 0x1021, | ||
| 12 | init: 0xffff, | ||
| 13 | refin: false, | ||
| 14 | refout: false, | ||
| 15 | xorout: 0, | ||
| 16 | check: 0x29b1, | ||
| 17 | residue: 0x0000, | ||
| 18 | }; | ||
| 19 | |||
| 20 | const POSIX: crc::Algorithm<u32> = crc::Algorithm { | ||
| 21 | width: 32, | ||
| 22 | poly: 0x04c1_1db7, | ||
| 23 | init: 0, | ||
| 24 | refin: false, | ||
| 25 | refout: false, | ||
| 26 | xorout: 0xffff_ffff, | ||
| 27 | check: 0x765e_7680, | ||
| 28 | residue: 0x0000, | ||
| 29 | }; | ||
| 30 | |||
| 9 | #[embassy_executor::main] | 31 | #[embassy_executor::main] |
| 10 | async fn main(_spawner: Spawner) { | 32 | async fn main(_spawner: Spawner) { |
| 11 | let config = Config::default(); | 33 | let config = Config::default(); |
| @@ -19,72 +41,113 @@ async fn main(_spawner: Spawner) { | |||
| 19 | 41 | ||
| 20 | // CCITT False | 42 | // CCITT False |
| 21 | 43 | ||
| 44 | let sw_crc = crc::Crc::<u16>::new(&CCITT_FALSE); | ||
| 45 | let mut digest = sw_crc.digest(); | ||
| 46 | digest.update(&buf_u8); | ||
| 47 | let sw_sum = digest.finalize(); | ||
| 48 | |||
| 22 | let mut crc = Crc::new_ccitt_false(p.CRC0.reborrow()); | 49 | let mut crc = Crc::new_ccitt_false(p.CRC0.reborrow()); |
| 23 | let sum = crc.feed(&buf_u8); | 50 | crc.feed(&buf_u8); |
| 24 | assert_eq!(sum, 0x9627); | 51 | let sum = crc.finalize(); |
| 52 | assert_eq!(sum, sw_sum); | ||
| 25 | 53 | ||
| 26 | let mut crc = Crc::new_ccitt_false(p.CRC0.reborrow()); | 54 | let mut crc = Crc::new_ccitt_false(p.CRC0.reborrow()); |
| 27 | let sum = crc.feed(&buf_u16); | 55 | crc.feed(&buf_u16); |
| 56 | let sum = crc.finalize(); | ||
| 28 | assert_eq!(sum, 0xa467); | 57 | assert_eq!(sum, 0xa467); |
| 29 | 58 | ||
| 30 | let mut crc = Crc::new_ccitt_false(p.CRC0.reborrow()); | 59 | let mut crc = Crc::new_ccitt_false(p.CRC0.reborrow()); |
| 31 | let sum = crc.feed(&buf_u32); | 60 | crc.feed(&buf_u32); |
| 61 | let sum = crc.finalize(); | ||
| 32 | assert_eq!(sum, 0xe5c7); | 62 | assert_eq!(sum, 0xe5c7); |
| 33 | 63 | ||
| 34 | // Maxim | 64 | // Maxim |
| 35 | 65 | ||
| 66 | let sw_crc = crc::Crc::<u16>::new(&crc::CRC_16_MAXIM_DOW); | ||
| 67 | let mut digest = sw_crc.digest(); | ||
| 68 | digest.update(&buf_u8); | ||
| 69 | let sw_sum = digest.finalize(); | ||
| 70 | |||
| 36 | let mut crc = Crc::new_maxim(p.CRC0.reborrow()); | 71 | let mut crc = Crc::new_maxim(p.CRC0.reborrow()); |
| 37 | let sum = crc.feed(&buf_u8); | 72 | crc.feed(&buf_u8); |
| 38 | assert_eq!(sum, 0x4ff7); | 73 | let sum = crc.finalize(); |
| 74 | assert_eq!(sum, sw_sum); | ||
| 39 | 75 | ||
| 40 | let mut crc = Crc::new_maxim(p.CRC0.reborrow()); | 76 | let mut crc = Crc::new_maxim(p.CRC0.reborrow()); |
| 41 | let sum = crc.feed(&buf_u16); | 77 | crc.feed(&buf_u16); |
| 78 | let sum = crc.finalize(); | ||
| 42 | assert_eq!(sum, 0x2afe); | 79 | assert_eq!(sum, 0x2afe); |
| 43 | 80 | ||
| 44 | let mut crc = Crc::new_maxim(p.CRC0.reborrow()); | 81 | let mut crc = Crc::new_maxim(p.CRC0.reborrow()); |
| 45 | let sum = crc.feed(&buf_u32); | 82 | crc.feed(&buf_u32); |
| 83 | let sum = crc.finalize(); | ||
| 46 | assert_eq!(sum, 0x17d7); | 84 | assert_eq!(sum, 0x17d7); |
| 47 | 85 | ||
| 48 | // Kermit | 86 | // Kermit |
| 49 | 87 | ||
| 88 | let sw_crc = crc::Crc::<u16>::new(&crc::CRC_16_KERMIT); | ||
| 89 | let mut digest = sw_crc.digest(); | ||
| 90 | digest.update(&buf_u8); | ||
| 91 | let sw_sum = digest.finalize(); | ||
| 92 | |||
| 50 | let mut crc = Crc::new_kermit(p.CRC0.reborrow()); | 93 | let mut crc = Crc::new_kermit(p.CRC0.reborrow()); |
| 51 | let sum = crc.feed(&buf_u8); | 94 | crc.feed(&buf_u8); |
| 52 | assert_eq!(sum, 0xccd2); | 95 | let sum = crc.finalize(); |
| 96 | assert_eq!(sum, sw_sum); | ||
| 53 | 97 | ||
| 54 | let mut crc = Crc::new_kermit(p.CRC0.reborrow()); | 98 | let mut crc = Crc::new_kermit(p.CRC0.reborrow()); |
| 55 | let sum = crc.feed(&buf_u16); | 99 | crc.feed(&buf_u16); |
| 100 | let sum = crc.finalize(); | ||
| 56 | assert_eq!(sum, 0x66eb); | 101 | assert_eq!(sum, 0x66eb); |
| 57 | 102 | ||
| 58 | let mut crc = Crc::new_kermit(p.CRC0.reborrow()); | 103 | let mut crc = Crc::new_kermit(p.CRC0.reborrow()); |
| 59 | let sum = crc.feed(&buf_u32); | 104 | crc.feed(&buf_u32); |
| 105 | let sum = crc.finalize(); | ||
| 60 | assert_eq!(sum, 0x75ea); | 106 | assert_eq!(sum, 0x75ea); |
| 61 | 107 | ||
| 62 | // ISO HDLC | 108 | // ISO HDLC |
| 63 | 109 | ||
| 110 | let sw_crc = crc::Crc::<u32>::new(&crc::CRC_32_ISO_HDLC); | ||
| 111 | let mut digest = sw_crc.digest(); | ||
| 112 | digest.update(&buf_u8); | ||
| 113 | let sw_sum = digest.finalize(); | ||
| 114 | |||
| 64 | let mut crc = Crc::new_iso_hdlc(p.CRC0.reborrow()); | 115 | let mut crc = Crc::new_iso_hdlc(p.CRC0.reborrow()); |
| 65 | let sum = crc.feed(&buf_u8); | 116 | crc.feed(&buf_u8); |
| 66 | assert_eq!(sum, 0x24c2_316d); | 117 | let sum = crc.finalize(); |
| 118 | assert_eq!(sum, sw_sum); | ||
| 67 | 119 | ||
| 68 | let mut crc = Crc::new_iso_hdlc(p.CRC0.reborrow()); | 120 | let mut crc = Crc::new_iso_hdlc(p.CRC0.reborrow()); |
| 69 | let sum = crc.feed(&buf_u16); | 121 | crc.feed(&buf_u16); |
| 122 | let sum = crc.finalize(); | ||
| 70 | assert_eq!(sum, 0x8a61_4178); | 123 | assert_eq!(sum, 0x8a61_4178); |
| 71 | 124 | ||
| 72 | let mut crc = Crc::new_iso_hdlc(p.CRC0.reborrow()); | 125 | let mut crc = Crc::new_iso_hdlc(p.CRC0.reborrow()); |
| 73 | let sum = crc.feed(&buf_u32); | 126 | crc.feed(&buf_u32); |
| 127 | let sum = crc.finalize(); | ||
| 74 | assert_eq!(sum, 0xfab5_d04e); | 128 | assert_eq!(sum, 0xfab5_d04e); |
| 75 | 129 | ||
| 76 | // POSIX | 130 | // POSIX |
| 77 | 131 | ||
| 132 | let sw_crc = crc::Crc::<u32>::new(&POSIX); | ||
| 133 | let mut digest = sw_crc.digest(); | ||
| 134 | digest.update(&buf_u8); | ||
| 135 | let sw_sum = digest.finalize(); | ||
| 136 | |||
| 78 | let mut crc = Crc::new_posix(p.CRC0.reborrow()); | 137 | let mut crc = Crc::new_posix(p.CRC0.reborrow()); |
| 79 | let sum = crc.feed(&buf_u8); | 138 | crc.feed(&buf_u8); |
| 80 | assert_eq!(sum, 0xba8d_7868); | 139 | let sum = crc.finalize(); |
| 140 | |||
| 141 | assert_eq!(sum, sw_sum); | ||
| 81 | 142 | ||
| 82 | let mut crc = Crc::new_posix(p.CRC0.reborrow()); | 143 | let mut crc = Crc::new_posix(p.CRC0.reborrow()); |
| 83 | let sum = crc.feed(&buf_u16); | 144 | crc.feed(&buf_u16); |
| 145 | let sum = crc.finalize(); | ||
| 84 | assert_eq!(sum, 0x6d76_4f58); | 146 | assert_eq!(sum, 0x6d76_4f58); |
| 85 | 147 | ||
| 86 | let mut crc = Crc::new_posix(p.CRC0.reborrow()); | 148 | let mut crc = Crc::new_posix(p.CRC0.reborrow()); |
| 87 | let sum = crc.feed(&buf_u32); | 149 | crc.feed(&buf_u32); |
| 150 | let sum = crc.finalize(); | ||
| 88 | assert_eq!(sum, 0x2a5b_cb90); | 151 | assert_eq!(sum, 0x2a5b_cb90); |
| 89 | 152 | ||
| 90 | defmt::info!("CRC successful"); | 153 | defmt::info!("CRC successful"); |
