// // Created by dell on 24-12-3. // #ifndef LDC1612_H #define LDC1612_H #include "gd32e23x_it.h" #include "gd32e23x.h" #include "systick.h" #include #include #include #include #include "board_config.h" #include "i2c.h" /***************************************************************************/ /* IIC Interface Selection */ #ifdef SOFTWARE_IIC #define LDC1612_IIC_WRITE_16BITS(addr, reg, data) soft_i2c_write_16bits(addr, reg, data) #define LDC1612_IIC_READ_16BITS(addr, reg, data) soft_i2c_read_16bits(addr, reg, data) #define LDC1612_IIC_TYPE_STR "Software IIC" #else #define LDC1612_IIC_WRITE_16BITS(addr, reg, data) i2c_write_16bits(addr, reg, data) #define LDC1612_IIC_READ_16BITS(addr, reg, data) i2c_read_16bits(addr, reg, data) #define LDC1612_IIC_TYPE_STR "Hardware IIC" #endif /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>[EXT CLK(MHz)]<<<<<<<<<<<<<<<<<<<< */ #define LDC1612_EXT_CLK_MHZ 40 /***************************************************************************/ #define LDC1612_ADDR (0x2B) /******************************************************************************/ #define COIL_L_UH 40.9 #define COIL_C_PF 180 /************************Register Addr***************************************/ #define CONVERSION_RESULT_REG_START 0X00 #define SET_CONVERSION_TIME_REG_START 0X08 #define SET_CONVERSION_OFFSET_REG_START 0X0C #define SET_SETTLECOUNT_REG_START 0X10 #define SET_FREQ_REG_START 0X14 #define SENSOR_STATUS_REG 0X18 #define ERROR_CONFIG_REG 0X19 #define SENSOR_CONFIG_REG 0X1A #define MUX_CONFIG_REG 0X1B #define SENSOR_RESET_REG 0X1C #define SET_DRIVER_CURRENT_REG 0X1E #define READ_MANUFACTURER_ID 0X7E #define READ_DEVICE_ID 0X7F /**********************Sensor Channel****************************************/ #define CHANNEL_0 0 #define CHANNEL_1 1 /**************************DATA (0x00-0x03)*******************************************/ /* * 作用: 存储28位的传感器转换结果。结果分为高字节(MSB)和低字节(LSB)两个寄存器。 * * 结构说明: * - DATA_CHx_MSB: 包含错误标志和数据的高12位 [27:16]。 * - DATA_CHx_LSB: 包含数据的低16位 [15:0]。 * * MSB寄存器位域: * [15] ERR_UR: 转换下溢错误标志 (1 = 发生错误) * [14] ERR_OR: 转换上溢错误标志 (1 = 发生错误) * [13] ERR_WD: 看门狗超时错误标志 (1 = 发生错误) * [12] ERR_AE: 振幅错误标志 (高或低) (1 = 发生错误) * [11:0] DATA[27:16]: 数据的高12位 * * 注意: * - 仅当ERROR_CONFIG寄存器中对应的ERR2OUT位置1时,这些错误标志才会在MSB寄存器中被设置。 * - 读取数据时,应先读取LSB,再读取MSB,以确保数据的一致性。 */ /* --- 数据寄存器错误标志位掩码 --- */ #define LDC1612_DATA_ERR_UR (1 << 15) #define LDC1612_DATA_ERR_OR (1 << 14) #define LDC1612_DATA_ERR_WD (1 << 13) #define LDC1612_DATA_ERR_AE (1 << 12) #define LDC1612_DATA_ERR_MASK (0xF000) #define LDC1612_DATA_MSB_MASK (0x0FFF) /**************************RCOUNT (0x08, 0x09)****************************************/ /* * 作用: 设置参考计数器值,决定了传感器的转换时间,从而影响测量分辨率。 * * 位域说明: * [15:0] RCOUNT: 参考计数值。 * * 计算公式: * t_CONVERSION = (RCOUNT * 16) / f_REF * * 注意: * - RCOUNT值必须 ≥ 0x0004。 * - 该寄存器在复位后值为 0x0080。 * * 配置建议: * - 需要高采样率: 使用较小的RCOUNT值。 * - 需要高分辨率: 使用较大的RCOUNT值。 */ /* --- 预设配置示例 --- */ // 高速采样配置 (分辨率较低) #define LDC1612_RCOUNT_HIGH_SPEED (0x04D6) // 1238, 约 1kSPS @ 40MHz/2 // 平衡配置 (常用) #define LDC1612_RCOUNT_BALANCED (0x1000) // 4096, 约 380SPS @ 40MHz/2 // 高分辨率配置 (采样率较低) #define LDC1612_RCOUNT_HIGH_RESOLUTION (0xFFFF) // 65535, 约 24SPS @ 40MHz/2 // 默认配置 #define LDC1612_RCOUNT_TIME_CH0 LDC1612_RCOUNT_BALANCED // 0x1000=4096个时钟周期 /**************************OFFSET (0x0C, 0x0D)****************************************/ /* * 作用: 设置一个16位的数字偏移量,该值会从原始转换结果中减去。 * * 位域说明: * [15:0] OFFSET: 数据偏移值。 * * 计算公式: * 最终数据 = 原始转换数据 - OFFSET * * 注意: * - 如果减法结果为负,将触发下溢错误 (ERR_UR)。 * - 该寄存器在复位后值为 0x0000。 * * 应用场景: * - 消除传感器或环境的固有基线偏移。 * - 实现“去皮”(Tare)功能,将当前读数设为新的零点。 */ // 默认配置: 不设置偏移 #define SET_CONVERSION_OFFSET_CH0 0x0000 /**************************SETTLECOUNT (0x10, 0x11)***********************************/ /* * 作用: 设置传感器振荡器在开始转换前所需的建立时间。 * * 位域说明: * [15:0] SETTLECOUNT: 建立时间计数值。 * * 计算公式: * t_SETTLE 的计算方式取决于SETTLECOUNT的值: * - 当 SETTLECOUNT = 0x0000 或 0x0001 时, t_SETTLE = 32 / f_REF * - 当 SETTLECOUNT ≥ 0x0002 时, t_SETTLE = (SETTLECOUNT * 16) / f_REF * * 配置建议: * - 传感器的Q值越高,所需的建立时间越短 (SETTLECOUNT值可以越小)。 * - 值过小可能导致传感器未充分稳定,数据不准确。 * - 值过大则会不必要地增加总转换时间,降低采样率。 * - 对于大多数应用,0x0100 (256) 是一个很好的起始值。 */ /* --- 预设配置示例 --- */ // 适用于高Q值传感器 (建立时间短) #define LDC1612_SETTLECOUNT_HIGH_Q (0x000A) // 约 4µs @ 40MHz/2 // 适用于中等Q值传感器 (通用) #define LDC1612_SETTLECOUNT_MEDIUM_Q (0x0100) // 约 102µs @ 40MHz/2 // 适用于低Q值传感器 (建立时间长) #define LDC1612_SETTLECOUNT_LOW_Q (0x0400) // 约 410µs @ 40MHz/2 // 默认配置 #define LDC1612_SETTLECOUNT_CH0 LDC1612_SETTLECOUNT_MEDIUM_Q /**************************CLOCK_DIVIDER (0x14, 0x15)***********************************/ /* * 作用: 配置传感器输入频率(f_sensor)和参考时钟(f_ref)的分频器。 * * 位域说明: * [15:12] FIN_DIVIDER: 传感器输入分频器。 * [11:10] RESERVED: 必须为00。 * [9:0] FREF_DIVIDER: 参考时钟分频器。 * * 配置逻辑: * 1. FIN_DIVIDER: 根据传感器的谐振频率 f_sensor 选择。 * - 目标是使 f_sensor / FIN_DIVIDER <= 8.75MHz。 * - 例如: 如果 f_sensor = 15MHz, 则 FIN_DIVIDER 必须 >= 2。 * * 2. FREF_DIVIDER: 根据外部时钟 f_clk 和工作模式选择。 * - 目标是使 f_ref = f_clk / FREF_DIVIDER。 * - 单通道模式且 f_clk <= 35MHz: FREF_DIVIDER = 1。 * - 双通道模式或 f_clk > 35MHz: FREF_DIVIDER = 2。 * * 最终寄存器值 = (FIN_DIVIDER << 12) | FREF_DIVIDER; */ /* --- 位域选项宏 --- */ // [15:12] Sensor Input Divider (FIN_DIVIDER) #define LDC1612_FIN_DIV_1 (0x1 << 12) // for f_sensor <= 8.75MHz #define LDC1612_FIN_DIV_2 (0x2 << 12) // for 8.75MHz < f_sensor <= 17.5MHz #define LDC1612_FIN_DIV_4 (0x3 << 12) // for 17.5MHz < f_sensor <= 35MHz // [9:0] Reference Clock Divider (FREF_DIVIDER) #define LDC1612_FREF_DIV_1 (0x001) #define LDC1612_FREF_DIV_2 (0x002) /* --- 组合宏 --- */ #define LDC1612_CLOCK_DIVIDER_GEN(fin_div, fref_div) ((fin_div) | (fref_div)) /* --- 预设配置示例 (基于40MHz外部时钟) --- */ // 适用于 f_sensor <= 8.75MHz #define LDC1612_CLOCK_DIVIDER_DEFAULT LDC1612_CLOCK_DIVIDER_GEN(LDC1612_FIN_DIV_1, LDC1612_FREF_DIV_2) // 0x1002 /**************************STATUS (0x18) MACROS**************************************** * * 作用: 定义STATUS寄存器的位掩码,用于解析设备状态。 * */ #define LDC1612_STATUS_DRDY (1 << 6) // 数据就绪 #define LDC1612_STATUS_UNREAD_CH0 (1 << 3) // 通道0有未读数据 #define LDC1612_STATUS_UNREAD_CH1 (1 << 2) // 通道1有未读数据 #define LDC1612_STATUS_ERR_ZC (1 << 8) // 零计数错误 #define LDC1612_STATUS_ERR_ALE (1 << 9) // 振幅过低 #define LDC1612_STATUS_ERR_AHE (1 << 10) // 振幅过高 #define LDC1612_STATUS_ERR_WD (1 << 11) // 看门狗超时 #define LDC1612_STATUS_ERR_OR (1 << 12) // 转换上溢 #define LDC1612_STATUS_ERR_UR (1 << 13) // 转换下溢 #define LDC1612_STATUS_ERR_CHAN_MASK (3 << 14) // 错误通道掩码 /**************************ERROR_CONFIG (0x19)****************************************/ /* * 作用: 配置状态或错误输出或者触发INTB引脚中断。 * * 位域说明: * [15] UR_ERR2OUT: 1 = 转换下溢错误输出到DATA_CHx寄存器 * [14] OR_ERR2OUT: 1 = 转换上溢错误输出到DATA_CHx寄存器 * [13] WD_ERR2OUT: 1 = 看门狗超时错误输出到DATA_CHx寄存器 * [12] AH_ERR2OUT: 1 = 振幅过高错误输出到DATA_CHx寄存器 * [11] AL_ERR2OUT: 1 = 振幅过低错误输出到DATA_CHx寄存器 * [10:8] RESERVED * [7] UR_ERR2INT: 1 = 转换下溢错误触发INTB * [6] OR_ERR2INT: 1 = 转换上溢错误触发INTB * [5] WD_ERR2INT: 1 = 看门狗超时错误触发INTB * [4] AH_ERR2INT: 1 = 振幅过高错误触发INTB * [3] AL_ERR2INT: 1 = 振幅过低错误触发INTB * [2] ZC_ERR2INT: 1 = 零计数错误触发INTB * [1] RESERVED * [0] DRDY_2INT: 1 = 数据就绪标志触发INTB */ /* --- 位域选项宏 --- */ // --- 中断触发 (ERR2INT) --- #define LDC1612_ERR_CFG_DRDY_INT_EN (1 << 0) // 数据就绪中断使能 #define LDC1612_ERR_CFG_ZC_INT_EN (1 << 2) // 零计数错误中断使能 #define LDC1612_ERR_CFG_AL_INT_EN (1 << 3) // 振幅过低错误中断使能 #define LDC1612_ERR_CFG_AH_INT_EN (1 << 4) // 振幅过高错误中断使能 #define LDC1612_ERR_CFG_WD_INT_EN (1 << 5) // 看门狗超时中断使能 #define LDC1612_ERR_CFG_OR_INT_EN (1 << 6) // 转换上溢中断使能 #define LDC1612_ERR_CFG_UR_INT_EN (1 << 7) // 转换下溢中断使能 // --- 错误报告至数据寄存器 (ERR2OUT) --- #define LDC1612_ERR_CFG_AL_OUT_EN (1 << 11) // 振幅过低错误报告使能 #define LDC1612_ERR_CFG_AH_OUT_EN (1 << 12) // 振幅过高错误报告使能 #define LDC1612_ERR_CFG_WD_OUT_EN (1 << 13) // 看门狗超时错误报告使能 #define LDC1612_ERR_CFG_OR_OUT_EN (1 << 14) // 转换上溢错误报告使能 #define LDC1612_ERR_CFG_UR_OUT_EN (1 << 15) // 转换下溢错误报告使能 // 常用配置: 仅使能 "数据就绪" 中断 #define LDC1612_ERROR_CONFIG_DRDY_ONLY (LDC1612_ERR_CFG_DRDY_INT_EN) // 结果: 0x0001 // 常用配置: 使能所有错误报告 #define LDC1612_ERROR_CONFIG_OUT_ONLY (LDC1612_ERR_CFG_AL_OUT_EN | \ LDC1612_ERR_CFG_AH_OUT_EN | \ LDC1612_ERR_CFG_WD_OUT_EN | \ LDC1612_ERR_CFG_OR_OUT_EN | \ LDC1612_ERR_CFG_UR_OUT_EN) // 结果: 0xF800 // 调试配置: 使能所有错误中断和错误报告 #define LDC1612_ERROR_CONFIG_DEBUG_ALL (LDC1612_ERR_CFG_DRDY_INT_EN | \ LDC1612_ERR_CFG_ZC_INT_EN | \ LDC1612_ERR_CFG_AL_INT_EN | \ LDC1612_ERR_CFG_AH_INT_EN | \ LDC1612_ERR_CFG_WD_INT_EN | \ LDC1612_ERR_CFG_OR_INT_EN | \ LDC1612_ERR_CFG_UR_INT_EN | \ LDC1612_ERR_CFG_AL_OUT_EN | \ LDC1612_ERR_CFG_AH_OUT_EN | \ LDC1612_ERR_CFG_WD_OUT_EN | \ LDC1612_ERR_CFG_OR_OUT_EN | \ LDC1612_ERR_CFG_UR_OUT_EN) // 结果: 0xF8FD // 默认配置: 所有功能都禁用 #define LDC1612_ERROR_CONFIG_DEFAULT (0x0000) /**************************SENSOR_CONFIG (0x1A) MACROS***************************************/ /* * CONFIG寄存器位域宏定义,用于灵活组合生成配置值。 * 使用方法: LDC1612_CONFIG_GEN(ACTIVE_CHAN, SLEEP_MODE, RP_OVERRIDE, AUTO_AMP, CLK_SRC, INTB, CURRENT_DRV) * * 位域说明 (根据 LDC1612_REG_LIST.md): * [15:14] ACTIVE_CHAN: 激活通道选择 (仅在 AUTOSCAN_EN=0 时有效) * [13] SLEEP_MODE_EN: 1 = 睡眠模式使能 * [12] RP_OVERRIDE_EN: 1 = 禁用自动校准 (使用手动的IDRIVE设置) * [11] SENSOR_ACTIVATE_SEL: 传感器激活电流选择 (0:低电流, 1:高电流) * [10] AUTO_AMP_DIS: 1 = 禁用自动幅度校正 * [9] REF_CLK_SRC: 1 = 使用外部CLKIN时钟 * [8] RESERVED: 必须为0 * [7] INTB_DIS: 1 = 禁用INTB中断引脚 * [6] HIGH_CURRENT_DRV: 1 = 通道0高电流驱动模式 * [5:0] RESERVED: 必须写入 0x01 */ /* --- 位域选项宏 --- */ // [15:14] Active Channel Selection #define LDC1612_CONFIG_ACTIVE_CHAN_CH0 (0x00 << 14) #define LDC1612_CONFIG_ACTIVE_CHAN_CH1 (0x01 << 14) // [13] Sleep Mode Enable #define LDC1612_CONFIG_SLEEP_MODE_DISABLE (0x00 << 13) #define LDC1612_CONFIG_SLEEP_MODE_ENABLE (0x01 << 13) // [12] RP Override Enable (Auto-Calibration Disable) #define LDC1612_CONFIG_RP_OVERRIDE_DISABLE (0x00 << 12) // 启用自动校准 #define LDC1612_CONFIG_RP_OVERRIDE_ENABLE (0x01 << 12) // 禁用自动校准 // [11] Sensor Activation Current Selection #define LDC1612_CONFIG_SENSOR_ACT_LOW_I (0x00 << 11) // 低电流激活 #define LDC1612_CONFIG_SENSOR_ACT_HIGH_I (0x01 << 11) // 高电流激活 // [10] Auto Amplitude Correction Disable #define LDC1612_CONFIG_AUTO_AMP_ENABLE (0x00 << 10) // 启用自动幅度校正 #define LDC1612_CONFIG_AUTO_AMP_DISABLE (0x01 << 10) // 禁用自动幅度校正 // [9] Reference Clock Source #define LDC1612_CONFIG_CLK_SRC_INTERNAL (0x00 << 9) #define LDC1612_CONFIG_CLK_SRC_EXTERNAL (0x01 << 9) // [7] INTB Pin Disable #define LDC1612_CONFIG_INTB_ENABLE (0x00 << 7) #define LDC1612_CONFIG_INTB_DISABLE (0x01 << 7) // [6] High Current Drive (Channel 0) #define LDC1612_CONFIG_HIGH_CURRENT_DISABLE (0x00 << 6) #define LDC1612_CONFIG_HIGH_CURRENT_ENABLE (0x01 << 6) /* --- 组合宏 --- */ // 将所有位域组合成一个16位值。注意,保留位0x01被固定添加。 #define LDC1612_CONFIG_GEN(active_chan, sleep, rp_override, sensor_act, auto_amp, clk_src, intb, high_current) \ ( (active_chan) | (sleep) | (rp_override) | (sensor_act) | (auto_amp) | (clk_src) | (intb) | (high_current) | 0x0001 ) /* --- 预设配置示例 --- */ // CH0连续转换, 外部时钟, 高驱动电流, 禁用自动幅度修正(适用于电流检测) #define LDC1612_SENSOR_CONFIG_CH0 LDC1612_CONFIG_GEN( \ LDC1612_CONFIG_ACTIVE_CHAN_CH0, \ LDC1612_CONFIG_SLEEP_MODE_DISABLE, \ LDC1612_CONFIG_RP_OVERRIDE_ENABLE, /* Rp覆盖开启 */ \ LDC1612_CONFIG_SENSOR_ACT_LOW_I, /* 低功耗启动 */ \ LDC1612_CONFIG_AUTO_AMP_DISABLE, /* 禁用自动幅度校正 */ \ LDC1612_CONFIG_CLK_SRC_EXTERNAL, /* 外部时钟 */ \ LDC1612_CONFIG_INTB_ENABLE, /* 启用INTB引脚 */ \ LDC1612_CONFIG_HIGH_CURRENT_ENABLE /* 大电流模式 */ ) // 结果: 0x1641 // TODO 对比1601的不同(大电流与标准电流) // 睡眠模式, 外部时钟 #define LDC1612_SLEEP_MODE LDC1612_CONFIG_GEN( \ LDC1612_CONFIG_ACTIVE_CHAN_CH0, \ LDC1612_CONFIG_SLEEP_MODE_ENABLE, \ LDC1612_CONFIG_RP_OVERRIDE_DISABLE, \ LDC1612_CONFIG_SENSOR_ACT_HIGH_I, \ LDC1612_CONFIG_AUTO_AMP_ENABLE, \ LDC1612_CONFIG_CLK_SRC_INTERNAL, \ LDC1612_CONFIG_INTB_ENABLE, \ LDC1612_CONFIG_HIGH_CURRENT_DISABLE ) // 结果: 0x2801 /*************************MUX_CONFIG (0x1B) MACROS***************************************/ /* * MUX_CONFIG寄存器位域宏定义,用于灵活组合生成配置值。 * * 位域说明: * [15] AUTOSCAN_EN: 1 = 自动顺序扫描模式使能 * [14:13] RR_SEQUENCE: 扫描序列 (00: CH0, CH1) * [12:3] RESERVED: 必须写入 0x041 * [2:0] DEGLITCH: 输入消抖滤波器带宽 */ /* --- 位域选项宏 --- */ // [15] Auto Scan Mode #define LDC1612_MUX_AUTOSCAN_DISABLE (0x00 << 15) // 单通道连续模式 #define LDC1612_MUX_AUTOSCAN_ENABLE (0x01 << 15) // 自动扫描模式 // [14:13] Round Robin Sequence #define LDC1612_MUX_RR_SEQ_CH0_CH1 (0x00 << 13) // 扫描 CH0, CH1 // [2:0] Deglitch Filter Bandwidth #define LDC1612_MUX_DEGLITCH_1MHZ (0x01) #define LDC1612_MUX_DEGLITCH_3_3MHZ (0x04) #define LDC1612_MUX_DEGLITCH_10MHZ (0x05) #define LDC1612_MUX_DEGLITCH_33MHZ (0x07) /* --- 组合宏 --- */ // 将所有位域组合成一个16位值。注意,保留位0x0208 (0x041 << 3)被固定添加。 #define LDC1612_MUX_CONFIG_GEN(autoscan, sequence, deglitch) \ ( (autoscan) | (sequence) | (deglitch) | 0x0208 ) /* --- 预设配置示例 --- */ // 单通道模式, 3.3MHz 滤波 #define LDC1612_MUX_CONFIG LDC1612_MUX_CONFIG_GEN( \ LDC1612_MUX_AUTOSCAN_DISABLE, \ LDC1612_MUX_RR_SEQ_CH0_CH1, /* 此模式下无效,但保持定义 */ \ LDC1612_MUX_DEGLITCH_3_3MHZ ) // 0x020C /***********************RESET DEVICE (0x1C)***********************************/ /* * 向RESET_DEV寄存器写入 LDC1612_RESET_CMD 会触发软件复位。 * 复位后,所有寄存器将恢复为默认值,设备进入睡眠模式。 * 需要大约10ms的稳定时间后才能重新配置。 */ #define LDC1612_RESET_DEV 0x8000 /**************************DRIVE_CURRENT (0x1E, 0x1F)****************************************/ /* * 作用: 设置传感器的驱动电流,以确保振荡幅度(Vosc)在1.2V到1.8V之间。 * * 位域说明: * [15:11] IDRIVE: 当前驱动电流设置值 (0-31)。 * [10:6] INIT_IDRIVE: 初始驱动电流设置值 (0-31)。 * [5:0] RESERVED: 必须为0。 * * 配置建议: * 1. 初始阶段可启用自动校准 (CONFIG.RP_OVERRIDE_EN = 0),让芯片自动寻找合适的IDRIVE值。 * 2. 读取DRIVE_CURRENT寄存器,获得自动校准后的IDRIVE值。 * 3. 在最终代码中,禁用自动校准 (CONFIG.RP_OVERRIDE_EN = 1),并手动写入这个调试好的IDRIVE值。 * * CH_INIT_IDRIVE will update when every conversion systick ==>AutoAmpDis is 0 * CH_INIT_IDRIVE will store init drive current calculated ==> AutoAmpDis is 1 */ /* --- 驱动电流值生成宏 --- */ // 参数 idrive: 0-31之间的整数 #define LDC1612_DRIVE_CURRENT_GEN(idrive) ( (uint16_t)(idrive) << 11 ) #define LDC1612_DRIVE_CURRENT LDC1612_DRIVE_CURRENT_GEN(18) // 0x9000 /**************************IDs (Read Only 0x7E 0x7F)***********************************/ #define LDC1612_MANUFACTURER_ID 0x5449 #define LDC1612_DEVICE_ID 0x3055 /******************************************************************************/ typedef enum { LDC1612_STATUS_SUCCESS = 0, LDC1612_STATUS_ERROR, LDC1612_STATUS_TIMEOUT, LDC1612_STATUS_INVALID_PARAM, LDC1612_STATUS_NO_COIL, LDC1612_STATUS_UNDER_RANGE, LDC1612_STATUS_OVER_RANGE } ldc1612_status_t; /******************************************************************************/ ldc1612_status_t ldc1612_init(void); ldc1612_status_t ldc1612_reset_sensor(void); ldc1612_status_t ldc1612_config_single_channel(uint8_t channel); uint16_t ldc1612_get_manufacturer_id(void); uint16_t ldc1612_get_deveice_id(void); uint32_t ldc1612_get_raw_channel_result(uint8_t channel); void ldc1612_drvie_current_detect(uint8_t channel); uint16_t ldc1612_get_sensor_status(void); bool ldc1612_is_data_ready(uint8_t channel); uint16_t ldc1612_check_status_and_log_errors(void); #endif //LDC1612_H