aboutsummaryrefslogtreecommitdiff
path: root/examples/mcxa
diff options
context:
space:
mode:
Diffstat (limited to 'examples/mcxa')
-rw-r--r--examples/mcxa/Cargo.toml1
-rw-r--r--examples/mcxa/src/bin/crc.rs103
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]
9cortex-m = { version = "0.7", features = ["critical-section-single-core"] } 9cortex-m = { version = "0.7", features = ["critical-section-single-core"] }
10cortex-m-rt = { version = "0.7", features = ["set-sp", "set-vtor"] } 10cortex-m-rt = { version = "0.7", features = ["set-sp", "set-vtor"] }
11crc = "3.4.0"
11critical-section = "1.2.0" 12critical-section = "1.2.0"
12defmt = "1.0" 13defmt = "1.0"
13defmt-rtt = "1.0" 14defmt-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;
6use hal::crc::Crc; 6use hal::crc::Crc;
7use {defmt_rtt as _, embassy_mcxa as hal, panic_probe as _}; 7use {defmt_rtt as _, embassy_mcxa as hal, panic_probe as _};
8 8
9const 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
20const 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]
10async fn main(_spawner: Spawner) { 32async 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");