aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorin Cooper-Bennun <[email protected]>2024-02-27 14:59:02 +0000
committerCorey Schuhen <[email protected]>2024-03-02 10:08:20 +1000
commit30606f9782247b7f0e485b39042100ec3286aaa2 (patch)
treef9e0e25033e03f8e3e8711aa04d1951a537fb757
parent64890498ca6d6193ca0ac30952c24a657b8b88f3 (diff)
stm32: can: fd: allow TX buffers in FIFO mode
-rw-r--r--embassy-stm32/src/can/fd/config.rs21
-rw-r--r--embassy-stm32/src/can/fd/peripheral.rs6
2 files changed, 23 insertions, 4 deletions
diff --git a/embassy-stm32/src/can/fd/config.rs b/embassy-stm32/src/can/fd/config.rs
index f2401d92f..e959913e4 100644
--- a/embassy-stm32/src/can/fd/config.rs
+++ b/embassy-stm32/src/can/fd/config.rs
@@ -287,6 +287,24 @@ impl Default for GlobalFilter {
287 } 287 }
288} 288}
289 289
290/// TX buffer operation mode
291#[derive(Clone, Copy, Debug)]
292pub enum TxBufferMode {
293 /// TX FIFO operation
294 Fifo,
295 /// TX queue operation
296 Queue,
297}
298
299impl From<TxBufferMode> for crate::pac::can::vals::Tfqm {
300 fn from(value: TxBufferMode) -> Self {
301 match value {
302 TxBufferMode::Queue => Self::QUEUE,
303 TxBufferMode::Fifo => Self::FIFO,
304 }
305 }
306}
307
290/// FdCan Config Struct 308/// FdCan Config Struct
291#[derive(Clone, Copy, Debug)] 309#[derive(Clone, Copy, Debug)]
292pub struct FdCanConfig { 310pub struct FdCanConfig {
@@ -327,6 +345,8 @@ pub struct FdCanConfig {
327 pub timestamp_source: TimestampSource, 345 pub timestamp_source: TimestampSource,
328 /// Configures the Global Filter 346 /// Configures the Global Filter
329 pub global_filter: GlobalFilter, 347 pub global_filter: GlobalFilter,
348 /// TX buffer mode (FIFO or queue)
349 pub tx_buffer_mode: TxBufferMode,
330} 350}
331 351
332impl FdCanConfig { 352impl FdCanConfig {
@@ -433,6 +453,7 @@ impl Default for FdCanConfig {
433 clock_divider: ClockDivider::_1, 453 clock_divider: ClockDivider::_1,
434 timestamp_source: TimestampSource::None, 454 timestamp_source: TimestampSource::None,
435 global_filter: GlobalFilter::default(), 455 global_filter: GlobalFilter::default(),
456 tx_buffer_mode: TxBufferMode::Queue,
436 } 457 }
437 } 458 }
438} 459}
diff --git a/embassy-stm32/src/can/fd/peripheral.rs b/embassy-stm32/src/can/fd/peripheral.rs
index e87a3c213..0ebbdb3b7 100644
--- a/embassy-stm32/src/can/fd/peripheral.rs
+++ b/embassy-stm32/src/can/fd/peripheral.rs
@@ -302,10 +302,8 @@ impl Registers {
302 302
303 // Framework specific settings are set here 303 // Framework specific settings are set here
304 304
305 // set TxBuffer to Queue Mode 305 // set TxBuffer Mode
306 self.regs 306 self.regs.txbc().write(|w| w.set_tfqm(_config.tx_buffer_mode.into()));
307 .txbc()
308 .write(|w| w.set_tfqm(crate::pac::can::vals::Tfqm::QUEUE));
309 307
310 // set standard filters list size to 28 308 // set standard filters list size to 28
311 // set extended filters list size to 8 309 // set extended filters list size to 8