1 /****************************************************************************** 2 * 3 * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by 4 * Analog Devices, Inc.), 5 * Copyright (C) 2023-2024 Analog Devices, Inc. 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 ******************************************************************************/ 20 21 #ifndef LIBRARIES_PERIPHDRIVERS_SOURCE_SMON_SMON_REVA_H_ 22 #define LIBRARIES_PERIPHDRIVERS_SOURCE_SMON_SMON_REVA_H_ 23 24 #include <stddef.h> 25 #include "mxc_assert.h" 26 #include "mxc_pins.h" 27 #include "mxc_lock.h" 28 #include "mxc_delay.h" 29 #include "mxc_device.h" 30 #include "smon.h" 31 #include "smon_reva_regs.h" 32 33 /** 34 * @brief External Sensor Number 35 * 36 */ 37 typedef enum { 38 SMON_REVA_EXTSENSOR_0 = MXC_F_SMON_REVA_EXTSCN_EXTS_EN0, 39 SMON_REVA_EXTSENSOR_1 = MXC_F_SMON_REVA_EXTSCN_EXTS_EN1, 40 SMON_REVA_EXTSENSOR_2 = MXC_F_SMON_REVA_EXTSCN_EXTS_EN2, 41 SMON_REVA_EXTSENSOR_3 = MXC_F_SMON_REVA_EXTSCN_EXTS_EN3, 42 SMON_REVA_EXTSENSOR_4 = MXC_F_SMON_REVA_EXTSCN_EXTS_EN4, 43 SMON_REVA_EXTSENSOR_5 = MXC_F_SMON_REVA_EXTSCN_EXTS_EN5, 44 } mxc_smon_reva_ext_sensor_t; 45 46 /** 47 * @brief Enum for Clock Divider 48 * 49 */ 50 typedef enum { 51 SMON_REVA_CLK_DIVIDE_1 = MXC_S_SMON_REVA_EXTSCN_DIVCLK_DIV1, 52 SMON_REVA_CLK_DIVIDE_2 = MXC_S_SMON_REVA_EXTSCN_DIVCLK_DIV2, 53 SMON_REVA_CLK_DIVIDE_4 = MXC_S_SMON_REVA_EXTSCN_DIVCLK_DIV4, 54 SMON_REVA_CLK_DIVIDE_8 = MXC_S_SMON_REVA_EXTSCN_DIVCLK_DIV8, 55 SMON_REVA_CLK_DIVIDE_16 = MXC_S_SMON_REVA_EXTSCN_DIVCLK_DIV16, 56 SMON_REVA_CLK_DIVIDE_32 = MXC_S_SMON_REVA_EXTSCN_DIVCLK_DIV32, 57 SMON_REVA_CLK_DIVIDE_64 = MXC_S_SMON_REVA_EXTSCN_DIVCLK_DIV64, 58 } mxc_smon_reva_clk_divide_t; 59 60 /** 61 * @brief Enum for Frequency Divider 62 * 63 */ 64 typedef enum { 65 SMON_REVA_FREQ_DIVIDE_4 = MXC_S_SMON_REVA_EXTSCN_EXTFRQ_FREQ2000HZ, 66 SMON_REVA_FREQ_DIVIDE_8 = MXC_S_SMON_REVA_EXTSCN_EXTFRQ_FREQ1000HZ, 67 SMON_REVA_FREQ_DIVIDE_16 = MXC_S_SMON_REVA_EXTSCN_EXTFRQ_FREQ500HZ, 68 SMON_REVA_FREQ_DIVIDE_32 = MXC_S_SMON_REVA_EXTSCN_EXTFRQ_FREQ250HZ, 69 SMON_REVA_FREQ_DIVIDE_64 = MXC_S_SMON_REVA_EXTSCN_EXTFRQ_FREQ125HZ, 70 SMON_REVA_FREQ_DIVIDE_128 = MXC_S_SMON_REVA_EXTSCN_EXTFRQ_FREQ63HZ, 71 SMON_REVA_FREQ_DIVIDE_256 = MXC_S_SMON_REVA_EXTSCN_EXTFRQ_FREQ31HZ, 72 } mxc_smon_reva_freq_divide_t; 73 74 /** 75 * @brief Voltage Monitor Thresholds 76 * 77 */ 78 typedef enum { 79 SMON_REVA_VTM_THRESHOLD_1_6, ///< 1.6 V 80 SMON_REVA_VTM_THRESHOLD_2_2, ///< 2.2 V 81 SMON_REVA_VTM_THRESHOLD_2_8, ///< 2.8 V 82 } mxc_smon_reva_vtm_t; 83 84 /** 85 * @brief Temperature Sensor Thresholds 86 * 87 */ 88 typedef enum { 89 SMON_REVA_TEMP_THRESHOLD_NEG_50, ///< -50 *C 90 SMON_REVA_TEMP_THRESHOLD_NEG_30, ///< -30 *C 91 } mxc_smon_reva_temp_t; 92 93 /** 94 * @brief Digital Fault Interrupt mode 95 * 96 */ 97 typedef enum { 98 SMON_REVA_DFD_INTERRUPT_NMI, ///< DRS/NMI 99 SMON_REVA_DFD_INTERRUPT_PFW, ///< PFW IRQ 100 } mxc_smon_reva_interrupt_mode_t; 101 102 /** 103 * @brief Digital Fault Low Power mode 104 * 105 */ 106 typedef enum { 107 SMON_REVA_DFD_LOWPOWER_ENABLE, ///< DFD enabled during LowPower mode 108 SMON_REVA_DFD_LOWPOWER_DISABLE, ///< DFD disabled during LowPower mode 109 } mxc_smon_reva_lowpower_mode_t; 110 111 /** 112 * @brief Register to check if busy 113 * 114 */ 115 typedef enum { 116 SMON_REVA_EXTSENSOR = MXC_F_SMON_REVA_SECST_EXTSRS, 117 SMON_REVA_INTSENSOR = MXC_F_SMON_REVA_SECST_INTSRS, 118 SMON_REVA_SECALARM = MXC_F_SMON_REVA_SECST_SECALRS, 119 } mxc_smon_reva_busy_t; 120 121 /** 122 * @brief The information required to configure an external sensor 123 * 124 */ 125 typedef struct { 126 mxc_smon_reva_ext_sensor_t sensorNumber; 127 mxc_smon_reva_clk_divide_t clockDivide; 128 mxc_smon_reva_freq_divide_t freqDivide; 129 uint8_t errorCount; 130 uint8_t data; 131 } mxc_smon_reva_ext_cfg_t; 132 133 int MXC_SMON_RevA_ExtSensorEnable(mxc_smon_reva_regs_t *smon, mxc_smon_reva_ext_cfg_t *cfg, 134 uint32_t delay); 135 136 int MXC_SMON_RevA_SetSensorFrequency(mxc_smon_reva_regs_t *smon, mxc_smon_reva_ext_cfg_t *cfg); 137 138 int MXC_SMON_RevA_SetErrorCount(mxc_smon_reva_regs_t *smon, uint8_t errorCount); 139 140 int MXC_SMON_RevA_TempSensorEnable(mxc_smon_reva_regs_t *smon, mxc_smon_reva_temp_t threshold, 141 uint32_t delay); 142 143 int MXC_SMON_RevA_SetTempThreshold(mxc_smon_reva_regs_t *smon, mxc_smon_reva_temp_t threshold); 144 145 int MXC_SMON_RevA_VoltageMonitorEnable(mxc_smon_reva_regs_t *smon, mxc_smon_reva_vtm_t threshold, 146 uint32_t delay); 147 148 int MXC_SMON_RevA_SetVTMThreshold(mxc_smon_reva_regs_t *smon, mxc_smon_reva_vtm_t threshold); 149 150 int MXC_SMON_RevA_ActiveDieShieldEnable(mxc_smon_reva_regs_t *smon, uint32_t delay); 151 152 int MXC_SMON_RevA_SelfDestructByteEnable(mxc_smon_reva_regs_t *smon, mxc_smon_reva_ext_cfg_t *cfg, 153 uint32_t delay); 154 155 void MXC_SMON_RevA_EnablePUFTrimErase(mxc_smon_reva_regs_t *smon); 156 157 void MXC_SMON_RevA_DisablePUFTrimErase(mxc_smon_reva_regs_t *smon); 158 159 int MXC_SMON_RevA_DigitalFaultDetectorEnable(mxc_smon_reva_regs_t *smon, 160 mxc_smon_reva_interrupt_mode_t interruptMode, 161 mxc_smon_reva_lowpower_mode_t lowPowerMode, 162 uint32_t delay); 163 164 uint32_t MXC_SMON_RevA_GetFlags(mxc_smon_reva_regs_t *smon); 165 166 void MXC_SMON_RevA_ClearFlags(mxc_smon_reva_regs_t *smon, uint32_t flags); 167 168 void MXC_SMON_RevA_ExtSensorLock(mxc_smon_reva_regs_t *smon); 169 170 void MXC_SMON_RevA_IntSensorLock(mxc_smon_reva_regs_t *smon); 171 172 int MXC_SMON_RevA_isBusy(mxc_smon_reva_regs_t *smon, mxc_smon_reva_busy_t reg, uint32_t delay); 173 174 #endif // LIBRARIES_PERIPHDRIVERS_SOURCE_SMON_SMON_REVA_H_ 175