diff --git a/Project/HC32F460/MDK/HC32F460.uvoptx b/Project/HC32F460/MDK/HC32F460.uvoptx
index a29ea74..10bf79a 100644
--- a/Project/HC32F460/MDK/HC32F460.uvoptx
+++ b/Project/HC32F460/MDK/HC32F460.uvoptx
@@ -103,7 +103,7 @@
1
0
0
- 4
+ 12
@@ -114,13 +114,13 @@
- Segger\JL2CM3.dll
+ BIN\CMSIS_AGDI.dll
0
JL2CM3
- -U2147483647 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8027 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K.FLM -FS00 -FL080000 -FP0($$Device:HC32F460JETA$FlashARM\HC32F460_512K.FLM) -FF1HC32F460_otp.FLM -FS13000C00 -FL13FC -FP1($$Device:HC32F460JETA$FlashARM\HC32F460_otp.FLM)
+ -U12345678 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8027 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO31 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K.FLM -FS00 -FL080000 -FP0($$Device:HC32F460JETA$FlashARM\HC32F460_512K.FLM) -FF1HC32F460_otp.FLM -FS13000C00 -FL13FC -FP1($$Device:HC32F460JETA$FlashARM\HC32F460_otp.FLM)
0
@@ -145,7 +145,7 @@
0
CMSIS_AGDI
- -X"Any" -UAny -O206 -S0 -C0 -P00000000 -N00("") -D00(00000000) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K.FLM -FS00 -FL080000 -FP0($$Device:HC32F460JETA$FlashARM\HC32F460_512K.FLM) -FF1HC32F460_otp.FLM -FS13000C00 -FL13FC -FP1($$Device:HC32F460JETA$FlashARM\HC32F460_otp.FLM)
+ -X"Any" -UAny -O206 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K.FLM -FS00 -FL080000 -FP0($$Device:HC32F460JETA$FlashARM\HC32F460_512K.FLM) -FF1HC32F460_otp.FLM -FS13000C00 -FL13FC -FP1($$Device:HC32F460JETA$FlashARM\HC32F460_otp.FLM)
0
@@ -317,7 +317,7 @@
0
1
- 0
+ 1
0
0
0
diff --git a/Project/HC32F460/MDK/HC32F460.uvprojx b/Project/HC32F460/MDK/HC32F460.uvprojx
index a610f11..b89011a 100644
--- a/Project/HC32F460/MDK/HC32F460.uvprojx
+++ b/Project/HC32F460/MDK/HC32F460.uvprojx
@@ -10,14 +10,14 @@
Debug
0x4
ARM-ADS
- 5060960::V5.06 update 7 (build 960)::.\ARMCC
- 5060960::V5.06 update 7 (build 960)::.\ARMCC
+ 5060960::V5.06 update 7 (build 960)::ARMCC
+ 5060960::V5.06 update 7 (build 960)::ARMCC
0
HC32F460JETA
HDSC
- HDSC.HC32F460.1.0.11
+ HDSC.HC32F460.1.0.12
https://raw.githubusercontent.com/hdscmcu/pack/master/
IRAM(0x1FFF8000,0x2F000) IRAM2(0x200F0000,0x1000) IROM(0x00000000,0x80000) IROM2(0x03000C00,0x003FC) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE
@@ -695,7 +695,7 @@
HC32F460PETB
HDSC
- HDSC.HC32F460.1.0.11
+ HDSC.HC32F460.1.0.12
https://raw.githubusercontent.com/hdscmcu/pack/master/
IROM(0x00000000,0x80000) IROM2(0x03000C00,0x3FC) IRAM2(0x200F0000,0x1000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE
diff --git a/Project/HC32F460/source/Module/mmc5983/.gitignore b/Project/HC32F460/source/Module/mmc5983/.gitignore
new file mode 100644
index 0000000..985988c
--- /dev/null
+++ b/Project/HC32F460/source/Module/mmc5983/.gitignore
@@ -0,0 +1,130 @@
+# ---> uVision
+# git ignore file for Keil µVision Project
+
+# µVision 5 and µVision 4 Project screen layout file
+*.uvguix.*
+*.uvgui.*
+
+# Listing Files
+*.i
+*.lst
+*.m51
+*.m66
+*.map
+
+# Object Files
+*.axf
+*.b[0-2][0-9]
+*.b3[0-1]
+*.bak
+*.build_log.htm
+*.crf
+*.d
+*.dep
+*.elf
+*.htm
+*.iex
+*.lnp
+*.o
+*.obj
+*.sbr
+
+# Firmware Files
+*.bin
+*.h86
+*.hex
+
+# Build Files
+.bat
+
+# Debugger Files
+.ini
+
+# JLink Files
+JLinkLog.txt
+
+# Other Files
+
+# ---> VisualStudioCode
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+!.vscode/*.code-snippets
+
+# Local History for Visual Studio Code
+.history/
+
+# Built Visual Studio Code Extensions
+*.vsix
+
+# ---> IAR
+# Compiled binaries
+*.o
+*.bin
+*.elf
+*.hex
+*.map
+*.out
+*.obj
+
+# Trash
+*.bak
+thumbs.db
+*.~*
+
+# IAR Settings
+**/settings/*.crun
+**/settings/*.dbgdt
+**/settings/*.cspy
+**/settings/*.cspy.*
+**/settings/*.xcl
+**/settings/*.dni
+**/settings/*.wsdt
+**/settings/*.wspos
+
+# IAR Debug Exe
+**/Exe/*.sim
+
+# IAR Debug Obj
+**/Obj/*.pbd
+**/Obj/*.pbd.*
+**/Obj/*.pbi
+**/Obj/*.pbi.*
+
+# IAR project "Debug" directory
+Debug/
+
+# IAR project "Release" directory
+Release/
+
+# IAR project settings directory
+settings/
+
+# IAR backup files
+Backup*
+
+# IAR .dep files
+*.dep
+# ---> IAR_EWARM
+# gitignore template for the IAR EWARM
+# website: https://www.iar.com/knowledge/support/technical-notes/ide/which-files-should-be-version-controlled/
+
+# Some tools will put the EWARM files
+# under a subdirectory with the same name
+# as the configuration.
+# Example
+# EWARM/Config1/Obj /List /Exe
+# EWARM/Config2/Obj /List /Exe
+EWARM/**/Obj
+EWARM/**/List
+EWARM/**/Exe
+
+# Autogenerated project files
+*.dep
+*.ewt
+
+# Autogenerated folder for debugger
+EWARM/settings
+
diff --git a/Project/HC32F460/source/Module/mmc5983/README.md b/Project/HC32F460/source/Module/mmc5983/README.md
new file mode 100644
index 0000000..9803551
--- /dev/null
+++ b/Project/HC32F460/source/Module/mmc5983/README.md
@@ -0,0 +1,3 @@
+# MMC5983
+
+MMC5983驱动代码
\ No newline at end of file
diff --git a/Project/HC32F460/source/Module/mmc5983/mmc5983.c b/Project/HC32F460/source/Module/mmc5983/mmc5983.c
new file mode 100644
index 0000000..8b03eed
--- /dev/null
+++ b/Project/HC32F460/source/Module/mmc5983/mmc5983.c
@@ -0,0 +1,343 @@
+#include "main.h"
+#include "mmc5983.h"
+#include "UartDebug.h"
+#include "i2c.h"
+#include "Algorithm.h"
+
+static int32_t max_in[XYZ];
+static int32_t min_in[XYZ];
+static bool InitFlag;
+static bool MMC5983IntFlag;
+static MMC5983Var_t MMC5983Var;
+
+/*****************************************************************************************
+* : MMC5983_Write_Reg
+* : MMC5983дĴ
+* : reg Ĵַ
+ val Ĵ
+* ֵ: ɹtrueʧܷfalse
+*****************************************************************************************/
+static bool MMC5983_Write_Reg(uint8_t reg, uint8_t val)
+{
+ return I2C_MasterWriteData(M0P_I2C0, MMC5983_ADDRESS, reg, &val, 1);
+}
+
+/*****************************************************************************************
+* : MMC5983_Read_Reg
+* : MMC5983Ĵ
+* : reg Ĵַ
+* ֵ: ؼĴֵ
+*****************************************************************************************/
+static uint8_t MMC5983_Read_Reg(uint8_t reg)
+{
+ uint8_t res;
+ if(I2C_MasterReadData(M0P_I2C0, MMC5983_ADDRESS, reg, &res, 1) == false)
+ res = 0;
+ return res;
+}
+
+/*****************************************************************************************
+* : MMC5983_Read_Buffer
+* : MMC5983
+* : reg Ĵַ
+ buffer ȡ
+ len ȡ
+* ֵ: ɹtrueʧܷfalse
+*****************************************************************************************/
+static bool MMC5983_Read_Buffer(uint8_t reg, void *buffer, uint8_t len)
+{
+ return I2C_MasterReadData(M0P_I2C0, MMC5983_ADDRESS, reg, buffer, len);
+}
+
+/*****************************************************************************************
+* : MMC5983StartCov
+* : MMC5983ת
+* :
+* ֵ:
+*****************************************************************************************/
+static void MMC5983StartCov(void)
+{
+ MMC5983RegCtrl2 Ctrl2Reg; ///رת
+ Ctrl2Reg.Byte = 0x00;
+ Ctrl2Reg.Bit.Cm_freq = 0x04;
+ Ctrl2Reg.Bit.Cmm_en = 1; //10
+ Ctrl2Reg.Bit.Prd_set = 3;
+ Ctrl2Reg.Bit.En_prd_set = 1; //10
+ MMC5983_Write_Reg(MMC5983_CTRL_2, Ctrl2Reg.Byte);
+}
+
+/*****************************************************************************************
+* : MMC5983_Init
+* : MMC5983ʼ
+* :
+* ֵ:
+*****************************************************************************************/
+static void MMC5983_Init(void)
+{
+ uint8_t id;
+
+ id = MMC5983_Read_Reg(MMC5983_ID);
+ //DBG_LOG("MMC5983 id=0x%x\r\n",id);
+ MMC5983Var.MMC5983Delay1mSCnt = 100;
+ while(id != 0x30){
+ if(MMC5983Var.MMC5983Delay1mSCnt <= 0) {
+ DBG_LOG("LEFT MMC5983 INIT Err...\r\n");
+ InitFlag = false;
+ return;
+ }
+ }
+
+ MMC5983RegCtrl1 Ctrl1Reg;
+ Ctrl1Reg.Byte = 0x00;
+ Ctrl1Reg.Bit.SW_RST = 1;
+ MMC5983_Write_Reg(MMC5983_CTRL_1, Ctrl1Reg.Byte);
+ MMC5983Delay(15);
+
+ MMC5983RegCtrl2 Ctrl2Reg; ///رת
+ Ctrl2Reg.Byte = 0x00;
+ Ctrl2Reg.Bit.Cm_freq = 0x04;
+ Ctrl2Reg.Bit.Cmm_en = 0; //10
+ Ctrl2Reg.Bit.Prd_set = 3;
+ Ctrl2Reg.Bit.En_prd_set = 0; //10
+ MMC5983_Write_Reg(MMC5983_CTRL_2, Ctrl2Reg.Byte);
+
+ MMC5983RegCtrl3 Ctrl3Reg;
+ Ctrl3Reg.Byte = 0x00;
+ Ctrl3Reg.Bit.St_enm = 1;
+ Ctrl3Reg.Bit.St_enp = 1;
+ MMC5983_Write_Reg(MMC5983_CTRL_3, Ctrl3Reg.Byte);
+
+ MMC5983RegCtrl0 Ctrl0Reg;
+ Ctrl0Reg.Byte = 0x00;
+ Ctrl0Reg.Bit.TM_M = 1;
+ Ctrl0Reg.Bit.Auto_SR_en = 1;
+ Ctrl0Reg.Bit.NT_meas_done_en = 1;
+ MMC5983_Write_Reg(MMC5983_CTRL_0, Ctrl0Reg.Byte);
+
+ if(InitFlag == false){
+ DBG_LOG("MMC5983 INIT OK...\r\n");
+ InitFlag = true;
+ }
+}
+
+/*****************************************************************************************
+* : MMC5983_Read
+* : MMC5983ȡԭʼ
+* : MagAdcX X
+ MagAdcY Y
+ MagAdcZ Z
+* ֵ: ɹtrueʧܷfalse
+*****************************************************************************************/
+static bool MMC5983_Read(int32_t *MagAdcX, int32_t *MagAdcY, int32_t *MagAdcZ)
+{
+ static uint8_t buff[7];
+
+ if (MMC5983_Read_Buffer(MMC5983_X_OUT_H, buff, 7) == false)
+ return false;
+
+ *MagAdcX = (buff[0] << 10) | (buff[1] << 2) | ((buff[6] & 0xC0) >> 6);
+ *MagAdcY = (buff[2] << 10) | (buff[3] << 2) | ((buff[6] & 0x30) >> 4);
+ *MagAdcZ = (buff[4] << 10) | (buff[5] << 2) | ((buff[6] & 0x0C) >> 2);// Turn the 18 bits into unsigned 32-bit value
+ return true;
+}
+
+/*****************************************************************************************
+* : MMC5983_Get_Mag
+* : ⲿȡMMC5983ųǿ
+* : mag ȡ
+* ֵ:
+*****************************************************************************************/
+void MMC5983_Get_Mag(float *mag)
+{
+ if(mag == NULL)
+ return;
+
+ float ADVal[XYZ];
+
+ ADVal[X] = MMC5983Var.Mag_Original[X] - 131072.0f;
+ ADVal[Y] = MMC5983Var.Mag_Original[Y] - 131072.0f;
+ ADVal[Z] = MMC5983Var.Mag_Original[Z] - 131072.0f;
+
+ mag[0] = (float) (ADVal[X] * MMC5983_MAG_SCALE_18BIT);
+ mag[1] = (float) (ADVal[Y] * MMC5983_MAG_SCALE_18BIT);
+ mag[2] = (float) (ADVal[Z] * MMC5983_MAG_SCALE_18BIT);
+}
+
+/*****************************************************************************************
+* : MMC5983LoopHandler
+* : MMC5983ѭ
+* :
+* ֵ:
+*****************************************************************************************/
+extern void MmcDataProcessCallBack(float *Mag);
+
+void MMC5983LoopHandler(void)
+{
+ static int32_t mag_array[XYZ][10];
+ static uint8_t magcnt;
+ static uint8_t TimeOutMagcnt;
+
+ switch(MMC5983Var.Status) {
+ case MMC5983_STATUS_IDLE:{
+ break;}
+
+ case MMC5983_STATUS_START:{
+ for(int i = 0; i < 10; i++) {
+ mag_array[X][i] = 0;
+ mag_array[Y][i] = 0;
+ mag_array[Z][i] = 0;
+ }
+ magcnt = 0;
+ TimeOutMagcnt = 0;
+ memset(&MMC5983Var, NULL, sizeof(MMC5983Var));
+ MMC5983Var.Status = MMC5983_STATUS_DELAY;
+ break;}
+
+ case MMC5983_STATUS_DELAY:{
+ MMC5983StartRead();
+ MMC5983Var.MMC5983Delay1mSCnt = 50;
+ MMC5983Var.Status = MMC5983_STATUS_WAIT_DELAY;
+ break;}
+
+ case MMC5983_STATUS_WAIT_DELAY:{
+ if(MMC5983Var.MMC5983Delay1mSCnt <= 0){
+ MMC5983Var.Status = MMC5983_STATUS_READ;
+ }
+ break;}
+
+ case MMC5983_STATUS_READ:{
+ MMC5983Var.MMC5983Delay1mSCnt = 50;
+ MMC5983Var.Status = MMC5983_STATUS_WAIT_READ;
+ break;}
+
+ case MMC5983_STATUS_WAIT_READ:{
+ if(MMC5983Var.MMC5983Delay1mSCnt <= 0){
+ MMC5983Var.Status = MMC5983_STATUS_DELAY;
+ TimeOutMagcnt++;
+ }
+ if(MMC5983IntFlag == true){
+ MMC5983IntFlag = false;
+ MMC5983_Read(&mag_array[X][magcnt], &mag_array[Y][magcnt], &mag_array[Z][magcnt]);
+ magcnt++;
+ MMC5983Var.Status = MMC5983_STATUS_DELAY;
+ }
+ if(TimeOutMagcnt >= 10){
+ TimeOutMagcnt = 0;
+ if(magcnt > 0){
+ MMC5983Var.Mag_Original[X] = AverageFilter_32t(mag_array[X], magcnt);
+ MMC5983Var.Mag_Original[Y] = AverageFilter_32t(mag_array[Y], magcnt);
+ MMC5983Var.Mag_Original[Z] = AverageFilter_32t(mag_array[Z], magcnt);
+ magcnt = 0;
+ MMC5983_Get_Mag(MMC5983Var.Mag);
+ MmcDataProcessCallBack(MMC5983Var.Mag);
+ MMC5983Var.Status = MMC5983_STATUS_STOP;
+ }
+ else{
+ MMC5983Var.Status = MMC5983_STATUS_STOP;
+// DBG_LOG("LEFT MMC5983 TimeOut...\r\n");
+ }
+ }
+ if(magcnt >= 10){
+ MMC5983Var.Mag_Original[X] = AverageFilter_32t(mag_array[X], magcnt);
+ MMC5983Var.Mag_Original[Y] = AverageFilter_32t(mag_array[Y], magcnt);
+ MMC5983Var.Mag_Original[Z] = AverageFilter_32t(mag_array[Z], magcnt);
+ magcnt = 0;
+ MMC5983_Get_Mag(MMC5983Var.Mag);
+ MmcDataProcessCallBack(MMC5983Var.Mag);
+ MMC5983Var.Status = MMC5983_STATUS_STOP;
+ }
+ break;}
+
+ case MMC5983_STATUS_STOP:{
+ MMC5983Stop();
+ MMC5983Var.Status = MMC5983_STATUS_IDLE;
+ //MMC5983Var.Status = MMC5983_STATUS_START;//
+ break;}
+ }
+}
+
+/*****************************************************************************************
+* : LeftMMC59831mSRoutine
+* : MMC59831msʱѭ
+* :
+* ֵ:
+*****************************************************************************************/
+void MMC59831mSRoutine(void)
+{
+ if(MMC5983Var.MMC5983Delay1mSCnt > 0)
+ MMC5983Var.MMC5983Delay1mSCnt--;
+}
+
+/*****************************************************************************************
+* : LeftMMC5983Init
+* : MMC5983ʼ
+* :
+* ֵ:
+*****************************************************************************************/
+void MMC5983Init(void)
+{
+ if(!InitFlag){
+ MMC5983_Init();
+ return;
+ }
+
+ MMC5983Var.Status = MMC5983_STATUS_START;
+}
+
+/*****************************************************************************************
+* : LeftMMC5983Start
+* : MMC5983
+* :
+* ֵ:
+*****************************************************************************************/
+void MMC5983Start(void)
+{
+ if(!InitFlag){
+ MMC5983_Init();
+ return;
+ }
+
+ MMC5983Var.Status = MMC5983_STATUS_START;
+}
+
+/*****************************************************************************************
+* : LeftMMC5983StartRead
+* : MMC5983ȡ
+* :
+* ֵ:
+*****************************************************************************************/
+void MMC5983StartRead(void)
+{
+ MMC5983_Init();//ȡʱ³ʼ
+}
+
+/*****************************************************************************************
+* : MMC5983Stop
+* : MMC5983ֹͣ
+* :
+* ֵ:
+*****************************************************************************************/
+void MMC5983Stop(void)
+{
+ MMC5983RegCtrl0 Ctrl0Reg;
+ Ctrl0Reg.Byte = 0x00;
+ MMC5983_Write_Reg(MMC5983_CTRL_0, Ctrl0Reg.Byte);
+
+ MMC5983RegStatus StatusReg;
+ StatusReg.Byte = MMC5983_Read_Reg(MMC5983_STATUS);
+ if(StatusReg.Bit.Meas_M_Done == 1){
+ MMC5983_Write_Reg(MMC5983_STATUS, StatusReg.Byte);
+ }
+}
+
+/*****************************************************************************************
+* : LeftMMC5983IntCallBack
+* : MMC5983жϻص
+* :
+* ֵ:
+*****************************************************************************************/
+void MMC5983IntCallBack(void)
+{
+ MMC5983IntFlag = true;
+}
+
diff --git a/Project/HC32F460/source/Module/mmc5983/mmc5983.h b/Project/HC32F460/source/Module/mmc5983/mmc5983.h
new file mode 100644
index 0000000..9023e88
--- /dev/null
+++ b/Project/HC32F460/source/Module/mmc5983/mmc5983.h
@@ -0,0 +1,140 @@
+/**
+ *****************************************************************************
+ * @file ak8975.h
+ * @author WWJ
+ * @version v1.0
+ * @date 2019/04/09
+ * @environment stm32f407
+ * @brief
+ *****************************************************************************
+**/
+
+#ifndef _MMC5983_H
+#define _MMC5983_H
+#include "bsp.h"
+
+#define X 0
+#define Y 1
+#define Z 2
+#define XYZ 3
+
+#define MAX(A, B) (A > B) ? A : B;
+#define MIN(A, B) (A < B) ? A : B;
+
+#define MMC5983_X_OUT_H 0X00 //Device ID = 0x48
+#define MMC5983_X_OUT_L 0X01
+#define MMC5983_Y_OUT_H 0X02
+#define MMC5983_Y_OUT_L 0X03
+#define MMC5983_Z_OUT_H 0X04
+#define MMC5983_Z_OUT_L 0X05
+#define MMC5983_XYZ_OUT 0X06
+#define MMC5983_TMP_OUT 0X07
+#define MMC5983_STATUS 0X08
+#define MMC5983_CTRL_0 0X09
+#define MMC5983_CTRL_1 0X0A
+#define MMC5983_CTRL_2 0X0B
+#define MMC5983_CTRL_3 0X0C
+#define MMC5983_ID 0X2F
+
+#define MMC5983_ADDRESS 0x30
+#define MMC5983_MAG_SCALE_16BIT 0.24414f
+#define MMC5983_MAG_SCALE_18BIT 0.061035f
+
+#define MMC5983Delay(x) delay_ms(x)
+
+typedef union {
+ struct {
+ uint8_t Meas_M_Done: 1;
+ uint8_t Meas_T_Done: 1;
+ uint8_t Res0: 2;
+ uint8_t OTP_Read_Done: 1;
+ uint8_t Res1: 3;
+ }Bit;
+ uint8_t Byte;
+}MMC5983RegStatus;
+
+typedef union {
+ struct {
+ uint8_t TM_M: 1;
+ uint8_t TM_T: 1;
+ uint8_t NT_meas_done_en: 1;
+ uint8_t Set: 1;
+ uint8_t Reset: 1;
+ uint8_t Auto_SR_en: 1;
+ uint8_t OTP_Read: 1;
+ uint8_t Res0: 1;
+ }Bit;
+ uint8_t Byte;
+}MMC5983RegCtrl0;
+
+typedef union {
+ struct {
+ uint8_t BW: 2;
+ uint8_t X_Inhibit: 1;
+ uint8_t YZ_Inhibit: 2;
+ uint8_t Res0: 2;
+ uint8_t SW_RST: 1;
+ }Bit;
+ uint8_t Byte;
+}MMC5983RegCtrl1;
+
+typedef union {
+ struct {
+ uint8_t Cm_freq: 3;
+ uint8_t Cmm_en: 1;
+ uint8_t Prd_set: 3;
+ uint8_t En_prd_set: 1;
+ }Bit;
+ uint8_t Byte;
+}MMC5983RegCtrl2;
+
+typedef union {
+ struct {
+ uint8_t Res0: 1;
+ uint8_t St_enp: 1;
+ uint8_t St_enm: 1;
+ uint8_t Res1: 3;
+ uint8_t Spi_3w: 1;
+ uint8_t Res2: 1;
+ }Bit;
+ uint8_t Byte;
+}MMC5983RegCtrl3;
+
+typedef enum{
+ MMC5983_STATUS_IDLE,
+ MMC5983_STATUS_START,
+ MMC5983_STATUS_DELAY,
+ MMC5983_STATUS_WAIT_DELAY,
+ MMC5983_STATUS_READ,
+ MMC5983_STATUS_WAIT_READ,
+ MMC5983_STATUS_STOP,
+}MMC5983Status_m;
+
+
+typedef struct {
+ MMC5983Status_m Status;
+ uint16_t MMC5983Delay1mSCnt;
+ float Mag[3];
+ int32_t Mag_Original[XYZ];
+}MMC5983Var_t;
+
+void MMC5983LoopHandler(void);
+void MMC59831mSRoutine(void);
+void MMC5983Init(void);
+void MMC5983Start(void);
+void MMC5983Stop(void);
+void MMC5983IntCallBack(void);
+
+void MMC5983Calib(void);
+void MMC5983GetADValue(int32_t *Mag);
+void MMC5983_Get_Mag(float *mag);
+MMC5983Status_m GetMMC5983Status(void);
+void MMC5983StartRead(void);
+bool GetMMC5983CalibStatus(void);
+#endif
+
+
+
+/* end of ak8975.h */
+
+