Cal skew: use static must

morgan 2024-04-09 12:47:09 +08:00
parent 611c08262f
commit 20732c0de1
1 changed files with 12 additions and 6 deletions

View File

@ -352,9 +352,9 @@ pub mod wrpll {
use super::*; use super::*;
#[cfg(wrpll_ref_clk = "GT_CDR")] #[cfg(wrpll_ref_clk = "GT_CDR")]
static TAG_OFFSET: Mutex<u32> = Mutex::new(19050); static mut TAG_OFFSET: u32 = 19050;
#[cfg(wrpll_ref_clk = "SMA_CLKIN")] #[cfg(wrpll_ref_clk = "SMA_CLKIN")]
static TAG_OFFSET: Mutex<u32> = Mutex::new(0); static mut TAG_OFFSET: u32 = 0;
static mut REF_TAG: u32 = 0; static mut REF_TAG: u32 = 0;
static mut REF_TAG_READY: bool = false; static mut REF_TAG_READY: bool = false;
static mut MAIN_TAG: u32 = 0; static mut MAIN_TAG: u32 = 0;
@ -394,12 +394,14 @@ pub mod wrpll {
#[cfg(feature = "calibrate_wrpll_skew")] #[cfg(feature = "calibrate_wrpll_skew")]
pub fn set_tag_offset(offset: u32) { pub fn set_tag_offset(offset: u32) {
*TAG_OFFSET.lock() = offset; unsafe {
TAG_OFFSET = offset;
}
} }
#[cfg(feature = "calibrate_wrpll_skew")] #[cfg(feature = "calibrate_wrpll_skew")]
pub fn get_tag_offset() -> u32 { pub fn get_tag_offset() -> u32 {
*TAG_OFFSET.lock() unsafe { TAG_OFFSET }
} }
pub fn get_period_error() -> i32 { pub fn get_period_error() -> i32 {
@ -415,8 +417,12 @@ pub mod wrpll {
pub fn get_phase_error() -> i32 { pub fn get_phase_error() -> i32 {
// MAIN_TAG(n) - REF_TAG(n) - TAG_OFFSET mod BEATING_PERIOD // MAIN_TAG(n) - REF_TAG(n) - TAG_OFFSET mod BEATING_PERIOD
let mut phase_error = let mut phase_error = unsafe {
unsafe { MAIN_TAG.overflowing_sub(REF_TAG).0.rem_euclid(BEATING_PERIOD as u32) as i32 }; MAIN_TAG
.overflowing_sub(REF_TAG + TAG_OFFSET)
.0
.rem_euclid(BEATING_PERIOD as u32) as i32
};
// mapping tags from [0, 2π] -> [-π, π] // mapping tags from [0, 2π] -> [-π, π]
if phase_error > BEATING_HALFPERIOD { if phase_error > BEATING_HALFPERIOD {