| 1 | #![allow (clippy::missing_safety_doc)] |
| 2 | #![allow (clippy::identity_op)] |
| 3 | #![allow (clippy::unnecessary_cast)] |
| 4 | #![allow (clippy::erasing_op)] |
| 5 | |
| 6 | #[doc = "External interrupt/event controller" ] |
| 7 | #[derive (Copy, Clone, Eq, PartialEq)] |
| 8 | pub struct Exti { |
| 9 | ptr: *mut u8, |
| 10 | } |
| 11 | unsafe impl Send for Exti {} |
| 12 | unsafe impl Sync for Exti {} |
| 13 | impl Exti { |
| 14 | #[inline (always)] |
| 15 | pub const unsafe fn from_ptr(ptr: *mut ()) -> Self { |
| 16 | Self { ptr: ptr as _ } |
| 17 | } |
| 18 | #[inline (always)] |
| 19 | pub const fn as_ptr(&self) -> *mut () { |
| 20 | self.ptr as _ |
| 21 | } |
| 22 | #[doc = "Rising Trigger selection register" ] |
| 23 | #[inline (always)] |
| 24 | pub const fn rtsr(self, n: usize) -> crate::common::Reg<regs::Lines, crate::common::RW> { |
| 25 | assert!(n < 2usize); |
| 26 | unsafe { crate::common::Reg::from_ptr(self.ptr.add(0x0usize + n * 32usize) as _) } |
| 27 | } |
| 28 | #[doc = "Falling Trigger selection register" ] |
| 29 | #[inline (always)] |
| 30 | pub const fn ftsr(self, n: usize) -> crate::common::Reg<regs::Lines, crate::common::RW> { |
| 31 | assert!(n < 2usize); |
| 32 | unsafe { crate::common::Reg::from_ptr(self.ptr.add(0x04usize + n * 32usize) as _) } |
| 33 | } |
| 34 | #[doc = "Software interrupt event register" ] |
| 35 | #[inline (always)] |
| 36 | pub const fn swier(self, n: usize) -> crate::common::Reg<regs::Lines, crate::common::RW> { |
| 37 | assert!(n < 2usize); |
| 38 | unsafe { crate::common::Reg::from_ptr(self.ptr.add(0x08usize + n * 32usize) as _) } |
| 39 | } |
| 40 | #[doc = "Rising pending register" ] |
| 41 | #[inline (always)] |
| 42 | pub const fn rpr(self, n: usize) -> crate::common::Reg<regs::Lines, crate::common::RW> { |
| 43 | assert!(n < 2usize); |
| 44 | unsafe { crate::common::Reg::from_ptr(self.ptr.add(0x0cusize + n * 32usize) as _) } |
| 45 | } |
| 46 | #[doc = "Falling pending register" ] |
| 47 | #[inline (always)] |
| 48 | pub const fn fpr(self, n: usize) -> crate::common::Reg<regs::Lines, crate::common::RW> { |
| 49 | assert!(n < 2usize); |
| 50 | unsafe { crate::common::Reg::from_ptr(self.ptr.add(0x10usize + n * 32usize) as _) } |
| 51 | } |
| 52 | #[doc = "Security configuration register" ] |
| 53 | #[inline (always)] |
| 54 | pub const fn seccfgr(self, n: usize) -> crate::common::Reg<regs::Seccfgr, crate::common::RW> { |
| 55 | assert!(n < 2usize); |
| 56 | unsafe { crate::common::Reg::from_ptr(self.ptr.add(0x14usize + n * 36usize) as _) } |
| 57 | } |
| 58 | #[doc = "Privilege configuration register" ] |
| 59 | #[inline (always)] |
| 60 | pub const fn privcfgr(self, n: usize) -> crate::common::Reg<regs::Privcfgr, crate::common::RW> { |
| 61 | assert!(n < 2usize); |
| 62 | unsafe { crate::common::Reg::from_ptr(self.ptr.add(0x18usize + n * 28usize) as _) } |
| 63 | } |
| 64 | #[doc = "Configuration register" ] |
| 65 | #[inline (always)] |
| 66 | pub const fn exticr(self, n: usize) -> crate::common::Reg<regs::Exticr, crate::common::RW> { |
| 67 | assert!(n < 4usize); |
| 68 | unsafe { crate::common::Reg::from_ptr(self.ptr.add(0x60usize + n * 4usize) as _) } |
| 69 | } |
| 70 | #[doc = "EXTI lock register" ] |
| 71 | #[inline (always)] |
| 72 | pub const fn lockrg(self) -> crate::common::Reg<regs::Lockrg, crate::common::RW> { |
| 73 | unsafe { crate::common::Reg::from_ptr(self.ptr.add(0x70usize) as _) } |
| 74 | } |
| 75 | #[doc = "Interrupt mask register" ] |
| 76 | #[inline (always)] |
| 77 | pub const fn imr(self, n: usize) -> crate::common::Reg<regs::Lines, crate::common::RW> { |
| 78 | assert!(n < 2usize); |
| 79 | unsafe { crate::common::Reg::from_ptr(self.ptr.add(0x80usize + n * 16usize) as _) } |
| 80 | } |
| 81 | #[doc = "Event mask register" ] |
| 82 | #[inline (always)] |
| 83 | pub const fn emr(self, n: usize) -> crate::common::Reg<regs::Lines, crate::common::RW> { |
| 84 | assert!(n < 2usize); |
| 85 | unsafe { crate::common::Reg::from_ptr(self.ptr.add(0x84usize + n * 16usize) as _) } |
| 86 | } |
| 87 | } |
| 88 | pub mod regs { |
| 89 | #[doc = "external interrupt configuration register 1" ] |
| 90 | #[repr (transparent)] |
| 91 | #[derive (Copy, Clone, Eq, PartialEq)] |
| 92 | pub struct Exticr(pub u32); |
| 93 | impl Exticr { |
| 94 | #[doc = "EXTI configuration bits" ] |
| 95 | #[inline (always)] |
| 96 | pub const fn exti(&self, n: usize) -> u8 { |
| 97 | assert!(n < 4usize); |
| 98 | let offs = 0usize + n * 8usize; |
| 99 | let val = (self.0 >> offs) & 0xff; |
| 100 | val as u8 |
| 101 | } |
| 102 | #[doc = "EXTI configuration bits" ] |
| 103 | #[inline (always)] |
| 104 | pub fn set_exti(&mut self, n: usize, val: u8) { |
| 105 | assert!(n < 4usize); |
| 106 | let offs = 0usize + n * 8usize; |
| 107 | self.0 = (self.0 & !(0xff << offs)) | (((val as u32) & 0xff) << offs); |
| 108 | } |
| 109 | } |
| 110 | impl Default for Exticr { |
| 111 | #[inline (always)] |
| 112 | fn default() -> Exticr { |
| 113 | Exticr(0) |
| 114 | } |
| 115 | } |
| 116 | impl core::fmt::Debug for Exticr { |
| 117 | fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { |
| 118 | f.debug_struct("Exticr" ) |
| 119 | .field( |
| 120 | "exti" , |
| 121 | &[ |
| 122 | self.exti(0usize), |
| 123 | self.exti(1usize), |
| 124 | self.exti(2usize), |
| 125 | self.exti(3usize), |
| 126 | ], |
| 127 | ) |
| 128 | .finish() |
| 129 | } |
| 130 | } |
| 131 | #[cfg (feature = "defmt" )] |
| 132 | impl defmt::Format for Exticr { |
| 133 | fn format(&self, f: defmt::Formatter) { |
| 134 | #[derive (defmt :: Format)] |
| 135 | struct Exticr { |
| 136 | exti: [u8; 4usize], |
| 137 | } |
| 138 | let proxy = Exticr { |
| 139 | exti: [ |
| 140 | self.exti(0usize), |
| 141 | self.exti(1usize), |
| 142 | self.exti(2usize), |
| 143 | self.exti(3usize), |
| 144 | ], |
| 145 | }; |
| 146 | defmt::write!(f, "{}" , proxy) |
| 147 | } |
| 148 | } |
| 149 | #[doc = "EXTI lines register, 1 bit per line" ] |
| 150 | #[repr (transparent)] |
| 151 | #[derive (Copy, Clone, Eq, PartialEq)] |
| 152 | pub struct Lines(pub u32); |
| 153 | impl Lines { |
| 154 | #[doc = "EXTI line" ] |
| 155 | #[inline (always)] |
| 156 | pub const fn line(&self, n: usize) -> bool { |
| 157 | assert!(n < 32usize); |
| 158 | let offs = 0usize + n * 1usize; |
| 159 | let val = (self.0 >> offs) & 0x01; |
| 160 | val != 0 |
| 161 | } |
| 162 | #[doc = "EXTI line" ] |
| 163 | #[inline (always)] |
| 164 | pub fn set_line(&mut self, n: usize, val: bool) { |
| 165 | assert!(n < 32usize); |
| 166 | let offs = 0usize + n * 1usize; |
| 167 | self.0 = (self.0 & !(0x01 << offs)) | (((val as u32) & 0x01) << offs); |
| 168 | } |
| 169 | } |
| 170 | impl Default for Lines { |
| 171 | #[inline (always)] |
| 172 | fn default() -> Lines { |
| 173 | Lines(0) |
| 174 | } |
| 175 | } |
| 176 | impl core::fmt::Debug for Lines { |
| 177 | fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { |
| 178 | f.debug_struct("Lines" ) |
| 179 | .field( |
| 180 | "line" , |
| 181 | &[ |
| 182 | self.line(0usize), |
| 183 | self.line(1usize), |
| 184 | self.line(2usize), |
| 185 | self.line(3usize), |
| 186 | self.line(4usize), |
| 187 | self.line(5usize), |
| 188 | self.line(6usize), |
| 189 | self.line(7usize), |
| 190 | self.line(8usize), |
| 191 | self.line(9usize), |
| 192 | self.line(10usize), |
| 193 | self.line(11usize), |
| 194 | self.line(12usize), |
| 195 | self.line(13usize), |
| 196 | self.line(14usize), |
| 197 | self.line(15usize), |
| 198 | self.line(16usize), |
| 199 | self.line(17usize), |
| 200 | self.line(18usize), |
| 201 | self.line(19usize), |
| 202 | self.line(20usize), |
| 203 | self.line(21usize), |
| 204 | self.line(22usize), |
| 205 | self.line(23usize), |
| 206 | self.line(24usize), |
| 207 | self.line(25usize), |
| 208 | self.line(26usize), |
| 209 | self.line(27usize), |
| 210 | self.line(28usize), |
| 211 | self.line(29usize), |
| 212 | self.line(30usize), |
| 213 | self.line(31usize), |
| 214 | ], |
| 215 | ) |
| 216 | .finish() |
| 217 | } |
| 218 | } |
| 219 | #[cfg (feature = "defmt" )] |
| 220 | impl defmt::Format for Lines { |
| 221 | fn format(&self, f: defmt::Formatter) { |
| 222 | #[derive (defmt :: Format)] |
| 223 | struct Lines { |
| 224 | line: [bool; 32usize], |
| 225 | } |
| 226 | let proxy = Lines { |
| 227 | line: [ |
| 228 | self.line(0usize), |
| 229 | self.line(1usize), |
| 230 | self.line(2usize), |
| 231 | self.line(3usize), |
| 232 | self.line(4usize), |
| 233 | self.line(5usize), |
| 234 | self.line(6usize), |
| 235 | self.line(7usize), |
| 236 | self.line(8usize), |
| 237 | self.line(9usize), |
| 238 | self.line(10usize), |
| 239 | self.line(11usize), |
| 240 | self.line(12usize), |
| 241 | self.line(13usize), |
| 242 | self.line(14usize), |
| 243 | self.line(15usize), |
| 244 | self.line(16usize), |
| 245 | self.line(17usize), |
| 246 | self.line(18usize), |
| 247 | self.line(19usize), |
| 248 | self.line(20usize), |
| 249 | self.line(21usize), |
| 250 | self.line(22usize), |
| 251 | self.line(23usize), |
| 252 | self.line(24usize), |
| 253 | self.line(25usize), |
| 254 | self.line(26usize), |
| 255 | self.line(27usize), |
| 256 | self.line(28usize), |
| 257 | self.line(29usize), |
| 258 | self.line(30usize), |
| 259 | self.line(31usize), |
| 260 | ], |
| 261 | }; |
| 262 | defmt::write!(f, "{}" , proxy) |
| 263 | } |
| 264 | } |
| 265 | #[doc = "EXTI lock register" ] |
| 266 | #[repr (transparent)] |
| 267 | #[derive (Copy, Clone, Eq, PartialEq)] |
| 268 | pub struct Lockrg(pub u32); |
| 269 | impl Lockrg { |
| 270 | #[doc = "LOCK" ] |
| 271 | #[inline (always)] |
| 272 | pub const fn lock(&self) -> bool { |
| 273 | let val = (self.0 >> 0usize) & 0x01; |
| 274 | val != 0 |
| 275 | } |
| 276 | #[doc = "LOCK" ] |
| 277 | #[inline (always)] |
| 278 | pub fn set_lock(&mut self, val: bool) { |
| 279 | self.0 = (self.0 & !(0x01 << 0usize)) | (((val as u32) & 0x01) << 0usize); |
| 280 | } |
| 281 | } |
| 282 | impl Default for Lockrg { |
| 283 | #[inline (always)] |
| 284 | fn default() -> Lockrg { |
| 285 | Lockrg(0) |
| 286 | } |
| 287 | } |
| 288 | impl core::fmt::Debug for Lockrg { |
| 289 | fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { |
| 290 | f.debug_struct("Lockrg" ).field("lock" , &self.lock()).finish() |
| 291 | } |
| 292 | } |
| 293 | #[cfg (feature = "defmt" )] |
| 294 | impl defmt::Format for Lockrg { |
| 295 | fn format(&self, f: defmt::Formatter) { |
| 296 | #[derive (defmt :: Format)] |
| 297 | struct Lockrg { |
| 298 | lock: bool, |
| 299 | } |
| 300 | let proxy = Lockrg { lock: self.lock() }; |
| 301 | defmt::write!(f, "{}" , proxy) |
| 302 | } |
| 303 | } |
| 304 | #[doc = "Privilege configuration register" ] |
| 305 | #[repr (transparent)] |
| 306 | #[derive (Copy, Clone, Eq, PartialEq)] |
| 307 | pub struct Privcfgr(pub u32); |
| 308 | impl Privcfgr { |
| 309 | #[doc = "Security enable on event input x" ] |
| 310 | #[inline (always)] |
| 311 | pub const fn priv_(&self, n: usize) -> bool { |
| 312 | assert!(n < 32usize); |
| 313 | let offs = 0usize + n * 1usize; |
| 314 | let val = (self.0 >> offs) & 0x01; |
| 315 | val != 0 |
| 316 | } |
| 317 | #[doc = "Security enable on event input x" ] |
| 318 | #[inline (always)] |
| 319 | pub fn set_priv_(&mut self, n: usize, val: bool) { |
| 320 | assert!(n < 32usize); |
| 321 | let offs = 0usize + n * 1usize; |
| 322 | self.0 = (self.0 & !(0x01 << offs)) | (((val as u32) & 0x01) << offs); |
| 323 | } |
| 324 | } |
| 325 | impl Default for Privcfgr { |
| 326 | #[inline (always)] |
| 327 | fn default() -> Privcfgr { |
| 328 | Privcfgr(0) |
| 329 | } |
| 330 | } |
| 331 | impl core::fmt::Debug for Privcfgr { |
| 332 | fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { |
| 333 | f.debug_struct("Privcfgr" ) |
| 334 | .field( |
| 335 | "priv_" , |
| 336 | &[ |
| 337 | self.priv_(0usize), |
| 338 | self.priv_(1usize), |
| 339 | self.priv_(2usize), |
| 340 | self.priv_(3usize), |
| 341 | self.priv_(4usize), |
| 342 | self.priv_(5usize), |
| 343 | self.priv_(6usize), |
| 344 | self.priv_(7usize), |
| 345 | self.priv_(8usize), |
| 346 | self.priv_(9usize), |
| 347 | self.priv_(10usize), |
| 348 | self.priv_(11usize), |
| 349 | self.priv_(12usize), |
| 350 | self.priv_(13usize), |
| 351 | self.priv_(14usize), |
| 352 | self.priv_(15usize), |
| 353 | self.priv_(16usize), |
| 354 | self.priv_(17usize), |
| 355 | self.priv_(18usize), |
| 356 | self.priv_(19usize), |
| 357 | self.priv_(20usize), |
| 358 | self.priv_(21usize), |
| 359 | self.priv_(22usize), |
| 360 | self.priv_(23usize), |
| 361 | self.priv_(24usize), |
| 362 | self.priv_(25usize), |
| 363 | self.priv_(26usize), |
| 364 | self.priv_(27usize), |
| 365 | self.priv_(28usize), |
| 366 | self.priv_(29usize), |
| 367 | self.priv_(30usize), |
| 368 | self.priv_(31usize), |
| 369 | ], |
| 370 | ) |
| 371 | .finish() |
| 372 | } |
| 373 | } |
| 374 | #[cfg (feature = "defmt" )] |
| 375 | impl defmt::Format for Privcfgr { |
| 376 | fn format(&self, f: defmt::Formatter) { |
| 377 | #[derive (defmt :: Format)] |
| 378 | struct Privcfgr { |
| 379 | priv_: [bool; 32usize], |
| 380 | } |
| 381 | let proxy = Privcfgr { |
| 382 | priv_: [ |
| 383 | self.priv_(0usize), |
| 384 | self.priv_(1usize), |
| 385 | self.priv_(2usize), |
| 386 | self.priv_(3usize), |
| 387 | self.priv_(4usize), |
| 388 | self.priv_(5usize), |
| 389 | self.priv_(6usize), |
| 390 | self.priv_(7usize), |
| 391 | self.priv_(8usize), |
| 392 | self.priv_(9usize), |
| 393 | self.priv_(10usize), |
| 394 | self.priv_(11usize), |
| 395 | self.priv_(12usize), |
| 396 | self.priv_(13usize), |
| 397 | self.priv_(14usize), |
| 398 | self.priv_(15usize), |
| 399 | self.priv_(16usize), |
| 400 | self.priv_(17usize), |
| 401 | self.priv_(18usize), |
| 402 | self.priv_(19usize), |
| 403 | self.priv_(20usize), |
| 404 | self.priv_(21usize), |
| 405 | self.priv_(22usize), |
| 406 | self.priv_(23usize), |
| 407 | self.priv_(24usize), |
| 408 | self.priv_(25usize), |
| 409 | self.priv_(26usize), |
| 410 | self.priv_(27usize), |
| 411 | self.priv_(28usize), |
| 412 | self.priv_(29usize), |
| 413 | self.priv_(30usize), |
| 414 | self.priv_(31usize), |
| 415 | ], |
| 416 | }; |
| 417 | defmt::write!(f, "{}" , proxy) |
| 418 | } |
| 419 | } |
| 420 | #[doc = "Security configuration register" ] |
| 421 | #[repr (transparent)] |
| 422 | #[derive (Copy, Clone, Eq, PartialEq)] |
| 423 | pub struct Seccfgr(pub u32); |
| 424 | impl Seccfgr { |
| 425 | #[doc = "Security enable on event input x" ] |
| 426 | #[inline (always)] |
| 427 | pub const fn sec(&self, n: usize) -> bool { |
| 428 | assert!(n < 32usize); |
| 429 | let offs = 0usize + n * 1usize; |
| 430 | let val = (self.0 >> offs) & 0x01; |
| 431 | val != 0 |
| 432 | } |
| 433 | #[doc = "Security enable on event input x" ] |
| 434 | #[inline (always)] |
| 435 | pub fn set_sec(&mut self, n: usize, val: bool) { |
| 436 | assert!(n < 32usize); |
| 437 | let offs = 0usize + n * 1usize; |
| 438 | self.0 = (self.0 & !(0x01 << offs)) | (((val as u32) & 0x01) << offs); |
| 439 | } |
| 440 | } |
| 441 | impl Default for Seccfgr { |
| 442 | #[inline (always)] |
| 443 | fn default() -> Seccfgr { |
| 444 | Seccfgr(0) |
| 445 | } |
| 446 | } |
| 447 | impl core::fmt::Debug for Seccfgr { |
| 448 | fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { |
| 449 | f.debug_struct("Seccfgr" ) |
| 450 | .field( |
| 451 | "sec" , |
| 452 | &[ |
| 453 | self.sec(0usize), |
| 454 | self.sec(1usize), |
| 455 | self.sec(2usize), |
| 456 | self.sec(3usize), |
| 457 | self.sec(4usize), |
| 458 | self.sec(5usize), |
| 459 | self.sec(6usize), |
| 460 | self.sec(7usize), |
| 461 | self.sec(8usize), |
| 462 | self.sec(9usize), |
| 463 | self.sec(10usize), |
| 464 | self.sec(11usize), |
| 465 | self.sec(12usize), |
| 466 | self.sec(13usize), |
| 467 | self.sec(14usize), |
| 468 | self.sec(15usize), |
| 469 | self.sec(16usize), |
| 470 | self.sec(17usize), |
| 471 | self.sec(18usize), |
| 472 | self.sec(19usize), |
| 473 | self.sec(20usize), |
| 474 | self.sec(21usize), |
| 475 | self.sec(22usize), |
| 476 | self.sec(23usize), |
| 477 | self.sec(24usize), |
| 478 | self.sec(25usize), |
| 479 | self.sec(26usize), |
| 480 | self.sec(27usize), |
| 481 | self.sec(28usize), |
| 482 | self.sec(29usize), |
| 483 | self.sec(30usize), |
| 484 | self.sec(31usize), |
| 485 | ], |
| 486 | ) |
| 487 | .finish() |
| 488 | } |
| 489 | } |
| 490 | #[cfg (feature = "defmt" )] |
| 491 | impl defmt::Format for Seccfgr { |
| 492 | fn format(&self, f: defmt::Formatter) { |
| 493 | #[derive (defmt :: Format)] |
| 494 | struct Seccfgr { |
| 495 | sec: [bool; 32usize], |
| 496 | } |
| 497 | let proxy = Seccfgr { |
| 498 | sec: [ |
| 499 | self.sec(0usize), |
| 500 | self.sec(1usize), |
| 501 | self.sec(2usize), |
| 502 | self.sec(3usize), |
| 503 | self.sec(4usize), |
| 504 | self.sec(5usize), |
| 505 | self.sec(6usize), |
| 506 | self.sec(7usize), |
| 507 | self.sec(8usize), |
| 508 | self.sec(9usize), |
| 509 | self.sec(10usize), |
| 510 | self.sec(11usize), |
| 511 | self.sec(12usize), |
| 512 | self.sec(13usize), |
| 513 | self.sec(14usize), |
| 514 | self.sec(15usize), |
| 515 | self.sec(16usize), |
| 516 | self.sec(17usize), |
| 517 | self.sec(18usize), |
| 518 | self.sec(19usize), |
| 519 | self.sec(20usize), |
| 520 | self.sec(21usize), |
| 521 | self.sec(22usize), |
| 522 | self.sec(23usize), |
| 523 | self.sec(24usize), |
| 524 | self.sec(25usize), |
| 525 | self.sec(26usize), |
| 526 | self.sec(27usize), |
| 527 | self.sec(28usize), |
| 528 | self.sec(29usize), |
| 529 | self.sec(30usize), |
| 530 | self.sec(31usize), |
| 531 | ], |
| 532 | }; |
| 533 | defmt::write!(f, "{}" , proxy) |
| 534 | } |
| 535 | } |
| 536 | } |
| 537 | |