diff options
| author | Dario Nieuwenhuis <[email protected]> | 2023-12-18 18:43:01 +0100 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2023-12-18 18:44:51 +0100 |
| commit | 21fce1e19501171cfd3a5ddd32556961410bd024 (patch) | |
| tree | b50e2da454920c2815fc01b21374198f0e0e8662 | |
| parent | 3f0920c4009b1d9c1138e9c8eb2f0f9471aa3b2d (diff) | |
stm32/can: cleanup interrupt traits.
| -rw-r--r-- | embassy-stm32/src/can/bxcan.rs | 52 |
1 files changed, 10 insertions, 42 deletions
diff --git a/embassy-stm32/src/can/bxcan.rs b/embassy-stm32/src/can/bxcan.rs index 2f7417340..788360249 100644 --- a/embassy-stm32/src/can/bxcan.rs +++ b/embassy-stm32/src/can/bxcan.rs | |||
| @@ -585,30 +585,18 @@ pub(crate) mod sealed { | |||
| 585 | pub trait Instance { | 585 | pub trait Instance { |
| 586 | const REGISTERS: *mut bxcan::RegisterBlock; | 586 | const REGISTERS: *mut bxcan::RegisterBlock; |
| 587 | 587 | ||
| 588 | fn regs() -> &'static crate::pac::can::Can; | 588 | fn regs() -> crate::pac::can::Can; |
| 589 | fn state() -> &'static State; | 589 | fn state() -> &'static State; |
| 590 | } | 590 | } |
| 591 | } | 591 | } |
| 592 | 592 | ||
| 593 | pub trait TXInstance { | 593 | pub trait Instance: sealed::Instance + RccPeripheral + 'static { |
| 594 | type TXInterrupt: crate::interrupt::typelevel::Interrupt; | 594 | type TXInterrupt: crate::interrupt::typelevel::Interrupt; |
| 595 | } | ||
| 596 | |||
| 597 | pub trait RX0Instance { | ||
| 598 | type RX0Interrupt: crate::interrupt::typelevel::Interrupt; | 595 | type RX0Interrupt: crate::interrupt::typelevel::Interrupt; |
| 599 | } | ||
| 600 | |||
| 601 | pub trait RX1Instance { | ||
| 602 | type RX1Interrupt: crate::interrupt::typelevel::Interrupt; | 596 | type RX1Interrupt: crate::interrupt::typelevel::Interrupt; |
| 603 | } | ||
| 604 | |||
| 605 | pub trait SCEInstance { | ||
| 606 | type SCEInterrupt: crate::interrupt::typelevel::Interrupt; | 597 | type SCEInterrupt: crate::interrupt::typelevel::Interrupt; |
| 607 | } | 598 | } |
| 608 | 599 | ||
| 609 | pub trait InterruptableInstance: TXInstance + RX0Instance + RX1Instance + SCEInstance {} | ||
| 610 | pub trait Instance: sealed::Instance + RccPeripheral + InterruptableInstance + 'static {} | ||
| 611 | |||
| 612 | pub struct BxcanInstance<'a, T>(PeripheralRef<'a, T>); | 600 | pub struct BxcanInstance<'a, T>(PeripheralRef<'a, T>); |
| 613 | 601 | ||
| 614 | unsafe impl<'d, T: Instance> bxcan::Instance for BxcanInstance<'d, T> { | 602 | unsafe impl<'d, T: Instance> bxcan::Instance for BxcanInstance<'d, T> { |
| @@ -620,8 +608,8 @@ foreach_peripheral!( | |||
| 620 | impl sealed::Instance for peripherals::$inst { | 608 | impl sealed::Instance for peripherals::$inst { |
| 621 | const REGISTERS: *mut bxcan::RegisterBlock = crate::pac::$inst.as_ptr() as *mut _; | 609 | const REGISTERS: *mut bxcan::RegisterBlock = crate::pac::$inst.as_ptr() as *mut _; |
| 622 | 610 | ||
| 623 | fn regs() -> &'static crate::pac::can::Can { | 611 | fn regs() -> crate::pac::can::Can { |
| 624 | &crate::pac::$inst | 612 | crate::pac::$inst |
| 625 | } | 613 | } |
| 626 | 614 | ||
| 627 | fn state() -> &'static sealed::State { | 615 | fn state() -> &'static sealed::State { |
| @@ -630,32 +618,12 @@ foreach_peripheral!( | |||
| 630 | } | 618 | } |
| 631 | } | 619 | } |
| 632 | 620 | ||
| 633 | impl Instance for peripherals::$inst {} | 621 | impl Instance for peripherals::$inst { |
| 634 | 622 | type TXInterrupt = crate::_generated::peripheral_interrupts::$inst::TX; | |
| 635 | foreach_interrupt!( | 623 | type RX0Interrupt = crate::_generated::peripheral_interrupts::$inst::RX0; |
| 636 | ($inst,can,CAN,TX,$irq:ident) => { | 624 | type RX1Interrupt = crate::_generated::peripheral_interrupts::$inst::RX1; |
| 637 | impl TXInstance for peripherals::$inst { | 625 | type SCEInterrupt = crate::_generated::peripheral_interrupts::$inst::SCE; |
| 638 | type TXInterrupt = crate::interrupt::typelevel::$irq; | 626 | } |
| 639 | } | ||
| 640 | }; | ||
| 641 | ($inst,can,CAN,RX0,$irq:ident) => { | ||
| 642 | impl RX0Instance for peripherals::$inst { | ||
| 643 | type RX0Interrupt = crate::interrupt::typelevel::$irq; | ||
| 644 | } | ||
| 645 | }; | ||
| 646 | ($inst,can,CAN,RX1,$irq:ident) => { | ||
| 647 | impl RX1Instance for peripherals::$inst { | ||
| 648 | type RX1Interrupt = crate::interrupt::typelevel::$irq; | ||
| 649 | } | ||
| 650 | }; | ||
| 651 | ($inst,can,CAN,SCE,$irq:ident) => { | ||
| 652 | impl SCEInstance for peripherals::$inst { | ||
| 653 | type SCEInterrupt = crate::interrupt::typelevel::$irq; | ||
| 654 | } | ||
| 655 | }; | ||
| 656 | ); | ||
| 657 | |||
| 658 | impl InterruptableInstance for peripherals::$inst {} | ||
| 659 | }; | 627 | }; |
| 660 | ); | 628 | ); |
| 661 | 629 | ||
