lpc8xx_hal/spi/
interrupts.rs

1use super::Instance;
2
3macro_rules! interrupts {
4    (
5        $(
6            $doc:expr,
7            $field:ident,
8            $reg_field:ident;
9        )*
10    ) => {
11        /// Used to enable or disable SPI interrupts
12        ///
13        /// See [`SPI::enable_interrupts`] or [`SPI::disable_interrupts`].
14        ///
15        /// [`SPI::enable_interrupts`]: struct.SPI.html#method.enable_interrupts
16        /// [`SPI::disable_interrupts`]: struct.SPI.html#method.disable_interrupts
17        pub struct Interrupts {
18            $(
19                #[doc = $doc]
20                pub $field: bool,
21            )*
22        }
23
24        impl Interrupts {
25            pub(super) fn enable<I: Instance>(&self, spi: &I) {
26                spi.intenset.write(|w| {
27                    $(
28                        if self.$field {
29                            w.$reg_field().set_bit();
30                        }
31                    )*
32
33                    w
34                })
35            }
36
37            pub(super) fn disable<I: Instance>(&self, spi: &I) {
38                spi.intenclr.write(|w| {
39                    $(
40                        if self.$field {
41                            w.$reg_field().set_bit();
42                        }
43                    )*
44
45                    w
46                })
47            }
48        }
49
50        impl Default for Interrupts {
51            fn default() -> Self {
52                Self {
53                    $(
54                        $field: false,
55                    )*
56                }
57            }
58        }
59    };
60}
61
62interrupts!(
63    "RX Ready", rx_ready, rxrdyen;
64    "TX Ready", tx_ready, txrdyen;
65    "Receiver Overrun", rx_overrun, rxoven;
66    "Transmitter Underrun", tx_underrun, txuren;
67    "Slave Select Asserted", slave_select_asserted, ssaen;
68    "Slave Select Deasserted", slave_select_deasserted, ssden;
69);