diff options
| author | Torin Cooper-Bennun <[email protected]> | 2024-02-27 14:59:02 +0000 |
|---|---|---|
| committer | Corey Schuhen <[email protected]> | 2024-03-02 10:08:20 +1000 |
| commit | 30606f9782247b7f0e485b39042100ec3286aaa2 (patch) | |
| tree | f9e0e25033e03f8e3e8711aa04d1951a537fb757 | |
| parent | 64890498ca6d6193ca0ac30952c24a657b8b88f3 (diff) | |
stm32: can: fd: allow TX buffers in FIFO mode
| -rw-r--r-- | embassy-stm32/src/can/fd/config.rs | 21 | ||||
| -rw-r--r-- | embassy-stm32/src/can/fd/peripheral.rs | 6 |
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)] | ||
| 292 | pub enum TxBufferMode { | ||
| 293 | /// TX FIFO operation | ||
| 294 | Fifo, | ||
| 295 | /// TX queue operation | ||
| 296 | Queue, | ||
| 297 | } | ||
| 298 | |||
| 299 | impl 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)] |
| 292 | pub struct FdCanConfig { | 310 | pub 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 | ||
| 332 | impl FdCanConfig { | 352 | impl 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 |
