Merge pull request #3033 from cschuhen/feature/fdcan_no_generics2

Remove generic argument from FDCAN CanBuilder.
This commit is contained in:
Dario Nieuwenhuis 2024-06-02 19:25:44 +00:00 committed by GitHub
commit 7b590334e6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 46 additions and 57 deletions

View File

@ -73,7 +73,6 @@ impl Registers {
pub fn put_tx_frame(&self, bufidx: usize, header: &Header, buffer: &[u8]) { pub fn put_tx_frame(&self, bufidx: usize, header: &Header, buffer: &[u8]) {
let mailbox = self.tx_buffer_element(bufidx); let mailbox = self.tx_buffer_element(bufidx);
mailbox.reset(); mailbox.reset();
put_tx_header(mailbox, header); put_tx_header(mailbox, header);
put_tx_data(mailbox, &buffer[..header.len() as usize]); put_tx_data(mailbox, &buffer[..header.len() as usize]);
@ -245,12 +244,12 @@ impl Registers {
} }
#[inline] #[inline]
fn reset_msg_ram(&mut self) { fn reset_msg_ram(&self) {
self.msg_ram_mut().reset(); self.msg_ram_mut().reset();
} }
#[inline] #[inline]
fn enter_init_mode(&mut self) { fn enter_init_mode(&self) {
self.regs.cccr().modify(|w| w.set_init(true)); self.regs.cccr().modify(|w| w.set_init(true));
while false == self.regs.cccr().read().init() {} while false == self.regs.cccr().read().init() {}
self.regs.cccr().modify(|w| w.set_cce(true)); self.regs.cccr().modify(|w| w.set_cce(true));
@ -259,7 +258,7 @@ impl Registers {
/// Enables or disables loopback mode: Internally connects the TX and RX /// Enables or disables loopback mode: Internally connects the TX and RX
/// signals together. /// signals together.
#[inline] #[inline]
fn set_loopback_mode(&mut self, mode: LoopbackMode) { fn set_loopback_mode(&self, mode: LoopbackMode) {
let (test, mon, lbck) = match mode { let (test, mon, lbck) = match mode {
LoopbackMode::None => (false, false, false), LoopbackMode::None => (false, false, false),
LoopbackMode::Internal => (true, true, true), LoopbackMode::Internal => (true, true, true),
@ -274,34 +273,34 @@ impl Registers {
/// Enables or disables silent mode: Disconnects the TX signal from the pin. /// Enables or disables silent mode: Disconnects the TX signal from the pin.
#[inline] #[inline]
fn set_bus_monitoring_mode(&mut self, enabled: bool) { fn set_bus_monitoring_mode(&self, enabled: bool) {
self.regs.cccr().modify(|w| w.set_mon(enabled)); self.regs.cccr().modify(|w| w.set_mon(enabled));
} }
#[inline] #[inline]
fn set_restricted_operations(&mut self, enabled: bool) { fn set_restricted_operations(&self, enabled: bool) {
self.regs.cccr().modify(|w| w.set_asm(enabled)); self.regs.cccr().modify(|w| w.set_asm(enabled));
} }
#[inline] #[inline]
fn set_normal_operations(&mut self, _enabled: bool) { fn set_normal_operations(&self, _enabled: bool) {
self.set_loopback_mode(LoopbackMode::None); self.set_loopback_mode(LoopbackMode::None);
} }
#[inline] #[inline]
fn set_test_mode(&mut self, enabled: bool) { fn set_test_mode(&self, enabled: bool) {
self.regs.cccr().modify(|w| w.set_test(enabled)); self.regs.cccr().modify(|w| w.set_test(enabled));
} }
#[inline] #[inline]
fn set_power_down_mode(&mut self, enabled: bool) { fn set_power_down_mode(&self, enabled: bool) {
self.regs.cccr().modify(|w| w.set_csr(enabled)); self.regs.cccr().modify(|w| w.set_csr(enabled));
while self.regs.cccr().read().csa() != enabled {} while self.regs.cccr().read().csa() != enabled {}
} }
/// Moves out of PoweredDownMode and into ConfigMode /// Moves out of PoweredDownMode and into ConfigMode
#[inline] #[inline]
pub fn into_config_mode(mut self, _config: FdCanConfig) { pub fn into_config_mode(self, _config: FdCanConfig) {
self.set_power_down_mode(false); self.set_power_down_mode(false);
self.enter_init_mode(); self.enter_init_mode();
self.reset_msg_ram(); self.reset_msg_ram();
@ -328,7 +327,7 @@ impl Registers {
/// Applies the settings of a new FdCanConfig See [`FdCanConfig`] /// Applies the settings of a new FdCanConfig See [`FdCanConfig`]
#[inline] #[inline]
pub fn apply_config(&mut self, config: FdCanConfig) { pub fn apply_config(&self, config: FdCanConfig) {
self.set_tx_buffer_mode(config.tx_buffer_mode); self.set_tx_buffer_mode(config.tx_buffer_mode);
// set standard filters list size to 28 // set standard filters list size to 28
@ -389,7 +388,7 @@ impl Registers {
} }
#[inline] #[inline]
fn leave_init_mode(&mut self, config: FdCanConfig) { fn leave_init_mode(&self, config: FdCanConfig) {
self.apply_config(config); self.apply_config(config);
self.regs.cccr().modify(|w| w.set_cce(false)); self.regs.cccr().modify(|w| w.set_cce(false));
@ -399,7 +398,7 @@ impl Registers {
/// Moves out of ConfigMode and into specified mode /// Moves out of ConfigMode and into specified mode
#[inline] #[inline]
pub fn into_mode(mut self, config: FdCanConfig, mode: crate::can::_version::OperatingMode) { pub fn into_mode(&self, config: FdCanConfig, mode: crate::can::_version::OperatingMode) {
match mode { match mode {
crate::can::OperatingMode::InternalLoopbackMode => self.set_loopback_mode(LoopbackMode::Internal), crate::can::OperatingMode::InternalLoopbackMode => self.set_loopback_mode(LoopbackMode::Internal),
crate::can::OperatingMode::ExternalLoopbackMode => self.set_loopback_mode(LoopbackMode::External), crate::can::OperatingMode::ExternalLoopbackMode => self.set_loopback_mode(LoopbackMode::External),
@ -423,7 +422,7 @@ impl Registers {
/// Then copy the `CAN_BUS_TIME` register value from the table and pass it as the `btr` /// Then copy the `CAN_BUS_TIME` register value from the table and pass it as the `btr`
/// parameter to this method. /// parameter to this method.
#[inline] #[inline]
pub fn set_nominal_bit_timing(&mut self, btr: NominalBitTiming) { pub fn set_nominal_bit_timing(&self, btr: NominalBitTiming) {
self.regs.nbtp().write(|w| { self.regs.nbtp().write(|w| {
w.set_nbrp(btr.nbrp() - 1); w.set_nbrp(btr.nbrp() - 1);
w.set_ntseg1(btr.ntseg1() - 1); w.set_ntseg1(btr.ntseg1() - 1);
@ -435,7 +434,7 @@ impl Registers {
/// Configures the data bit timings for the FdCan Variable Bitrates. /// Configures the data bit timings for the FdCan Variable Bitrates.
/// This is not used when frame_transmit is set to anything other than AllowFdCanAndBRS. /// This is not used when frame_transmit is set to anything other than AllowFdCanAndBRS.
#[inline] #[inline]
pub fn set_data_bit_timing(&mut self, btr: DataBitTiming) { pub fn set_data_bit_timing(&self, btr: DataBitTiming) {
self.regs.dbtp().write(|w| { self.regs.dbtp().write(|w| {
w.set_dbrp(btr.dbrp() - 1); w.set_dbrp(btr.dbrp() - 1);
w.set_dtseg1(btr.dtseg1() - 1); w.set_dtseg1(btr.dtseg1() - 1);
@ -451,39 +450,39 @@ impl Registers {
/// ///
/// Automatic retransmission is enabled by default. /// Automatic retransmission is enabled by default.
#[inline] #[inline]
pub fn set_automatic_retransmit(&mut self, enabled: bool) { pub fn set_automatic_retransmit(&self, enabled: bool) {
self.regs.cccr().modify(|w| w.set_dar(!enabled)); self.regs.cccr().modify(|w| w.set_dar(!enabled));
} }
/// Configures the transmit pause feature. See /// Configures the transmit pause feature. See
/// [`FdCanConfig::set_transmit_pause`] /// [`FdCanConfig::set_transmit_pause`]
#[inline] #[inline]
pub fn set_transmit_pause(&mut self, enabled: bool) { pub fn set_transmit_pause(&self, enabled: bool) {
self.regs.cccr().modify(|w| w.set_txp(!enabled)); self.regs.cccr().modify(|w| w.set_txp(!enabled));
} }
/// Configures non-iso mode. See [`FdCanConfig::set_non_iso_mode`] /// Configures non-iso mode. See [`FdCanConfig::set_non_iso_mode`]
#[inline] #[inline]
pub fn set_non_iso_mode(&mut self, enabled: bool) { pub fn set_non_iso_mode(&self, enabled: bool) {
self.regs.cccr().modify(|w| w.set_niso(enabled)); self.regs.cccr().modify(|w| w.set_niso(enabled));
} }
/// Configures edge filtering. See [`FdCanConfig::set_edge_filtering`] /// Configures edge filtering. See [`FdCanConfig::set_edge_filtering`]
#[inline] #[inline]
pub fn set_edge_filtering(&mut self, enabled: bool) { pub fn set_edge_filtering(&self, enabled: bool) {
self.regs.cccr().modify(|w| w.set_efbi(enabled)); self.regs.cccr().modify(|w| w.set_efbi(enabled));
} }
/// Configures TX Buffer Mode /// Configures TX Buffer Mode
#[inline] #[inline]
pub fn set_tx_buffer_mode(&mut self, tbm: TxBufferMode) { pub fn set_tx_buffer_mode(&self, tbm: TxBufferMode) {
self.regs.txbc().write(|w| w.set_tfqm(tbm.into())); self.regs.txbc().write(|w| w.set_tfqm(tbm.into()));
} }
/// Configures frame transmission mode. See /// Configures frame transmission mode. See
/// [`FdCanConfig::set_frame_transmit`] /// [`FdCanConfig::set_frame_transmit`]
#[inline] #[inline]
pub fn set_frame_transmit(&mut self, fts: FrameTransmissionConfig) { pub fn set_frame_transmit(&self, fts: FrameTransmissionConfig) {
let (fdoe, brse) = match fts { let (fdoe, brse) = match fts {
FrameTransmissionConfig::ClassicCanOnly => (false, false), FrameTransmissionConfig::ClassicCanOnly => (false, false),
FrameTransmissionConfig::AllowFdCan => (true, false), FrameTransmissionConfig::AllowFdCan => (true, false),
@ -501,14 +500,14 @@ impl Registers {
/// Sets the protocol exception handling on/off /// Sets the protocol exception handling on/off
#[inline] #[inline]
pub fn set_protocol_exception_handling(&mut self, enabled: bool) { pub fn set_protocol_exception_handling(&self, enabled: bool) {
self.regs.cccr().modify(|w| w.set_pxhd(!enabled)); self.regs.cccr().modify(|w| w.set_pxhd(!enabled));
} }
/// Configures and resets the timestamp counter /// Configures and resets the timestamp counter
#[inline] #[inline]
#[allow(unused)] #[allow(unused)]
pub fn set_timestamp_counter_source(&mut self, select: TimestampSource) { pub fn set_timestamp_counter_source(&self, select: TimestampSource) {
#[cfg(can_fdcan_h7)] #[cfg(can_fdcan_h7)]
let (tcp, tss) = match select { let (tcp, tss) = match select {
TimestampSource::None => (0, 0), TimestampSource::None => (0, 0),
@ -532,7 +531,7 @@ impl Registers {
#[cfg(not(can_fdcan_h7))] #[cfg(not(can_fdcan_h7))]
/// Configures the global filter settings /// Configures the global filter settings
#[inline] #[inline]
pub fn set_global_filter(&mut self, filter: GlobalFilter) { pub fn set_global_filter(&self, filter: GlobalFilter) {
let anfs = match filter.handle_standard_frames { let anfs = match filter.handle_standard_frames {
crate::can::fd::config::NonMatchingFilter::IntoRxFifo0 => stm32_metapac::can::vals::Anfs::ACCEPT_FIFO_0, crate::can::fd::config::NonMatchingFilter::IntoRxFifo0 => stm32_metapac::can::vals::Anfs::ACCEPT_FIFO_0,
crate::can::fd::config::NonMatchingFilter::IntoRxFifo1 => stm32_metapac::can::vals::Anfs::ACCEPT_FIFO_1, crate::can::fd::config::NonMatchingFilter::IntoRxFifo1 => stm32_metapac::can::vals::Anfs::ACCEPT_FIFO_1,
@ -555,7 +554,7 @@ impl Registers {
#[cfg(can_fdcan_h7)] #[cfg(can_fdcan_h7)]
/// Configures the global filter settings /// Configures the global filter settings
#[inline] #[inline]
pub fn set_global_filter(&mut self, filter: GlobalFilter) { pub fn set_global_filter(&self, filter: GlobalFilter) {
let anfs = match filter.handle_standard_frames { let anfs = match filter.handle_standard_frames {
crate::can::fd::config::NonMatchingFilter::IntoRxFifo0 => 0, crate::can::fd::config::NonMatchingFilter::IntoRxFifo0 => 0,
crate::can::fd::config::NonMatchingFilter::IntoRxFifo1 => 1, crate::can::fd::config::NonMatchingFilter::IntoRxFifo1 => 1,
@ -577,10 +576,10 @@ impl Registers {
} }
#[cfg(not(can_fdcan_h7))] #[cfg(not(can_fdcan_h7))]
fn configure_msg_ram(&mut self) {} fn configure_msg_ram(&self) {}
#[cfg(can_fdcan_h7)] #[cfg(can_fdcan_h7)]
fn configure_msg_ram(&mut self) { fn configure_msg_ram(&self) {
let r = self.regs; let r = self.regs;
use crate::can::fd::message_ram::*; use crate::can::fd::message_ram::*;

View File

@ -141,13 +141,16 @@ pub enum OperatingMode {
//TestMode, //TestMode,
} }
fn calc_ns_per_timer_tick<T: Instance>(mode: crate::can::fd::config::FrameTransmissionConfig) -> u64 { fn calc_ns_per_timer_tick(
info: &'static Info,
freq: crate::time::Hertz,
mode: crate::can::fd::config::FrameTransmissionConfig,
) -> u64 {
match mode { match mode {
// Use timestamp from Rx FIFO to adjust timestamp reported to user // Use timestamp from Rx FIFO to adjust timestamp reported to user
crate::can::fd::config::FrameTransmissionConfig::ClassicCanOnly => { crate::can::fd::config::FrameTransmissionConfig::ClassicCanOnly => {
let freq = T::frequency(); let prescale: u64 = ({ info.regs.regs.nbtp().read().nbrp() } + 1) as u64
let prescale: u64 = ({ T::registers().regs.nbtp().read().nbrp() } + 1) as u64 * ({ info.regs.regs.tscc().read().tcp() } + 1) as u64;
* ({ T::registers().regs.tscc().read().tcp() } + 1) as u64;
1_000_000_000 as u64 / (freq.0 as u64 * prescale) 1_000_000_000 as u64 / (freq.0 as u64 * prescale)
} }
// For VBR this is too hard because the FDCAN timer switches clock rate you need to configure to use // For VBR this is too hard because the FDCAN timer switches clock rate you need to configure to use
@ -158,28 +161,28 @@ fn calc_ns_per_timer_tick<T: Instance>(mode: crate::can::fd::config::FrameTransm
/// FDCAN Configuration instance instance /// FDCAN Configuration instance instance
/// Create instance of this first /// Create instance of this first
pub struct CanConfigurator<'d, T: Instance> { pub struct CanConfigurator<'d> {
_phantom: PhantomData<&'d ()>,
config: crate::can::fd::config::FdCanConfig, config: crate::can::fd::config::FdCanConfig,
info: &'static Info, info: &'static Info,
state: &'static State, state: &'static State,
/// Reference to internals. /// Reference to internals.
_instance: FdcanInstance<'d, T>,
properties: Properties, properties: Properties,
periph_clock: crate::time::Hertz, periph_clock: crate::time::Hertz,
} }
impl<'d, T: Instance> CanConfigurator<'d, T> { impl<'d> CanConfigurator<'d> {
/// Creates a new Fdcan instance, keeping the peripheral in sleep mode. /// Creates a new Fdcan instance, keeping the peripheral in sleep mode.
/// You must call [Fdcan::enable_non_blocking] to use the peripheral. /// You must call [Fdcan::enable_non_blocking] to use the peripheral.
pub fn new( pub fn new<T: Instance>(
peri: impl Peripheral<P = T> + 'd, _peri: impl Peripheral<P = T> + 'd,
rx: impl Peripheral<P = impl RxPin<T>> + 'd, rx: impl Peripheral<P = impl RxPin<T>> + 'd,
tx: impl Peripheral<P = impl TxPin<T>> + 'd, tx: impl Peripheral<P = impl TxPin<T>> + 'd,
_irqs: impl interrupt::typelevel::Binding<T::IT0Interrupt, IT0InterruptHandler<T>> _irqs: impl interrupt::typelevel::Binding<T::IT0Interrupt, IT0InterruptHandler<T>>
+ interrupt::typelevel::Binding<T::IT1Interrupt, IT1InterruptHandler<T>> + interrupt::typelevel::Binding<T::IT1Interrupt, IT1InterruptHandler<T>>
+ 'd, + 'd,
) -> CanConfigurator<'d, T> { ) -> CanConfigurator<'d> {
into_ref!(peri, rx, tx); into_ref!(_peri, rx, tx);
rx.set_as_af(rx.af_num(), AFType::Input); rx.set_as_af(rx.af_num(), AFType::Input);
tx.set_as_af(tx.af_num(), AFType::OutputPushPull); tx.set_as_af(tx.af_num(), AFType::OutputPushPull);
@ -201,10 +204,10 @@ impl<'d, T: Instance> CanConfigurator<'d, T> {
T::IT1Interrupt::enable(); T::IT1Interrupt::enable();
} }
Self { Self {
_phantom: PhantomData,
config, config,
info: T::info(), info: T::info(),
state: T::state(), state: T::state(),
_instance: FdcanInstance(peri),
properties: Properties::new(T::info()), properties: Properties::new(T::info()),
periph_clock: T::frequency(), periph_clock: T::frequency(),
} }
@ -255,7 +258,7 @@ impl<'d, T: Instance> CanConfigurator<'d, T> {
/// Start in mode. /// Start in mode.
pub fn start(self, mode: OperatingMode) -> Can<'d> { pub fn start(self, mode: OperatingMode) -> Can<'d> {
let ns_per_timer_tick = calc_ns_per_timer_tick::<T>(self.config.frame_transmit); let ns_per_timer_tick = calc_ns_per_timer_tick(self.info, self.periph_clock, self.config.frame_transmit);
critical_section::with(|_| { critical_section::with(|_| {
let state = self.state as *const State; let state = self.state as *const State;
unsafe { unsafe {
@ -263,15 +266,14 @@ impl<'d, T: Instance> CanConfigurator<'d, T> {
(*mut_state).ns_per_timer_tick = ns_per_timer_tick; (*mut_state).ns_per_timer_tick = ns_per_timer_tick;
} }
}); });
T::registers().into_mode(self.config, mode); self.info.regs.into_mode(self.config, mode);
Can { Can {
_phantom: PhantomData, _phantom: PhantomData,
config: self.config, config: self.config,
info: self.info, info: self.info,
state: self.state, state: self.state,
instance: T::info().regs.regs,
_mode: mode, _mode: mode,
properties: Properties::new(T::info()), properties: Properties::new(self.info),
} }
} }
@ -297,7 +299,6 @@ pub struct Can<'d> {
config: crate::can::fd::config::FdCanConfig, config: crate::can::fd::config::FdCanConfig,
info: &'static Info, info: &'static Info,
state: &'static State, state: &'static State,
instance: crate::pac::can::Fdcan,
_mode: OperatingMode, _mode: OperatingMode,
properties: Properties, properties: Properties,
} }
@ -360,14 +361,12 @@ impl<'d> Can<'d> {
info: self.info, info: self.info,
state: self.state, state: self.state,
config: self.config, config: self.config,
_instance: self.instance,
_mode: self._mode, _mode: self._mode,
}, },
CanRx { CanRx {
_phantom: PhantomData, _phantom: PhantomData,
info: self.info, info: self.info,
state: self.state, state: self.state,
_instance: self.instance,
_mode: self._mode, _mode: self._mode,
}, },
self.properties, self.properties,
@ -380,7 +379,6 @@ impl<'d> Can<'d> {
config: tx.config, config: tx.config,
info: tx.info, info: tx.info,
state: tx.state, state: tx.state,
instance: tx._instance,
_mode: rx._mode, _mode: rx._mode,
properties: Properties::new(tx.info), properties: Properties::new(tx.info),
} }
@ -392,7 +390,7 @@ impl<'d> Can<'d> {
tx_buf: &'static mut TxBuf<TX_BUF_SIZE>, tx_buf: &'static mut TxBuf<TX_BUF_SIZE>,
rxb: &'static mut RxBuf<RX_BUF_SIZE>, rxb: &'static mut RxBuf<RX_BUF_SIZE>,
) -> BufferedCan<'d, TX_BUF_SIZE, RX_BUF_SIZE> { ) -> BufferedCan<'d, TX_BUF_SIZE, RX_BUF_SIZE> {
BufferedCan::new(self.info, self.state, self.info.regs.regs, self._mode, tx_buf, rxb) BufferedCan::new(self.info, self.state, self._mode, tx_buf, rxb)
} }
/// Return a buffered instance of driver with CAN FD support. User must supply Buffers /// Return a buffered instance of driver with CAN FD support. User must supply Buffers
@ -401,7 +399,7 @@ impl<'d> Can<'d> {
tx_buf: &'static mut TxFdBuf<TX_BUF_SIZE>, tx_buf: &'static mut TxFdBuf<TX_BUF_SIZE>,
rxb: &'static mut RxFdBuf<RX_BUF_SIZE>, rxb: &'static mut RxFdBuf<RX_BUF_SIZE>,
) -> BufferedCanFd<'d, TX_BUF_SIZE, RX_BUF_SIZE> { ) -> BufferedCanFd<'d, TX_BUF_SIZE, RX_BUF_SIZE> {
BufferedCanFd::new(self.info, self.state, self.info.regs.regs, self._mode, tx_buf, rxb) BufferedCanFd::new(self.info, self.state, self._mode, tx_buf, rxb)
} }
} }
@ -416,7 +414,6 @@ pub struct BufferedCan<'d, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> {
_phantom: PhantomData<&'d ()>, _phantom: PhantomData<&'d ()>,
info: &'static Info, info: &'static Info,
state: &'static State, state: &'static State,
_instance: crate::pac::can::Fdcan,
_mode: OperatingMode, _mode: OperatingMode,
tx_buf: &'static TxBuf<TX_BUF_SIZE>, tx_buf: &'static TxBuf<TX_BUF_SIZE>,
rx_buf: &'static RxBuf<RX_BUF_SIZE>, rx_buf: &'static RxBuf<RX_BUF_SIZE>,
@ -427,7 +424,6 @@ impl<'c, 'd, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> BufferedCan<'d,
fn new( fn new(
info: &'static Info, info: &'static Info,
state: &'static State, state: &'static State,
_instance: crate::pac::can::Fdcan,
_mode: OperatingMode, _mode: OperatingMode,
tx_buf: &'static TxBuf<TX_BUF_SIZE>, tx_buf: &'static TxBuf<TX_BUF_SIZE>,
rx_buf: &'static RxBuf<RX_BUF_SIZE>, rx_buf: &'static RxBuf<RX_BUF_SIZE>,
@ -436,7 +432,6 @@ impl<'c, 'd, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> BufferedCan<'d,
_phantom: PhantomData, _phantom: PhantomData,
info, info,
state, state,
_instance,
_mode, _mode,
tx_buf, tx_buf,
rx_buf, rx_buf,
@ -549,7 +544,6 @@ pub struct BufferedCanFd<'d, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize>
_phantom: PhantomData<&'d ()>, _phantom: PhantomData<&'d ()>,
info: &'static Info, info: &'static Info,
state: &'static State, state: &'static State,
_instance: crate::pac::can::Fdcan,
_mode: OperatingMode, _mode: OperatingMode,
tx_buf: &'static TxFdBuf<TX_BUF_SIZE>, tx_buf: &'static TxFdBuf<TX_BUF_SIZE>,
rx_buf: &'static RxFdBuf<RX_BUF_SIZE>, rx_buf: &'static RxFdBuf<RX_BUF_SIZE>,
@ -560,7 +554,6 @@ impl<'c, 'd, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> BufferedCanFd<'
fn new( fn new(
info: &'static Info, info: &'static Info,
state: &'static State, state: &'static State,
_instance: crate::pac::can::Fdcan,
_mode: OperatingMode, _mode: OperatingMode,
tx_buf: &'static TxFdBuf<TX_BUF_SIZE>, tx_buf: &'static TxFdBuf<TX_BUF_SIZE>,
rx_buf: &'static RxFdBuf<RX_BUF_SIZE>, rx_buf: &'static RxFdBuf<RX_BUF_SIZE>,
@ -569,7 +562,6 @@ impl<'c, 'd, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> BufferedCanFd<'
_phantom: PhantomData, _phantom: PhantomData,
info, info,
state, state,
_instance,
_mode, _mode,
tx_buf, tx_buf,
rx_buf, rx_buf,
@ -646,7 +638,6 @@ pub struct CanRx<'d> {
_phantom: PhantomData<&'d ()>, _phantom: PhantomData<&'d ()>,
info: &'static Info, info: &'static Info,
state: &'static State, state: &'static State,
_instance: crate::pac::can::Fdcan,
_mode: OperatingMode, _mode: OperatingMode,
} }
@ -668,7 +659,6 @@ pub struct CanTx<'d> {
info: &'static Info, info: &'static Info,
state: &'static State, state: &'static State,
config: crate::can::fd::config::FdCanConfig, config: crate::can::fd::config::FdCanConfig,
_instance: crate::pac::can::Fdcan,
_mode: OperatingMode, _mode: OperatingMode,
} }