#ifndef _MAX30102_H #define _MAX30102_H #include "msp_iicMx.h"///// #include "c_type51.h"///// #include "TTSS_task.h"///// ///#include "bsp_lora_jx.h" #include "bsp_oled.h" #define MAX30102_Device_address 0xAE //register addresses #define REG_INTR_STATUS_1 0x00 #define REG_INTR_STATUS_2 0x01 #define REG_INTR_ENABLE_1 0x02 #define REG_INTR_ENABLE_2 0x03 #define REG_FIFO_WR_PTR 0x04 #define REG_OVF_COUNTER 0x05 #define REG_FIFO_RD_PTR 0x06 #define REG_FIFO_DATA 0x07 #define REG_FIFO_CONFIG 0x08 #define REG_MODE_CONFIG 0x09 #define REG_SPO2_CONFIG 0x0A #define REG_LED1_PA 0x0C #define REG_LED2_PA 0x0D #define REG_PILOT_PA 0x10 #define REG_MULTI_LED_CTRL1 0x11 #define REG_MULTI_LED_CTRL2 0x12 #define REG_TEMP_INTR 0x1F #define REG_TEMP_FRAC 0x20 #define REG_TEMP_CONFIG 0x21 #define REG_PROX_INT_THRESH 0x30 #define REG_REV_ID 0xFE #define REG_PART_ID 0xFF #define SAMPLES_PER_SECOND 100 //检测频率 #define D_m32_mode_HR 0x02 #define D_m32_mode_SPO2 0x03 uint8 Max30102_reset(void); void L2_max30102_init(void); void max30102_read_fifo(void); typedef struct { TS_task task; }TS_task_m32_; extern TS_task_m32_ ts_task_m32; extern void L2_task_m32_register(void); extern void L2_task_m32_handle(TS_task_m32_ *s); /* BYTE 1 FIFO_DATA[17] FIFO_DATA[16] BYTE 2 FIFO_DATA[15] FIFO_DATA[14] FIFO_DATA[13] FIFO_DATA[12] FIFO_DATA[11] FIFO_DATA[10] FIFO_DATA[9] FIFO_DATA[8] BYTE 3 FIFO_DATA[7] FIFO_DATA[6] FIFO_DATA[5] FIFO_DATA[4] FIFO_DATA[3] FIFO_DATA[2] FIFO_DATA[1] FIFO_DATA[0] */ typedef struct { u8 RED2; u8 RED1; u8 RED0; u8 IR2; u8 IR1; u8 IR0; }TS_m32fifo_; typedef struct { TS_m32fifo_ dfifo[33]; uint32 red; uint32 ir; u8 mode; u8 u81; u16 u162; u32 u322; u8 send[32];////需要传输的数据 暂定32 u8 fifo_ok;////在fifo数据读取完后的空档期,可以用来执行其他任务,否则会丢失数据 u8 havefigle;///= 1 手指放入判定 u8 havefigle_n;///= 1 手指放入判定 uint32 hr_s,hr_i,hr; U8 hr_out;////心跳的输出 U16 hr_out2;////心跳的输出 U16 hr_out2_temp;////心跳的输出 /// u32 u32a; u16 u16b; u16 u16d; u16 u16out_c;/// u8 s,s2; u8 HRok,SPO2ok,fifook,datok; uint32 cashe[3]; uint32 i,ac,dc,ac2,dc2; uint32 fifo_ir,fifo_red; uint32 IR_out2,RED_out2,IR_max,IR_min,RED_max,RED_min; uint32 sum,sum2; float ac_ir,dc_ir,ac_red,dc_red,R2,SPO2; U16 SPO2_out;//// 的输出 U16 SPO2_out_temp; U8 SPO2_ok;//// U8 hr_ok;//// }TS_max30102_; extern TS_max30102_ ts_max30102; #define L1_max30102_WB(reg,dat) L2_IICMx_WriteCmd(D_iicch_max13102,MAX30102_Device_address,reg,dat) #define IIC_Read_Byte(adr,reg) L2_IICMx_Read1Reg1D(D_iicch_max13102,adr,reg) #define L1_max30102_Read(adr,reg) L2_IICMx_Read1Reg1D(D_iicch_max13102,MAX30102_Device_address,reg) #define L1_max30102_Read_Array(reg,dat,n) L2_IICMx_ReadReg(D_iicch_max13102,MAX30102_Device_address,reg,dat,n) #endif