#[repr(C)]
pub struct Ccfg {
pub ext_lf_clk: u32,
pub mode_conf_1: u32,
pub size_and_dis_flags: u32,
pub mode_conf: u32,
pub volt_load_0: u32,
pub volt_load_1: u32,
pub rtc_offset: u32,
pub freq_offset: u32,
pub ieee_mac_0: u32,
pub ieee_mac_1: u32,
pub ieee_ble_0: u32,
pub ieee_ble_1: u32,
pub bl_config: u32,
pub erase_conf: u32,
pub ccfg_ti_options: u32,
pub ccfg_tap_dap_0: u32,
pub ccfg_tap_dap_1: u32,
pub image_valid_conf: u32,
pub ccfg_prot_31_0: u32,
pub ccfg_prot_63_32: u32,
pub ccfg_prot_95_64: u32,
pub ccfg_prot_127_96: u32,
}
impl Ccfg {
pub const fn new() -> Self {
Self {
ext_lf_clk: ext_lf_clk(
CCFG_DEFAULT_EXT_LF_CLK_RTC_INCREMENT,
CCFG_DEFAULT_EXT_LF_CLK_DIO,
),
mode_conf_1: mode_conf_1(
CCFG_DEFAULT_MODE_CONF_1_ALT_DCDC_VMIN,
CCFG_DEFAULT_MODE_CONF_1_ALT_DCDC_DITHER_EN,
CCFG_DEFAULT_MODE_CONF_1_ALT_DCDC_IPEAK,
CCFG_DEFAULT_MODE_CONF_1_ALT_IBIAS_INIT,
CCFG_DEFAULT_MODE_CONF_1_ALT_IBIAS_OFFSET,
CCFG_DEFAULT_MODE_CONF_1_ALT_XOSC_MAX_START,
),
size_and_dis_flags: size_and_dis_flags(true, true, false, true),
mode_conf: mode_conf(
CCFG_DEFAULT_MODE_CONF_VDDR_TRIM_SLEEP_DELTA,
CCFG_DEFAULT_MODE_CONF_DCDC_RECHARGE_DISABLE,
false,
CCFG_DEFAULT_MODE_CONF_VDDS_BOD_LEVEL,
CCFG_DEFAULT_MODE_CONF_SCLK_LF,
true,
CCFG_DEFAULT_MODE_CONF_XOSC_HF,
true,
0xFF,
CCFG_DEFAULT_MODE_CONF_VDDR_CAP,
),
volt_load_0: 0xffffffff, volt_load_1: 0xffffffff, rtc_offset: 0xffffffff, freq_offset: 0xffffffff, ieee_mac_0: 0xffffffff,
ieee_mac_1: 0xffffffff,
ieee_ble_0: 0xffffffff,
ieee_ble_1: 0xffffffff,
bl_config: bl_config(
CCFG_BL_CONFIG_ENABLE::DISABLED,
CCFG_BL_CONFIG_BACKDOOR_ENABLE::DISABLED,
true,
CCFG_DEFAULT_BL_CONFIG_BL_BACKDOOR_PIN,
),
erase_conf: erase_conf(true, true),
ccfg_ti_options: ccfg_ti_options(CCFG_TI_OPTIONS_TI_FA::DISABLED), ccfg_tap_dap_0: ccfg_tap_dap_0(
CCFG_DEFAULT_TAP_DAP_0_CPU_DAP,
CCFG_DEFAULT_TAP_DAP_0_PWRPROF,
CCFG_DEFAULT_TAP_DAP_0_TEST_TAP,
),
ccfg_tap_dap_1: ccfg_tap_dap_1(
CCFG_DEFAULT_TAP_DAP_1_AON_TAP,
CCFG_DEFAULT_TAP_DAP_1_PBIST1_TAP,
CCFG_DEFAULT_TAP_DAP_1_PBIST2_TAP,
),
image_valid_conf: 0x00000000,
ccfg_prot_31_0: 0xFFFFFFFF,
ccfg_prot_63_32: 0xFFFFFFFF,
ccfg_prot_95_64: 0xFFFFFFFF,
ccfg_prot_127_96: 0xFFFFFFFF,
}
}
}
pub enum CCFG_MODE_CONF_VDDS_BOD_LEVEL {
VDDS_BOD_2_0V = 0,
VDDS_BOD_1_8V = 1,
}
pub enum CCFG_TAP_DAP_ENABLE {
ENABLED = 0xC5,
DISABLED = 0x00,
}
pub enum CCFG_MODE_CONF_SCLK_LF {
LF_DERIVED_FROM_HF = 0x0,
LF_EXT = 0x1,
LF_XTAL = 0x2,
LF_RCOSC = 0x3,
}
pub enum CCFG_MODE_CONF_XOSC_HF {
XTAL_48 = 0x2,
XTAL_24 = 0x3,
}
pub enum CCFG_BL_CONFIG_ENABLE {
ENABLED = 0xC5,
DISABLED = 0x00,
}
pub enum CCFG_BL_CONFIG_BACKDOOR_ENABLE {
ENABLED = 0xC5,
DISABLED = 0xFF,
}
pub enum CCFG_TI_OPTIONS_TI_FA {
ENABLED = 0xC5,
DISABLED = 0x00,
}
pub const SIZE_OF_CCFG: u8 = 0x58;
pub const CCFG_DEFAULT_EXT_LF_CLK_RTC_INCREMENT: u32 = 0x800000;
pub const CCFG_DEFAULT_EXT_LF_CLK_DIO: u8 = 0x01;
pub const CCFG_DEFAULT_MODE_CONF_1_ALT_DCDC_VMIN: u8 = 0x8;
pub const CCFG_DEFAULT_MODE_CONF_1_ALT_DCDC_DITHER_EN: bool = true;
pub const CCFG_DEFAULT_MODE_CONF_1_ALT_DCDC_IPEAK: u8 = 0x0;
pub const CCFG_DEFAULT_MODE_CONF_1_ALT_IBIAS_INIT: u8 = 0x0;
pub const CCFG_DEFAULT_MODE_CONF_1_ALT_IBIAS_OFFSET: u8 = 0x0;
pub const CCFG_DEFAULT_MODE_CONF_1_ALT_XOSC_MAX_START: u8 = 0x10;
pub const CCFG_DEFAULT_MODE_CONF_VDDR_TRIM_SLEEP_DELTA: u8 = 0xF;
pub const CCFG_DEFAULT_MODE_CONF_DCDC_RECHARGE_DISABLE: bool = false;
pub const CCFG_DEFAULT_MODE_CONF_VDDS_BOD_LEVEL: CCFG_MODE_CONF_VDDS_BOD_LEVEL =
CCFG_MODE_CONF_VDDS_BOD_LEVEL::VDDS_BOD_1_8V;
pub const CCFG_DEFAULT_MODE_CONF_VDDR_CAP: u8 = 0x3A;
pub const CCFG_DEFAULT_MODE_CONF_SCLK_LF: CCFG_MODE_CONF_SCLK_LF = CCFG_MODE_CONF_SCLK_LF::LF_XTAL;
pub const CCFG_DEFAULT_MODE_CONF_XOSC_HF: CCFG_MODE_CONF_XOSC_HF = CCFG_MODE_CONF_XOSC_HF::XTAL_24; pub const CCFG_DEFAULT_BL_CONFIG_BL_BACKDOOR_PIN: u8 = 0xFF; pub const CCFG_DEFAULT_TAP_DAP_0_CPU_DAP: CCFG_TAP_DAP_ENABLE = CCFG_TAP_DAP_ENABLE::ENABLED; pub const CCFG_DEFAULT_TAP_DAP_0_PWRPROF: CCFG_TAP_DAP_ENABLE = CCFG_TAP_DAP_ENABLE::DISABLED; pub const CCFG_DEFAULT_TAP_DAP_0_TEST_TAP: CCFG_TAP_DAP_ENABLE = CCFG_TAP_DAP_ENABLE::ENABLED; pub const CCFG_DEFAULT_TAP_DAP_1_AON_TAP: CCFG_TAP_DAP_ENABLE = CCFG_TAP_DAP_ENABLE::DISABLED; pub const CCFG_DEFAULT_TAP_DAP_1_PBIST1_TAP: CCFG_TAP_DAP_ENABLE = CCFG_TAP_DAP_ENABLE::DISABLED; pub const CCFG_DEFAULT_TAP_DAP_1_PBIST2_TAP: CCFG_TAP_DAP_ENABLE = CCFG_TAP_DAP_ENABLE::DISABLED;
pub const fn ext_lf_clk(rtc_increment: u32, dio: u8) -> u32 {
(rtc_increment & 0x00ff_ffff) | ((dio as u32 & 0xff) << 24)
}
pub const fn mode_conf_1(
dcdc_min: u8,
dither_enabled: bool,
dcdc_ipeak: u8,
ibas_init: u8,
ibas_offset: u8,
xosc_max_start: u8,
) -> u32 {
0xFF000000
| ((dcdc_min as u32) << 20)
| ((dither_enabled as u32) << 19)
| ((dcdc_ipeak as u32) << 16)
| ((ibas_init as u32) << 12)
| ((ibas_offset as u32) << 8)
| (xosc_max_start as u32)
}
pub const fn size_and_dis_flags(
disable_linear_cap_array_delta: bool,
disable_gpram: bool,
disable_alt_dcdc_setting: bool,
disable_xosc_override: bool,
) -> u32 {
const DISABLE_FLAGS_MASK: u32 = 0x0000FFE0;
((SIZE_OF_CCFG as u32) << 16)
| (DISABLE_FLAGS_MASK)
| ((disable_linear_cap_array_delta as u32) << 4)
| (0x1 << 3) | ((disable_gpram as u32) << 2)
| ((disable_alt_dcdc_setting as u32) << 1)
| ((disable_xosc_override as u32) << 0)
}
pub const fn mode_conf(
trim_sleep_delta: u8,
disable_dcdc_recharge: bool,
disable_dcdc_active: bool,
vdds_bod_level: CCFG_MODE_CONF_VDDS_BOD_LEVEL,
lf_clk_option: CCFG_MODE_CONF_SCLK_LF,
disable_vddr_sleep_trim_temp_comp: bool,
xosc_source: CCFG_MODE_CONF_XOSC_HF,
disable_xosc_cap_array_delta: bool,
cap_array_delta: u8,
vddr_cap: u8,
) -> u32 {
((trim_sleep_delta as u32 ) << 28)
| ((disable_dcdc_recharge as u32) << 27)
| ((disable_dcdc_active as u32) << 26)
| ((0x01 as u32) << 25) | ((vdds_bod_level as u32) << 24) | ((lf_clk_option as u32) << 22)
| ((disable_vddr_sleep_trim_temp_comp as u32) << 21)
| ((0x1 as u32) << 20) | ((xosc_source as u32) << 18)
| ((disable_xosc_cap_array_delta as u32) << 17)
| ((0x1 as u32) << 16) | ((cap_array_delta as u32) << 8) | (vddr_cap as u32)
}
pub const fn bl_config(
bl_enable: CCFG_BL_CONFIG_ENABLE,
backdoor_enable: CCFG_BL_CONFIG_BACKDOOR_ENABLE,
bl_backdoor_active_high: bool,
bl_backdoor_pin: u8,
) -> u32 {
((bl_enable as u32) << 24)
| ((bl_backdoor_active_high as u32 | 0xFE) << 16)
| ((bl_backdoor_pin as u32) << 8)
| (backdoor_enable as u32)
}
pub const fn erase_conf(enable_bl_chip_erase: bool, enable_bl_bank_erase: bool) -> u32 {
(0xFFFF << 16)
| ((enable_bl_chip_erase as u32 | 0xFE) << 8)
| (enable_bl_bank_erase as u32 | 0xFE)
}
pub const fn ccfg_ti_options(enable_ti_fa: CCFG_TI_OPTIONS_TI_FA) -> u32 {
enable_ti_fa as u32 | 0xFFFFFF00
}
pub const fn ccfg_tap_dap_0(
cpu_dap: CCFG_TAP_DAP_ENABLE,
pwrprof_tap: CCFG_TAP_DAP_ENABLE,
test_tap: CCFG_TAP_DAP_ENABLE,
) -> u32 {
(0xFF << 24) | (cpu_dap as u32) << 16 | (pwrprof_tap as u32) << 8 | (test_tap as u32)
}
pub const fn ccfg_tap_dap_1(
aon_tap: CCFG_TAP_DAP_ENABLE,
pbist1_tap: CCFG_TAP_DAP_ENABLE,
pbist2_tap: CCFG_TAP_DAP_ENABLE,
) -> u32 {
(0xFF << 24) | (pbist2_tap as u32) << 16 | (pbist1_tap as u32) << 8 | (aon_tap as u32)
}