aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2023-12-18 18:43:01 +0100
committerDario Nieuwenhuis <[email protected]>2023-12-18 18:44:51 +0100
commit21fce1e19501171cfd3a5ddd32556961410bd024 (patch)
treeb50e2da454920c2815fc01b21374198f0e0e8662
parent3f0920c4009b1d9c1138e9c8eb2f0f9471aa3b2d (diff)
stm32/can: cleanup interrupt traits.
-rw-r--r--embassy-stm32/src/can/bxcan.rs52
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
593pub trait TXInstance { 593pub trait Instance: sealed::Instance + RccPeripheral + 'static {
594 type TXInterrupt: crate::interrupt::typelevel::Interrupt; 594 type TXInterrupt: crate::interrupt::typelevel::Interrupt;
595}
596
597pub trait RX0Instance {
598 type RX0Interrupt: crate::interrupt::typelevel::Interrupt; 595 type RX0Interrupt: crate::interrupt::typelevel::Interrupt;
599}
600
601pub trait RX1Instance {
602 type RX1Interrupt: crate::interrupt::typelevel::Interrupt; 596 type RX1Interrupt: crate::interrupt::typelevel::Interrupt;
603}
604
605pub trait SCEInstance {
606 type SCEInterrupt: crate::interrupt::typelevel::Interrupt; 597 type SCEInterrupt: crate::interrupt::typelevel::Interrupt;
607} 598}
608 599
609pub trait InterruptableInstance: TXInstance + RX0Instance + RX1Instance + SCEInstance {}
610pub trait Instance: sealed::Instance + RccPeripheral + InterruptableInstance + 'static {}
611
612pub struct BxcanInstance<'a, T>(PeripheralRef<'a, T>); 600pub struct BxcanInstance<'a, T>(PeripheralRef<'a, T>);
613 601
614unsafe impl<'d, T: Instance> bxcan::Instance for BxcanInstance<'d, T> { 602unsafe 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