| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- /*********************************************************************************************************
- * 模块名称:IM1253E.c
- * 摘 要:电能测量芯片驱动应用
- * 当前版本:1.0.0
- * 作 者:anycrying
- * 完成日期:2024年04月09日
- * 内 容:
- * 注 意:
- **********************************************************************************************************
- * 取代版本:
- * 作 者:
- * 完成日期:
- * 修改内容:
- * 修改文件:
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 包含头文件
- *********************************************************************************************************/
- #include "SysTick.h"
- #include "IM1253E.h"
- #include "Uart1.h"
- /*********************************************************************************************************
- * 宏定义
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 枚举结构体
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 内部变量定义
- *********************************************************************************************************/
- bool read_IM1253E_ok_flag;
- bool write_IM1253E_ok_flag;
- uint8_t Tx_Data_frame_IM1253E[UART1_BUF_SIZE];
- uint8_t W_R_reg_N;
- extern bool Rx_Finish_flag;
- extern uint8_t RX_Length;
- extern uint8_t Rx_Data_len;
- extern uint8_t RX_Index;
- extern uint8_t Rx_Data_buff_IM1253E[UART1_BUF_SIZE];
- /*********************************************************************************************************
- * 内部函数声明
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 内部函数实现
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 函数名称:CRC_calculate_function
- * 函数功能:CRC码计算
- * 输入参数:除了CRC码外的数据长度
- * 输出参数:计算出的CRC码
- * 返 回 值:计算出的CRC码
- * 创建日期:2024年04月09日
- * 注 意:
- *********************************************************************************************************/
- uint16_t CRC_calculate_function(uint8_t len)
- {
- uint8_t i = 0;
- uint8_t j = 0;
- uint16_t temp0 = 0xffff;
- uint16_t temp1 = 0xffff;
- for(i = 0;i < len;i++)
- {
- temp0 = Tx_Data_frame_IM1253E[i] ^ temp0;
- temp1 = temp0 >> 1;
- for(j = 0;j < 8;j++)
- {
- if((temp0 & 0x0001) > 0)
- {
- temp0 = temp1 ^ 0xa001;
- }
- else
- {
- temp0 = temp1;
- }
- temp1 = temp0 >> 1;
- }
- }
- return temp0;
- }
- /*********************************************************************************************************
- * 函数名称:Read_IM1253E_REG
- * 函数功能:读IM1253E寄存器功能函数
- * 输入参数:dev_addr:IM1253E设备地址;reg_addr:IM1253E寄存器首地址;len:要读取的数据长度即寄存器数
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2024年04月09日
- * 注 意:
- *********************************************************************************************************/
- void Read_IM1253E_REG(uint8_t dev_addr,uint16_t reg_addr,uint8_t len)
- {
- uint16_t temp0;
- RX_Index = 0;
- Rx_Finish_flag = false;
- Rx_Data_len = len << 2;
- RX_Length = Rx_Data_len + 5;
- Tx_Data_frame_IM1253E[0] = dev_addr;
- Tx_Data_frame_IM1253E[1] = cmd_read_IM1253E;
- Tx_Data_frame_IM1253E[2] = reg_addr >> 8;
- Tx_Data_frame_IM1253E[3] = reg_addr;
- Tx_Data_frame_IM1253E[4] = 0x00;
- Tx_Data_frame_IM1253E[5] = len;
- temp0 = CRC_calculate_function(6);
- Tx_Data_frame_IM1253E[6] = temp0;
- Tx_Data_frame_IM1253E[7] = temp0 >> 8;
- Start_Send_UartData(Tx_Data_frame_IM1253E,8);
- }
- /*********************************************************************************************************
- * 函数名称:Write_IM1253E_REG
- * 函数功能:写IM1253E寄存器功能函数
- * 输入参数:dev_addr:IM1253E设备地址;reg_addr:IM1253E寄存器首地址;*pt:要写入的存储区缓冲数据;len:要
- 写的寄存器数
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2024年04月09日
- * 注 意:
- *********************************************************************************************************/
- void Write_IM1253E_REG(uint8_t dev_addr,uint16_t reg_addr,uint8_t *pt,uint8_t len)
- {
- uint8_t i;
- Rx_Data_len = len;
- RX_Length = len + 6;
- Tx_Data_frame_IM1253E[0] = dev_addr;
- Tx_Data_frame_IM1253E[1] = cmd_read_IM1253E;
- Tx_Data_frame_IM1253E[2] = reg_addr >> 8;
- Tx_Data_frame_IM1253E[3] = reg_addr;
- Tx_Data_frame_IM1253E[4] = 0x00;
- Tx_Data_frame_IM1253E[5] = len;
- Tx_Data_frame_IM1253E[6] = len << 1;
- for(i = 0;i < len;i++)
- {
- Tx_Data_frame_IM1253E[7 + i] = *(pt + i);
- }
- Tx_Data_frame_IM1253E[7 + len] = CRC_calculate_function(7 + len);
- Tx_Data_frame_IM1253E[8 + len] = CRC_calculate_function(7 + len) >> 8;
- Start_Send_UartData(Tx_Data_frame_IM1253E,(9 + len));
- }
|