diff options
| author | Raul Alimbekov <[email protected]> | 2025-12-16 09:05:22 +0300 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-12-16 09:05:22 +0300 |
| commit | c9a04b4b732b7a3b696eb8223664c1a7942b1875 (patch) | |
| tree | 6dbe5c02e66eed8d8762f13f95afd24f8db2b38c /embassy-nrf/src/radio/ieee802154.rs | |
| parent | cde24a3ef1117653ba5ed4184102b33f745782fb (diff) | |
| parent | 5ae6e060ec1c90561719aabdc29d5b6e7b8b0a82 (diff) | |
Merge branch 'main' into main
Diffstat (limited to 'embassy-nrf/src/radio/ieee802154.rs')
| -rw-r--r-- | embassy-nrf/src/radio/ieee802154.rs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/embassy-nrf/src/radio/ieee802154.rs b/embassy-nrf/src/radio/ieee802154.rs index 62af03a5a..54b463343 100644 --- a/embassy-nrf/src/radio/ieee802154.rs +++ b/embassy-nrf/src/radio/ieee802154.rs | |||
| @@ -1,18 +1,18 @@ | |||
| 1 | //! IEEE 802.15.4 radio driver | 1 | //! IEEE 802.15.4 radio driver |
| 2 | 2 | ||
| 3 | use core::marker::PhantomData; | 3 | use core::marker::PhantomData; |
| 4 | use core::sync::atomic::{compiler_fence, Ordering}; | 4 | use core::sync::atomic::{Ordering, compiler_fence}; |
| 5 | use core::task::Poll; | 5 | use core::task::Poll; |
| 6 | 6 | ||
| 7 | use embassy_hal_internal::drop::OnDrop; | 7 | use embassy_hal_internal::drop::OnDrop; |
| 8 | 8 | ||
| 9 | use super::{Error, InterruptHandler, TxPower}; | 9 | use super::{Error, InterruptHandler, TxPower}; |
| 10 | use crate::Peri; | ||
| 10 | use crate::interrupt::typelevel::Interrupt; | 11 | use crate::interrupt::typelevel::Interrupt; |
| 11 | use crate::interrupt::{self}; | 12 | use crate::interrupt::{self}; |
| 12 | use crate::pac::radio::vals; | 13 | use crate::pac::radio::vals; |
| 13 | pub use crate::pac::radio::vals::State as RadioState; | 14 | pub use crate::pac::radio::vals::State as RadioState; |
| 14 | use crate::radio::Instance; | 15 | use crate::radio::Instance; |
| 15 | use crate::Peri; | ||
| 16 | 16 | ||
| 17 | /// Default (IEEE compliant) Start of Frame Delimiter | 17 | /// Default (IEEE compliant) Start of Frame Delimiter |
| 18 | pub const DEFAULT_SFD: u8 = 0xA7; | 18 | pub const DEFAULT_SFD: u8 = 0xA7; |
| @@ -52,6 +52,7 @@ impl<'d> Radio<'d> { | |||
| 52 | // Disable and enable to reset peripheral | 52 | // Disable and enable to reset peripheral |
| 53 | r.power().write(|w| w.set_power(false)); | 53 | r.power().write(|w| w.set_power(false)); |
| 54 | r.power().write(|w| w.set_power(true)); | 54 | r.power().write(|w| w.set_power(true)); |
| 55 | errata::post_power(); | ||
| 55 | 56 | ||
| 56 | // Enable 802.15.4 mode | 57 | // Enable 802.15.4 mode |
| 57 | r.mode().write(|w| w.set_mode(vals::Mode::IEEE802154_250KBIT)); | 58 | r.mode().write(|w| w.set_mode(vals::Mode::IEEE802154_250KBIT)); |
| @@ -541,3 +542,19 @@ fn dma_start_fence() { | |||
| 541 | fn dma_end_fence() { | 542 | fn dma_end_fence() { |
| 542 | compiler_fence(Ordering::Acquire); | 543 | compiler_fence(Ordering::Acquire); |
| 543 | } | 544 | } |
| 545 | |||
| 546 | mod errata { | ||
| 547 | pub fn post_power() { | ||
| 548 | // Workaround for anomaly 158 | ||
| 549 | #[cfg(feature = "_nrf5340-net")] | ||
| 550 | for i in 0..32 { | ||
| 551 | let info = crate::pac::FICR.trimcnf(i); | ||
| 552 | let addr = info.addr().read(); | ||
| 553 | if addr & 0xFFFF_F000 == crate::pac::RADIO.as_ptr() as u32 { | ||
| 554 | unsafe { | ||
| 555 | (addr as *mut u32).write_volatile(info.data().read()); | ||
| 556 | } | ||
| 557 | } | ||
| 558 | } | ||
| 559 | } | ||
| 560 | } | ||
