37 lines
1.2 KiB
Rust
37 lines
1.2 KiB
Rust
pub const INIT: u8 = 0x00;
|
|
pub const PRINT_STATUS: u8 = 0x01;
|
|
pub const PRBS: u8 = 0x02;
|
|
pub const STPL: u8 = 0x03;
|
|
|
|
pub const SYSREF_DELAY_DAC: u8 = 0x10;
|
|
pub const SYSREF_SLIP: u8 = 0x11;
|
|
pub const SYNC: u8 = 0x12;
|
|
|
|
pub const DDMTD_SYSREF_RAW: u8 = 0x20;
|
|
pub const DDMTD_SYSREF: u8 = 0x21;
|
|
|
|
|
|
fn average_2phases(a: i32, b: i32, modulo: i32) -> i32 {
|
|
let diff = ((a - b + modulo/2 + modulo) % modulo) - modulo/2;
|
|
return (modulo + b + diff/2) % modulo;
|
|
}
|
|
|
|
pub fn average_phases(phases: &[i32], modulo: i32) -> i32 {
|
|
if phases.len() == 1 {
|
|
panic!("input array length must be a power of 2");
|
|
} else if phases.len() == 2 {
|
|
average_2phases(phases[0], phases[1], modulo)
|
|
} else {
|
|
let cut = phases.len()/2;
|
|
average_2phases(
|
|
average_phases(&phases[..cut], modulo),
|
|
average_phases(&phases[cut..], modulo),
|
|
modulo)
|
|
}
|
|
}
|
|
|
|
pub const RAW_DDMTD_N_SHIFT: i32 = 6;
|
|
pub const RAW_DDMTD_N: i32 = 1 << RAW_DDMTD_N_SHIFT;
|
|
pub const DDMTD_DITHER_BITS: i32 = 1;
|
|
pub const DDMTD_N_SHIFT: i32 = RAW_DDMTD_N_SHIFT + DDMTD_DITHER_BITS;
|
|
pub const DDMTD_N: i32 = 1 << DDMTD_N_SHIFT; |