From ad5bf12ca09f1a8349a90a5560cf270912a7afd7 Mon Sep 17 00:00:00 2001 From: YuanHongbin <975559679@qq.com> Date: Sun, 14 Sep 2025 04:00:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=A0=E6=84=9F=E5=99=A8=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E9=87=87=E9=9B=86=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/HC32F460/MDK/HC32F460.uvoptx | 79 ++- Project/HC32F460/MDK/HC32F460.uvprojx | 37 +- .../HC32F460/source/Module/AD7924/ad7924.c | 2 - .../source/Module/CS1237/CS1237_LEFTLOW.c | 113 ++-- .../source/Module/CS1237/CS1237_LEFTLOW.h | 38 +- .../source/Module/CS1237/CS1237_LEFTUP.c | 483 +++++++++-------- .../source/Module/CS1237/CS1237_LEFTUP.h | 65 +-- .../source/Module/CS1237/CS1237_RIGHRLOW.c | 485 ------------------ .../source/Module/CS1237/CS1237_RIGHRLOW.h | 91 ---- .../source/Module/CS1237/CS1237_RIGHTLOW.c | 464 +++++++++++++++++ .../source/Module/CS1237/CS1237_RIGHTLOW.h | 78 +++ .../source/Module/CS1237/CS1237_RIGHTUP.c | 483 +++++++++-------- .../source/Module/CS1237/CS1237_RIGHTUP.h | 65 +-- Project/HC32F460/source/User/Inc/bsp.h | 91 ++-- Project/HC32F460/source/User/Inc/main.h | 86 +++- Project/HC32F460/source/User/Src/Algorithm.c | 34 +- Project/HC32F460/source/User/Src/bsp.c | 425 ++++++++++++--- Project/HC32F460/source/User/Src/main.c | 457 +++++++++++++++-- driver/inc/hc32f460_gpio.h | 1 + driver/inc/hc32f460_icg.h | 2 +- driver/src/hc32f460_gpio.c | 2 - mcu/common/hc32_common.h | 2 +- 22 files changed, 2191 insertions(+), 1392 deletions(-) delete mode 100644 Project/HC32F460/source/Module/AD7924/ad7924.c delete mode 100644 Project/HC32F460/source/Module/CS1237/CS1237_RIGHRLOW.c delete mode 100644 Project/HC32F460/source/Module/CS1237/CS1237_RIGHRLOW.h create mode 100644 Project/HC32F460/source/Module/CS1237/CS1237_RIGHTLOW.c create mode 100644 Project/HC32F460/source/Module/CS1237/CS1237_RIGHTLOW.h diff --git a/Project/HC32F460/MDK/HC32F460.uvoptx b/Project/HC32F460/MDK/HC32F460.uvoptx index 58f4fd7..e4e31f9 100644 --- a/Project/HC32F460/MDK/HC32F460.uvoptx +++ b/Project/HC32F460/MDK/HC32F460.uvoptx @@ -117,10 +117,30 @@ Segger\JL2CM3.dll + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + 0 JL2CM3 - -U4294967295 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K.FLM -FS00 -FL080000 -FP0($$Device:HC32F460JEUA$FlashARM\HC32F460_512K.FLM) -FF1HC32F460_otp.FLM -FS13000C00 -FL13FC -FP1($$Device:HC32F460JEUA$FlashARM\HC32F460_otp.FLM) + -U4294967295 -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:HC32F460JEUA$FlashARM\HC32F460_512K.FLM) -FF1HC32F460_otp.FLM -FS13000C00 -FL13FC -FP1($$Device:HC32F460JEUA$FlashARM\HC32F460_otp.FLM) 0 @@ -129,18 +149,35 @@ + + + 0 + 1 + LEFTLOW_CS1237Var.CS1237Delay1mSCnt,0x0A + + + 1 + 1 + App.FeedDogDlyCnt,0x0A + + + 2 + 1 + App.Status,0x0A + + 0 0 0 - 0 + 1 0 0 0 0 - 0 + 1 0 0 0 @@ -952,6 +989,42 @@ 0 0 + + 4 + 51 + 1 + 0 + 0 + 0 + ..\source\Module\CS1237\CS1237_LEFTUP.c + CS1237_LEFTUP.c + 0 + 0 + + + 4 + 52 + 1 + 0 + 0 + 0 + ..\source\Module\CS1237\CS1237_RIGHTLOW.c + CS1237_RIGHTLOW.c + 0 + 0 + + + 4 + 53 + 1 + 0 + 0 + 0 + ..\source\Module\CS1237\CS1237_RIGHTUP.c + CS1237_RIGHTUP.c + 0 + 0 + diff --git a/Project/HC32F460/MDK/HC32F460.uvprojx b/Project/HC32F460/MDK/HC32F460.uvprojx index 5f94494..7b4f278 100644 --- a/Project/HC32F460/MDK/HC32F460.uvprojx +++ b/Project/HC32F460/MDK/HC32F460.uvprojx @@ -10,9 +10,8 @@ Debug 0x4 ARM-ADS - 6160000::V6.16::ARMCLANG - 6160000::V6.16::ARMCLANG - 1 + 5060960::V5.06 update 7 (build 960)::ARMCC + 0 HC32F460JEUA @@ -315,7 +314,7 @@ 1 - 2 + 1 0 0 1 @@ -650,6 +649,21 @@ 1 ..\source\Module\CS1237\CS1237_LEFTLOW.c + + CS1237_LEFTUP.c + 1 + ..\source\Module\CS1237\CS1237_LEFTUP.c + + + CS1237_RIGHTLOW.c + 1 + ..\source\Module\CS1237\CS1237_RIGHTLOW.c + + + CS1237_RIGHTUP.c + 1 + ..\source\Module\CS1237\CS1237_RIGHTUP.c + @@ -1303,6 +1317,21 @@ 1 ..\source\Module\CS1237\CS1237_LEFTLOW.c + + CS1237_LEFTUP.c + 1 + ..\source\Module\CS1237\CS1237_LEFTUP.c + + + CS1237_RIGHTLOW.c + 1 + ..\source\Module\CS1237\CS1237_RIGHTLOW.c + + + CS1237_RIGHTUP.c + 1 + ..\source\Module\CS1237\CS1237_RIGHTUP.c + diff --git a/Project/HC32F460/source/Module/AD7924/ad7924.c b/Project/HC32F460/source/Module/AD7924/ad7924.c deleted file mode 100644 index e4d51f1..0000000 --- a/Project/HC32F460/source/Module/AD7924/ad7924.c +++ /dev/null @@ -1,2 +0,0 @@ -#include "bps.h" - diff --git a/Project/HC32F460/source/Module/CS1237/CS1237_LEFTLOW.c b/Project/HC32F460/source/Module/CS1237/CS1237_LEFTLOW.c index f4bae4b..7e7969d 100644 --- a/Project/HC32F460/source/Module/CS1237/CS1237_LEFTLOW.c +++ b/Project/HC32F460/source/Module/CS1237/CS1237_LEFTLOW.c @@ -4,6 +4,22 @@ #include "main.h" #include "Algorithm.h" +#define CS1237_DOUT_OUT() PORT_OE(LEFTLOW_CS1237_DOUT_PORTx, LEFTLOW_CS1237_DOUT_PINx, Enable) +#define CS1237_DOUT_IN() PORT_OE(LEFTLOW_CS1237_DOUT_PORTx, LEFTLOW_CS1237_DOUT_PINx, Disable) +#define CS1237_DOUT_H() SET_LEFTLOW_CS1237_DOUT() +#define CS1237_DOUT_L() CLR_LEFTLOW_CS1237_DOUT() +#define CS1237_DOUT_GET() GET_LEFTLOW_CS1237_DOUT() + +#define CS1237_SCLK_H() SET_LEFTLOW_CS1237_SCLK() +#define CS1237_SCLK_L() CLR_LEFTLOW_CS1237_SCLK() + +#define CS1237_5NS(x) delay_5ns(x) //5ns延时 +#define CS1237_1US(x) Ddl_Delay1us(x) //1us延时 +#define CS1237_1MS(x) Ddl_Delay1ms(x) //1ms延时 + +#define CS1237IntEnable() ExtInt01IntEnable() +#define CS1237IntDisable() ExtInt01IntDisable() + LEFTLOW_CS1237Var_t LEFTLOW_CS1237Var; static bool InitFlag; static bool CS1237IrqFlag; @@ -18,15 +34,15 @@ extern void LEFTLOW_CS1237AinADataProcessCallBack(int32_t AD); static void CS1237_Clock(void) { CS1237_SCLK_H(); - CS1237_100NS(3); + CS1237_5NS(60); CS1237_SCLK_L(); - CS1237_100NS(3); + CS1237_5NS(60); } /** cs1237 休眠*/ static void CS1237_Sleep(void) { CS1237_SCLK_H(); - CS1237_1US(150); + CS1237_1US(200); } /** cs1237 唤醒*/ static void CS1237_WakeUp(void) @@ -48,8 +64,8 @@ static void Set_CS1237_Config(uint8_t ad_reg) CS1237IrqFlag = false; while(CS1237IrqFlag == false) //等待芯片准备好 { - if(CS1237Var.CS1237Delay1mSCnt <= 0){ - DBG_LOG("LEFTLOW CS1237 Preparation Timeout...\r\n"); + if(LEFTLOW_CS1237Var.CS1237Delay1mSCnt <= 0){ + //DBG_LOG("LEFTLOW CS1237 Preparation Timeout...\r\n"); return; // 超时退出 } } @@ -97,7 +113,7 @@ static void Set_CS1237_Config(uint8_t ad_reg) } else { - CS1238_DOUT_L(); + CS1237_DOUT_L(); } reg_temp = reg_temp << 1; CS1237_Clock(); @@ -120,12 +136,12 @@ static int32_t Read_CS1237_Config(void) CS1237_DOUT_H(); CS1237_DOUT_IN(); CS1237_SCLK_L(); //时钟拉低 - CS1237Var.CS1237Delay1mSCnt = 300; + LEFTLOW_CS1237Var.CS1237Delay1mSCnt = 300; CS1237IrqFlag = false; while(CS1237IrqFlag == false) //等待芯片准备好 { - if(CS1237Var.CS1237Delay1mSCnt <= 0){ - DBG_LOG("LEFTLOW CS1237 Preparation Timeout...\r\n"); + if(LEFTLOW_CS1237Var.CS1237Delay1mSCnt <= 0){ + //DBG_LOG("LEFTLOW CS1237 Preparation Timeout...\r\n"); return 0; // 超时退出 } } @@ -167,11 +183,11 @@ static int32_t Read_CS1237_Config(void) { CS1237_SCLK_H(); reg_temp <<= 1; //左移1位准备接受数据 初始默认0 - CS1237_100NS(3);//延时300ns - if(GET_CS1237_DOUT() == true) //有数值则累加 + CS1237_5NS(60);//延时300ns + if(CS1237_DOUT_GET() == true) //有数值则累加 reg_temp |= 1; CS1237_SCLK_L(); - CS1237_100NS(3); + CS1237_5NS(60); } /* 8: clk46 */ CS1237_Clock(); @@ -192,11 +208,11 @@ static int32_t Read_CS1237_Ad_Data(void) { CS1237_SCLK_H(); data_temp <<= 1; //左移1位准备接受数据 初始默认0 - CS1237_100NS(3);//延时300ns - if(GET_CS1237_DOUT() == true) //有数值则累加 + CS1237_5NS(60);//延时300ns + if(CS1237_DOUT_GET() == true) //有数值则累加 data_temp |= 1; CS1237_SCLK_L(); - CS1237_100NS(3); + CS1237_5NS(60); } /* clk25 ~ clk27 */ @@ -220,16 +236,16 @@ void LEFTLOW_CS1237_IrqCallBack(void) } void LEFTLOW_CS1237_Init(void) { + CS1237IrqFlag = false; BuildDelay = false; - CS1237IntEnable(); LEFTLOW_CS1237Var.AinA_AD = 0; - //CS1237Var.Ain2_AD = 0; LEFTLOW_CS1237Var.Temp_AD = 0; LEFTLOW_CS1237Var.Jump_AD = 0; + CS1237IntEnable(); CS1237Port = CH_SEL_A; - CS1237Hz = SPEED_SEL_40Hz; + CS1237Hz = SPEED_SEL_640Hz; CS1237PGA = PGA_SEL_128; uint8_t read_reg = 0x00; @@ -241,8 +257,8 @@ void LEFTLOW_CS1237_Init(void) CS1237_1MS(20); if(read_reg != set_reg){ DBG_LOG("LEFTLOW CS1237 Init ERR...\r\n"); - DBG_LOG("set_reg = %02X\tread_reg = %02X\r\n",set_reg,read_reg); - InitFlag = false; + //DBG_LOG("set_reg = %02X\tread_reg = %02X\r\n",set_reg,read_reg); + InitFlag = true; } else { DBG_LOG("LEFTLOW CS1237 Init OK...\r\n"); @@ -250,6 +266,7 @@ void LEFTLOW_CS1237_Init(void) CS1237Port = read_reg & 0x03; InitFlag = true; } + CS1237IntDisable(); } void LEFTLOW_CS1237DataLoopCollect(void) { @@ -258,10 +275,10 @@ void LEFTLOW_CS1237DataLoopCollect(void) static uint8_t TimeOutmagcnt; switch(LEFTLOW_CS1237Var.Status) { - case CS1237_STATUS_IDLE:{ + case LLCS1237_STATUS_IDLE:{ break;} - case CS1237_STATUS_START:{ + case LLCS1237_STATUS_START:{ memset(&ad_array, 0x00, sizeof(ad_array)); adcnt = 0; TimeOutmagcnt = 0; @@ -281,35 +298,35 @@ void LEFTLOW_CS1237DataLoopCollect(void) if(CS1237Hz == SPEED_SEL6_1280Hz){ LEFTLOW_CS1237Var.CS1237Delay1mSCnt = tCon_1280Hz; } - LEFTLOW_CS1237Var.Status = CS1237_STATUS_DELAY; + LEFTLOW_CS1237Var.Status = LLCS1237_STATUS_DELAY; } else { - LEFTLOW_CS1237Var.Status = CS1237_STATUS_READ; + LEFTLOW_CS1237Var.Status = LLCS1237_STATUS_READ; } break;} - case CS1237_STATUS_DELAY:{ + case LLCS1237_STATUS_DELAY:{ if(LEFTLOW_CS1237Var.CS1237Delay1mSCnt <= 0){ - LEFTLOW_CS1237Var.Status = CS1237_STATUS_READ; + LEFTLOW_CS1237Var.Status = LLCS1237_STATUS_READ; } break;} - case CS1237_STATUS_READ:{ + case LLCS1237_STATUS_READ:{ CS1237IrqFlag = false; LEFTLOW_CS1237Var.CS1237Delay1mSCnt = 100; - LEFTLOW_CS1237Var.Status = CS1237_STATUS_WAIT_READ; + LEFTLOW_CS1237Var.Status = LLCS1237_STATUS_WAIT_READ; break;} - case CS1237_STATUS_WAIT_READ:{ + case LLCS1237_STATUS_WAIT_READ:{ if(LEFTLOW_CS1237Var.CS1237Delay1mSCnt <= 0){ - LEFTLOW_CS1237Var.Status = CS1237_STATUS_READ; + LEFTLOW_CS1237Var.Status = LLCS1237_STATUS_READ; TimeOutmagcnt++; } if(CS1237IrqFlag == true){ CS1237IrqFlag = false; ad_array[adcnt++] = Read_CS1237_Ad_Data(); - LEFTLOW_CS1237Var.Status = CS1237_STATUS_READ; + LEFTLOW_CS1237Var.Status = LLCS1237_STATUS_READ; } if(TimeOutmagcnt >= PACK_NUM){ TimeOutmagcnt = 0; @@ -326,19 +343,19 @@ void LEFTLOW_CS1237DataLoopCollect(void) LEFTLOW_CS1237Var.Jump_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); //CS1237JumpDataProcessCallBack(LEFTLOW_CS1237Var.Jump_AD); } - LEFTLOW_CS1237Var.Status = CS1237_STATUS_CH_SEL; + LEFTLOW_CS1237Var.Status = LLCS1237_STATUS_CH_SEL; } else{ if(CS1237Port == CH_SEL_A){ - DBG_LOG("CS1238 CHA TimeOut...\r\n"); + DBG_LOG("LEFTLOW CS1237 CHA TimeOut...\r\n"); } if(CS1237Port == CH_SEL_TEMP){ - DBG_LOG("CS1238 Temp TimeOut...\r\n"); + DBG_LOG("LEFTLOW CS1237 Temp TimeOut...\r\n"); } if(CS1237Port == CH_SEL_JUMP){ - DBG_LOG("CS1238 Jump TimeOut...\r\n"); + DBG_LOG("LEFTLOW CS1237 Jump TimeOut...\r\n"); } - LEFTLOW_CS1237Var.Status = CS1237_STATUS_CH_SEL; + LEFTLOW_CS1237Var.Status = LLCS1237_STATUS_CH_SEL; } } if(adcnt >= PACK_NUM){ @@ -354,12 +371,12 @@ void LEFTLOW_CS1237DataLoopCollect(void) LEFTLOW_CS1237Var.Jump_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); //CS1237JumpDataProcessCallBack(LEFTLOW_CS1237Var.Jump_AD); } - LEFTLOW_CS1237Var.Status = CS1237_STATUS_CH_SEL; + LEFTLOW_CS1237Var.Status = LLCS1237_STATUS_CH_SEL; } break;} - case CS1237_STATUS_CH_SEL:{ - LEFTLOW_CS1237Var.Status = CS1237_STATUS_STOP; + case LLCS1237_STATUS_CH_SEL:{ + LEFTLOW_CS1237Var.Status = LLCS1237_STATUS_STOP; BuildDelay = false; uint8_t read_reg; if(CS1237Port == CH_SEL_A){ @@ -414,10 +431,10 @@ void LEFTLOW_CS1237DataLoopCollect(void) } break;} - case CS1237_STATUS_STOP:{ - //CS1237Stop(); - //LEFTLOW_CS1237Var.Status = CS1237_STATUS_IDLE; - LEFTLOW_CS1237Var.Status = CS1237_STATUS_START;//持续工作 + case LLCS1237_STATUS_STOP:{ + LEFTLOW_CS1237Stop(); + LEFTLOW_CS1237Var.Status = LLCS1237_STATUS_IDLE; + //LEFTLOW_CS1237Var.Status = LLCS1237_STATUS_START;//持续工作 break;} } } @@ -426,22 +443,22 @@ void LEFTLOW_CS12371mSRoutine(void) if(LEFTLOW_CS1237Var.CS1237Delay1mSCnt > 0) LEFTLOW_CS1237Var.CS1237Delay1mSCnt--; } -void LEFTLOW_CS1238Start(void) +void LEFTLOW_CS1237Start(void) { CS1237_WakeUp(); CS1237_1MS(2); BuildDelay = true; - LEFTLOW_CS1237IntEnable(); + CS1237IntEnable(); if(!InitFlag){ LEFTLOW_CS1237_Init(); return; } - LEFTLOW_CS1237Var.Status = CS1237_STATUS_START; + LEFTLOW_CS1237Var.Status = LLCS1237_STATUS_START; } void LEFTLOW_CS1237Stop(void) { - LEFTLOW_CS1237IntDisable(); - CS1237_Sleep(); + CS1237IntDisable(); + //CS1237_Sleep(); } diff --git a/Project/HC32F460/source/Module/CS1237/CS1237_LEFTLOW.h b/Project/HC32F460/source/Module/CS1237/CS1237_LEFTLOW.h index a7f5a67..c7c009b 100644 --- a/Project/HC32F460/source/Module/CS1237/CS1237_LEFTLOW.h +++ b/Project/HC32F460/source/Module/CS1237/CS1237_LEFTLOW.h @@ -26,18 +26,6 @@ #define CH_SEL_TEMP 0x02 #define CH_SEL_JUMP 0x03 -#define CS1237_DOUT_OUT() SetBit(((uint32_t)&M0P_GPIO->PADIR + LEFTLOW_CS1237_DOUT_PORTx), LEFTLOW_CS1237_DOUT_PINx, 0) -#define CS1237_DOUT_IN() SetBit(((uint32_t)&M0P_GPIO->PADIR + LEFTLOW_CS1237_DOUT_PORTx), LEFTLOW_CS1237_DOUT_PINx, 1) -#define CS1237_DOUT_H() SET_LEFTLOW_CS1237_DOUT() -#define CS1237_DOUT_L() CLR_LEFTLOW_CS1237_DOUT() - -#define CS1237_SCLK_H() SET_LEFTLOW_CS1237_SCLK() -#define CS1237_SCLK_L() CLR_LEFTLOW_CS1237_SCLK() - -#define CS1237_1US(x) delay_us(x) //1usʱ -#define CS1237_100NS(x) delay_ns(x) //100nsʱ -#define CS1237_1MS(x) delay_ms(x) //1msʱ - /*Definition of conversion time corresponding to repeatability setting*/ /* 10Hz //ʱ300ms @@ -54,35 +42,33 @@ //#define PORT_B 1 //ɼͨB #define PORT_TEMP 0 //ɼ¶ #define PORT_JUMP 0 //ڶ̲ɼ -#define PACK_NUM 10 //һβɼݰ -#define FILTER_NUM 4 //˲ +#define PACK_NUM 1 //һβɼݰ +#define FILTER_NUM 0 //˲ typedef enum{ - CS1237_STATUS_IDLE, - CS1237_STATUS_START, - CS1237_STATUS_DELAY, - CS1237_STATUS_READ, - CS1237_STATUS_WAIT_READ, - CS1237_STATUS_CH_SEL, - CS1237_STATUS_STOP, -}CS1237Status_m; + LLCS1237_STATUS_IDLE, + LLCS1237_STATUS_START, + LLCS1237_STATUS_DELAY, + LLCS1237_STATUS_READ, + LLCS1237_STATUS_WAIT_READ, + LLCS1237_STATUS_CH_SEL, + LLCS1237_STATUS_STOP, +}LeftLowCS1237Status_m; typedef struct{ - CS1237Status_m Status; + LeftLowCS1237Status_m Status; uint32_t CS1237Delay1mSCnt; int32_t AinA_AD;//AINAad - //int32_t Ain2_AD;//AIN2ad + //int32_t AinB_AD;//AINBad int32_t Temp_AD;//¶ad int32_t Jump_AD;//ڶad } LEFTLOW_CS1237Var_t; -extern LEFTLOW_CS1237Var_t LEFTLOW_CS1237Var; void LEFTLOW_CS1237_Init(void); void LEFTLOW_CS1237_IrqCallBack(void); void LEFTLOW_CS1237DataLoopCollect(void); -void LEFTLOW_CS1237LoopHandler(void); void LEFTLOW_CS12371mSRoutine(void); void LEFTLOW_CS1237Start(void); void LEFTLOW_CS1237Stop(void); diff --git a/Project/HC32F460/source/Module/CS1237/CS1237_LEFTUP.c b/Project/HC32F460/source/Module/CS1237/CS1237_LEFTUP.c index a10e7c8..ae73902 100644 --- a/Project/HC32F460/source/Module/CS1237/CS1237_LEFTUP.c +++ b/Project/HC32F460/source/Module/CS1237/CS1237_LEFTUP.c @@ -1,189 +1,203 @@ -#include "CS1238.h" -#include "UartDebug.h" +#include "CS1237_LEFTUP.h" +#include "Debug.h" #include "bsp.h" #include "main.h" #include "Algorithm.h" -CS1238Var_t CS1238Var; -static bool InitFlag; -static bool CS1238IrqFlag; -static bool BuildDelay; -static uint8_t CS1238Port; -static uint8_t CS1238Hz; -static uint8_t CS1238PGA; -extern void CS1238Ain1DataProcessCallBack(int32_t AD); -extern void CS1238Ain2DataProcessCallBack(int32_t AD); -extern void CS1238TempDataProcessCallBack(int32_t AD); -extern void CS1238JumpDataProcessCallBack(int32_t AD); +#define CS1237_DOUT_OUT() PORT_OE(LEFTUP_CS1237_DOUT_PORTx, LEFTUP_CS1237_DOUT_PINx, Enable) +#define CS1237_DOUT_IN() PORT_OE(LEFTUP_CS1237_DOUT_PORTx, LEFTUP_CS1237_DOUT_PINx, Disable) +#define CS1237_DOUT_H() SET_LEFTUP_CS1237_DOUT() +#define CS1237_DOUT_L() CLR_LEFTUP_CS1237_DOUT() +#define CS1237_DOUT_GET() GET_LEFTUP_CS1237_DOUT() -/** cs1238 时序时钟*/ -static void CS1238_Clock(void) +#define CS1237_SCLK_H() SET_LEFTUP_CS1237_SCLK() +#define CS1237_SCLK_L() CLR_LEFTUP_CS1237_SCLK() + +#define CS1237_5NS(x) delay_5ns(x) //5ns延时 +#define CS1237_1US(x) Ddl_Delay1us(x) //1us延时 +#define CS1237_1MS(x) Ddl_Delay1ms(x) //1ms延时 + +#define CS1237IntEnable() ExtInt10IntEnable() +#define CS1237IntDisable() ExtInt10IntDisable() + +LEFTUP_CS1237Var_t LEFTUP_CS1237Var; +static bool InitFlag; +static bool CS1237IrqFlag; +static bool BuildDelay; +static uint8_t CS1237Port; +static uint8_t CS1237Hz; +static uint8_t CS1237PGA; +extern void LEFTUP_CS1237AinADataProcessCallBack(int32_t AD); + + +/** cs1237 时序时钟*/ +static void CS1237_Clock(void) { - CS1238_SCLK_H(); - CS1238_100NS(3); - CS1238_SCLK_L(); - CS1238_100NS(3); + CS1237_SCLK_H(); + CS1237_5NS(60); + CS1237_SCLK_L(); + CS1237_5NS(60); } -/** cs1238 休眠*/ -static void CS1238_Sleep(void) +/** cs1237 休眠*/ +static void CS1237_Sleep(void) { - CS1238_SCLK_H(); - CS1238_1US(150); + CS1237_SCLK_H(); + CS1237_1US(200); } -/** cs1238 唤醒*/ -static void CS1238_WakeUp(void) +/** cs1237 唤醒*/ +static void CS1237_WakeUp(void) { - CS1238_SCLK_L(); - CS1238_1US(20); + CS1237_SCLK_L(); + CS1237_1US(20); } -/**设置CS1238寄存器*/ -static void Set_CS1238_Config(uint8_t ad_reg) +/**设置CS1237寄存器*/ +static void Set_CS1237_Config(uint8_t ad_reg) { uint16_t bit_cout = 0; uint8_t reg_temp = 0x00; //DOUT由高变低之后开始读取数据 - CS1238_DOUT_OUT(); - CS1238_DOUT_H(); - CS1238_DOUT_IN(); - CS1238_SCLK_L(); //时钟拉低 - CS1238Var.CS1238Delay1mSCnt = 300; - CS1238IrqFlag = false; - while(CS1238IrqFlag == false) //等待芯片准备好 + CS1237_DOUT_OUT(); + CS1237_DOUT_H(); + CS1237_DOUT_IN(); + CS1237_SCLK_L(); //时钟拉低 + LEFTUP_CS1237Var.CS1237Delay1mSCnt = 300; + CS1237IrqFlag = false; + while(CS1237IrqFlag == false) //等待芯片准备好 { - if(CS1238Var.CS1238Delay1mSCnt <= 0){ - DBG_LOG("CS1238 Preparation Timeout...\r\n"); + if(LEFTUP_CS1237Var.CS1237Delay1mSCnt <= 0){ + //DBG_LOG("LEFTUP CS1237 Preparation Timeout...\r\n"); return; // 超时退出 } } - CS1238IntDisable(); - CS1238IrqFlag = false; + CS1237IntDisable(); + CS1237IrqFlag = false; /* clk1-clk26 写期间不需要操作*/ for (bit_cout = 0; bit_cout < 26; bit_cout++) { - CS1238_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 } /* clk27 DOUT输出拉高*/ - CS1238_Clock(); //给一周期时钟 - CS1238_DOUT_H(); + CS1237_Clock(); //给一周期时钟 + CS1237_DOUT_H(); /* clk28 - clk29 发送写寄存器命令字 */ - CS1238_Clock(); //给一周期时钟 - CS1238_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 /* clk30 - clk36 发送写寄存器命令字 */ - CS1238_DOUT_OUT(); + CS1237_DOUT_OUT(); reg_temp = WRITE_CONFIG_CMD << 1; //命令长度为 7bits (写0x65)左移1位 for (bit_cout = 0; bit_cout < 7; bit_cout++) { if (reg_temp & 0x80) //MSB { - CS1238_DOUT_H(); + CS1237_DOUT_H(); } else { - CS1238_DOUT_L(); + CS1237_DOUT_L(); } reg_temp = reg_temp << 1; - CS1238_Clock(); + CS1237_Clock(); } /* clk37写寄存器模式还是输出 */ - CS1238_Clock(); + CS1237_Clock(); /* clk38 ~ clk45 写入寄存器值 */ reg_temp = ad_reg;//要配件的寄存器数值 for (bit_cout = 0; bit_cout < 8; bit_cout++) { if (reg_temp & 0x80) //MSB { - CS1238_DOUT_H(); + CS1237_DOUT_H(); } else { - CS1238_DOUT_L(); + CS1237_DOUT_L(); } reg_temp = reg_temp << 1; - CS1238_Clock(); + CS1237_Clock(); } /* 8: clk46 */ - CS1238_Clock(); - CS1238_DOUT_H(); - CS1238_DOUT_IN(); - CS1238IntEnable(); + CS1237_Clock(); + CS1237_DOUT_H(); + CS1237_DOUT_IN(); + CS1237IntEnable(); return ; } -/**读CS1238寄存器*/ -static int32_t Read_CS1238_Config(void) +/**读CS1237寄存器*/ +static int32_t Read_CS1237_Config(void) { uint16_t bit_cout = 0; uint8_t reg_temp = 0x00; //DOUT由高变低之后开始读取数据 - CS1238_DOUT_OUT(); - CS1238_DOUT_H(); - CS1238_DOUT_IN(); - CS1238_SCLK_L(); //时钟拉低 - CS1238Var.CS1238Delay1mSCnt = 300; - CS1238IrqFlag = false; - while(CS1238IrqFlag == false) //等待芯片准备好 + CS1237_DOUT_OUT(); + CS1237_DOUT_H(); + CS1237_DOUT_IN(); + CS1237_SCLK_L(); //时钟拉低 + LEFTUP_CS1237Var.CS1237Delay1mSCnt = 300; + CS1237IrqFlag = false; + while(CS1237IrqFlag == false) //等待芯片准备好 { - if(CS1238Var.CS1238Delay1mSCnt <= 0){ - DBG_LOG("CS1238 Preparation Timeout...\r\n"); + if(LEFTUP_CS1237Var.CS1237Delay1mSCnt <= 0){ + //DBG_LOG("LEFTUP CS1237 Preparation Timeout...\r\n"); return 0; // 超时退出 } } - CS1238IntDisable(); - CS1238IrqFlag = false; + CS1237IntDisable(); + CS1237IrqFlag = false; /* clk1-clk26 写期间不需要操作*/ for (bit_cout = 0; bit_cout < 26; bit_cout++) { - CS1238_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 } /* clk27 DOUT输出拉高*/ - CS1238_Clock(); //给一周期时钟 - CS1238_DOUT_H(); + CS1237_Clock(); //给一周期时钟 + CS1237_DOUT_H(); /* clk28 - clk29 发送写寄存器命令字 */ - CS1238_Clock(); //给一周期时钟 - CS1238_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 /* clk30 - clk36 发送读寄存器命令字 */ - CS1238_DOUT_OUT(); + CS1237_DOUT_OUT(); reg_temp = READ_CONFIG_CMD << 1; //命令长度为 7bits (写0x56)左移1位 for (bit_cout = 0; bit_cout < 7; bit_cout++) { if (reg_temp & 0x80) //MSB { - CS1238_DOUT_H(); + CS1237_DOUT_H(); } else { - CS1238_DOUT_L(); + CS1237_DOUT_L(); } reg_temp = reg_temp << 1; - CS1238_Clock(); + CS1237_Clock(); } /* clk37,读寄存器模式改输入 */ - CS1238_Clock(); - CS1238_DOUT_IN(); + CS1237_Clock(); + CS1237_DOUT_IN(); for (bit_cout = 0; bit_cout < 8; bit_cout++) { - CS1238_SCLK_H(); + CS1237_SCLK_H(); reg_temp <<= 1; //左移1位准备接受数据 初始默认0 - CS1238_100NS(3);//延时300ns - if(GET_CS1238_DOUT() == true) //有数值则累加 + CS1237_5NS(60);//延时300ns + if(CS1237_DOUT_GET() == true) //有数值则累加 reg_temp |= 1; - CS1238_SCLK_L(); - CS1238_100NS(3); + CS1237_SCLK_L(); + CS1237_5NS(60); } /* 8: clk46 */ - CS1238_Clock(); - CS1238_DOUT_IN(); - CS1238_DOUT_H(); - CS1238IntEnable(); + CS1237_Clock(); + CS1237_DOUT_IN(); + CS1237_DOUT_H(); + CS1237IntEnable(); return reg_temp ; } -/**读取CS1238的AD数*/ -static int32_t Read_CS1238_Ad_Data(void) +/**读取CS1237的AD数*/ +static int32_t Read_CS1237_Ad_Data(void) { uint16_t bit_cout = 0; int32_t data_temp = 0; @@ -192,22 +206,22 @@ static int32_t Read_CS1238_Ad_Data(void) data_temp = 0; for (bit_cout = 0; bit_cout < 24; bit_cout++) { - CS1238_SCLK_H(); + CS1237_SCLK_H(); data_temp <<= 1; //左移1位准备接受数据 初始默认0 - CS1238_100NS(3);//延时300ns - if(GET_CS1238_DOUT() == true) //有数值则累加 + CS1237_5NS(60);//延时300ns + if(CS1237_DOUT_GET() == true) //有数值则累加 data_temp |= 1; - CS1238_SCLK_L(); - CS1238_100NS(3); + CS1237_SCLK_L(); + CS1237_5NS(60); } /* clk25 ~ clk27 */ for (bit_cout = 24; bit_cout < 27; bit_cout++) { - CS1238_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 } - CS1238_DOUT_H(); - CS1238_SCLK_L(); + CS1237_DOUT_H(); + CS1237_SCLK_L(); if(data_temp > 0x7FFFFF) //取24位 { @@ -216,190 +230,172 @@ static int32_t Read_CS1238_Ad_Data(void) return data_temp; } -void CS1238_IrqCallBack(void) +void LEFTUP_CS1237_IrqCallBack(void) { - CS1238IrqFlag = true; + CS1237IrqFlag = true; } -void CS1238_Init(void) +void LEFTUP_CS1237_Init(void) { - CS1238IrqFlag = false; + CS1237IrqFlag = false; BuildDelay = false; - CS1238IntEnable(); - CS1238Var.Ain1_AD = 0; - CS1238Var.Ain2_AD = 0; - CS1238Var.Temp_AD = 0; - CS1238Var.Jump_AD = 0; + LEFTUP_CS1237Var.AinA_AD = 0; + LEFTUP_CS1237Var.Temp_AD = 0; + LEFTUP_CS1237Var.Jump_AD = 0; - CS1238Port = CH_SEL_A; - CS1238Hz = SPEED_SEL_640Hz; - CS1238PGA = PGA_SEL_128; + CS1237IntEnable(); + CS1237Port = CH_SEL_A; + CS1237Hz = SPEED_SEL_640Hz; + CS1237PGA = PGA_SEL_128; uint8_t read_reg = 0x00; - uint8_t set_reg = REFO_ON | CS1238Hz | CS1238PGA | CS1238Port; - CS1238_1MS(20); - Set_CS1238_Config(set_reg); - CS1238_1MS(20); - read_reg = Read_CS1238_Config(); - CS1238_1MS(20); + uint8_t set_reg = REFO_ON | CS1237Hz | CS1237PGA | CS1237Port; + CS1237_1MS(20); + Set_CS1237_Config(set_reg); + CS1237_1MS(20); + read_reg = Read_CS1237_Config(); + CS1237_1MS(20); if(read_reg != set_reg){ - DBG_LOG("CS1238 Init ERR...\r\n"); - DBG_LOG("set_reg = %02X\tread_reg = %02X\r\n",set_reg,read_reg); - InitFlag = false; - } - else { - DBG_LOG("CS1238 Init OK...\r\n"); + DBG_LOG("LEFTUP CS1237 Init ERR...\r\n"); //DBG_LOG("set_reg = %02X\tread_reg = %02X\r\n",set_reg,read_reg); - CS1238Port = read_reg & 0x03; InitFlag = true; } + else { + DBG_LOG("LEFTUP CS1237 Init OK...\r\n"); + //DBG_LOG("set_reg = %02X\tread_reg = %02X\r\n",set_reg,read_reg); + CS1237Port = read_reg & 0x03; + InitFlag = true; + } + CS1237IntDisable(); } -void CS1238DataLoopCollect(void) +void LEFTUP_CS1237DataLoopCollect(void) { static int32_t ad_array[PACK_NUM]; static uint8_t adcnt; static uint8_t TimeOutmagcnt; - switch(CS1238Var.Status) { - case CS1238_STATUS_IDLE:{ + switch(LEFTUP_CS1237Var.Status) { + case LUCS1237_STATUS_IDLE:{ break;} - case CS1238_STATUS_START:{ + case LUCS1237_STATUS_START:{ memset(&ad_array, 0x00, sizeof(ad_array)); adcnt = 0; TimeOutmagcnt = 0; - memset(&CS1238Var, NULL, sizeof(CS1238Var)); + memset(&LEFTUP_CS1237Var, NULL, sizeof(LEFTUP_CS1237Var)); if(BuildDelay == true) { BuildDelay = false; - if(CS1238Hz == SPEED_SEL_10Hz){ - CS1238Var.CS1238Delay1mSCnt = tCon_10Hz; + if(CS1237Hz == SPEED_SEL_10Hz){ + LEFTUP_CS1237Var.CS1237Delay1mSCnt = tCon_10Hz; } - if(CS1238Hz == SPEED_SEL_40Hz){ - CS1238Var.CS1238Delay1mSCnt = tCon_40Hz; + if(CS1237Hz == SPEED_SEL_40Hz){ + LEFTUP_CS1237Var.CS1237Delay1mSCnt = tCon_40Hz; } - if(CS1238Hz == SPEED_SEL_640Hz){ - CS1238Var.CS1238Delay1mSCnt = tCon_640Hz; + if(CS1237Hz == SPEED_SEL_640Hz){ + LEFTUP_CS1237Var.CS1237Delay1mSCnt = tCon_640Hz; } - if(CS1238Hz == SPEED_SEL6_1280Hz){ - CS1238Var.CS1238Delay1mSCnt = tCon_1280Hz; + if(CS1237Hz == SPEED_SEL6_1280Hz){ + LEFTUP_CS1237Var.CS1237Delay1mSCnt = tCon_1280Hz; } - CS1238Var.Status = CS1238_STATUS_DELAY; + LEFTUP_CS1237Var.Status = LUCS1237_STATUS_DELAY; } else { - CS1238Var.Status = CS1238_STATUS_READ; + LEFTUP_CS1237Var.Status = LUCS1237_STATUS_READ; } break;} - case CS1238_STATUS_DELAY:{ - if(CS1238Var.CS1238Delay1mSCnt <= 0){ - CS1238Var.Status = CS1238_STATUS_READ; + case LUCS1237_STATUS_DELAY:{ + if(LEFTUP_CS1237Var.CS1237Delay1mSCnt <= 0){ + LEFTUP_CS1237Var.Status = LUCS1237_STATUS_READ; } break;} - case CS1238_STATUS_READ:{ - CS1238IrqFlag = false; - CS1238Var.CS1238Delay1mSCnt = 100; - CS1238Var.Status = CS1238_STATUS_WAIT_READ; + case LUCS1237_STATUS_READ:{ + CS1237IrqFlag = false; + LEFTUP_CS1237Var.CS1237Delay1mSCnt = 100; + LEFTUP_CS1237Var.Status = LUCS1237_STATUS_WAIT_READ; break;} - case CS1238_STATUS_WAIT_READ:{ - if(CS1238Var.CS1238Delay1mSCnt <= 0){ - CS1238Var.Status = CS1238_STATUS_READ; + case LUCS1237_STATUS_WAIT_READ:{ + if(LEFTUP_CS1237Var.CS1237Delay1mSCnt <= 0){ + LEFTUP_CS1237Var.Status = LUCS1237_STATUS_READ; TimeOutmagcnt++; } - if(CS1238IrqFlag == true){ - CS1238IrqFlag = false; - ad_array[adcnt++] = Read_CS1238_Ad_Data(); - CS1238Var.Status = CS1238_STATUS_READ; + if(CS1237IrqFlag == true){ + CS1237IrqFlag = false; + ad_array[adcnt++] = Read_CS1237_Ad_Data(); + LEFTUP_CS1237Var.Status = LUCS1237_STATUS_READ; } if(TimeOutmagcnt >= PACK_NUM){ TimeOutmagcnt = 0; if(adcnt > 0){ - if(CS1238Port == CH_SEL_A){ - CS1238Var.Ain1_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238Ain1DataProcessCallBack(CS1238Var.Ain1_AD); + if(CS1237Port == CH_SEL_A){ + LEFTUP_CS1237Var.AinA_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + LEFTUP_CS1237AinADataProcessCallBack(LEFTUP_CS1237Var.AinA_AD); } - if(CS1238Port == CH_SEL_B){ - CS1238Var.Ain2_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238Ain2DataProcessCallBack(CS1238Var.Ain2_AD); + if(CS1237Port == CH_SEL_TEMP){ + LEFTUP_CS1237Var.Temp_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + //CS1237TempDataProcessCallBack(LEFTLOW_CS1237Var.Temp_AD); } - if(CS1238Port == CH_SEL_TEMP){ - CS1238Var.Temp_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238TempDataProcessCallBack(CS1238Var.Temp_AD); + if(CS1237Port == CH_SEL_JUMP){ + LEFTUP_CS1237Var.Jump_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + //CS1237JumpDataProcessCallBack(LEFTLOW_CS1237Var.Jump_AD); } - if(CS1238Port == CH_SEL_JUMP){ - CS1238Var.Jump_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238JumpDataProcessCallBack(CS1238Var.Jump_AD); - } - CS1238Var.Status = CS1238_STATUS_CH_SEL; + LEFTUP_CS1237Var.Status = LUCS1237_STATUS_CH_SEL; } else{ - if(CS1238Port == CH_SEL_A){ - DBG_LOG("CS1238 CHA TimeOut...\r\n"); + if(CS1237Port == CH_SEL_A){ + DBG_LOG("LEFTUPs CS1237 CHA TimeOut...\r\n"); } - if(CS1238Port == CH_SEL_B){ - DBG_LOG("CS1238 CHB TimeOut...\r\n"); + if(CS1237Port == CH_SEL_TEMP){ + DBG_LOG("LEFTUP CS1237 Temp TimeOut...\r\n"); } - if(CS1238Port == CH_SEL_TEMP){ - DBG_LOG("CS1238 Temp TimeOut...\r\n"); + if(CS1237Port == CH_SEL_JUMP){ + DBG_LOG("LEFTUP CS1237 Jump TimeOut...\r\n"); } - if(CS1238Port == CH_SEL_JUMP){ - DBG_LOG("CS1238 Jump TimeOut...\r\n"); - } - CS1238Var.Status = CS1238_STATUS_CH_SEL; + LEFTUP_CS1237Var.Status = LUCS1237_STATUS_CH_SEL; } } if(adcnt >= PACK_NUM){ - if(CS1238Port == CH_SEL_A){ - CS1238Var.Ain1_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238Ain1DataProcessCallBack(CS1238Var.Ain1_AD); + if(CS1237Port == CH_SEL_A){ + LEFTUP_CS1237Var.AinA_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + LEFTUP_CS1237AinADataProcessCallBack(LEFTUP_CS1237Var.AinA_AD); } - if(CS1238Port == CH_SEL_B){ - CS1238Var.Ain2_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238Ain2DataProcessCallBack(CS1238Var.Ain2_AD); + if(CS1237Port == CH_SEL_TEMP){ + LEFTUP_CS1237Var.Temp_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + //CS1237TempDataProcessCallBack(LEFTLOW_CS1237Var.Temp_AD); } - if(CS1238Port == CH_SEL_TEMP){ - CS1238Var.Temp_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238TempDataProcessCallBack(CS1238Var.Temp_AD); + if(CS1237Port == CH_SEL_JUMP){ + LEFTUP_CS1237Var.Jump_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + //CS1237JumpDataProcessCallBack(LEFTLOW_CS1237Var.Jump_AD); } - if(CS1238Port == CH_SEL_JUMP){ - CS1238Var.Jump_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238JumpDataProcessCallBack(CS1238Var.Jump_AD); - } - CS1238Var.Status = CS1238_STATUS_CH_SEL; + LEFTUP_CS1237Var.Status = LUCS1237_STATUS_CH_SEL; } break;} - case CS1238_STATUS_CH_SEL:{ - CS1238Var.Status = CS1238_STATUS_STOP; + case LUCS1237_STATUS_CH_SEL:{ + LEFTUP_CS1237Var.Status = LUCS1237_STATUS_STOP; BuildDelay = false; uint8_t read_reg; - if(CS1238Port == CH_SEL_A){ + if(CS1237Port == CH_SEL_A){ #if(PORT_TEMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_TEMP); - CS1238Port = CH_SEL_TEMP; + read_reg = Read_CS1237_Config(); + Set_CS1237_Config((read_reg & 0xFC) | CH_SEL_TEMP); + CS1237Port = CH_SEL_TEMP; BuildDelay = true; break; #endif #if(PORT_JUMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_JUMP); - CS1238Port = CH_SEL_JUMP; + read_reg = Read_CS1237_Config(); + Set_CS1237_Config((read_reg & 0xFC) | CH_SEL_JUMP); + CS1237Port = CH_SEL_JUMP; BuildDelay = true; break; #endif } - if(CS1238Port == CH_SEL_B){ -#if(PORT_TEMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_TEMP); - CS1238Port = CH_SEL_TEMP; - BuildDelay = true; - break; -#endif + if(CS1237Port == CH_SEL_TEMP){ #if(PORT_JUMP == 1) read_reg = Read_CS1238_Config(); Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_JUMP); @@ -408,77 +404,60 @@ void CS1238DataLoopCollect(void) break; #endif #if(PORT_A == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_A); - CS1238Port = CH_SEL_A; - BuildDelay = true; - break; -#endif - } - - if(CS1238Port == CH_SEL_TEMP){ -#if(PORT_JUMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_JUMP); - CS1238Port = CH_SEL_JUMP; - BuildDelay = true; - break; -#endif -#if(PORT_A == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_A); - CS1238Port = CH_SEL_A; + read_reg = Read_CS1237_Config(); + Set_CS1237_Config((read_reg & 0xFC) | CH_SEL_A); + CS1237Port = CH_SEL_A; BuildDelay = true; break; #endif } - if(CS1238Port == CH_SEL_JUMP){ + if(CS1237Port == CH_SEL_JUMP){ #if(PORT_A == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_A); - CS1238Port = CH_SEL_A; + read_reg = Read_CS1237_Config(); + Set_CS1237_Config((read_reg & 0xFC) | CH_SEL_A); + CS1237Port = CH_SEL_A; BuildDelay = true; break; #endif #if(PORT_TEMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_TEMP); - CS1238Port = CH_SEL_TEMP; + read_reg = Read_CS1237_Config(); + Set_CS1237_Config((read_reg & 0xFC) | CH_SEL_TEMP); + CS1237Port = CH_SEL_TEMP; BuildDelay = true; break; #endif } break;} - case CS1238_STATUS_STOP:{ - //CS1238Stop(); - //CS1238Var.Status = CS1238_STATUS_IDLE; - CS1238Var.Status = CS1238_STATUS_START;//持续工作 + case LUCS1237_STATUS_STOP:{ + LEFTUP_CS1237Stop(); + LEFTUP_CS1237Var.Status = LUCS1237_STATUS_IDLE; + //LEFTUP_CS1237Var.Status = LUCS1237_STATUS_START;//持续工作 break;} } } -void CS12381mSRoutine(void) +void LEFTUP_CS12371mSRoutine(void) { - if(CS1238Var.CS1238Delay1mSCnt > 0) - CS1238Var.CS1238Delay1mSCnt--; + if(LEFTUP_CS1237Var.CS1237Delay1mSCnt > 0) + LEFTUP_CS1237Var.CS1237Delay1mSCnt--; } -void CS1238Start(void) +void LEFTUP_CS1237Start(void) { - CS1238_WakeUp(); - CS1238_1MS(2); + CS1237_WakeUp(); + CS1237_1MS(2); BuildDelay = true; - CS1238IntEnable(); + CS1237IntEnable(); if(!InitFlag){ - CS1238_Init(); + LEFTUP_CS1237_Init(); return; } - CS1238Var.Status = CS1238_STATUS_START; + LEFTUP_CS1237Var.Status = LUCS1237_STATUS_START; } -void CS1238Stop(void) +void LEFTUP_CS1237Stop(void) { - CS1238IntDisable(); - CS1238_Sleep(); + CS1237IntDisable(); + //CS1237_Sleep(); } diff --git a/Project/HC32F460/source/Module/CS1237/CS1237_LEFTUP.h b/Project/HC32F460/source/Module/CS1237/CS1237_LEFTUP.h index 354d39d..1483092 100644 --- a/Project/HC32F460/source/Module/CS1237/CS1237_LEFTUP.h +++ b/Project/HC32F460/source/Module/CS1237/CS1237_LEFTUP.h @@ -1,7 +1,7 @@ #include "bsp.h" -#ifndef _CS1238_H_ -#define _CS1238_H_ +#ifndef _CS1237_LEFTUP_H_ +#define _CS1237_LEFTUP_H_ #define READ_CONFIG_CMD 0x56 #define WRITE_CONFIG_CMD 0x65 @@ -22,21 +22,11 @@ #define PGA_SEL_128 0x0C #define CH_SEL_A 0x00 -#define CH_SEL_B 0x01 +//#define CH_SEL_B 0x01 #define CH_SEL_TEMP 0x02 #define CH_SEL_JUMP 0x03 -#define CS1238_DOUT_OUT() SetBit(((uint32_t)&M0P_GPIO->PADIR + CS1238_DOUT_PORTx), CS1238_DOUT_PINx, 0) -#define CS1238_DOUT_IN() SetBit(((uint32_t)&M0P_GPIO->PADIR + CS1238_DOUT_PORTx), CS1238_DOUT_PINx, 1) -#define CS1238_DOUT_H() SET_CS1238_DOUT() -#define CS1238_DOUT_L() CLR_CS1238_DOUT() -#define CS1238_SCLK_H() SET_CS1238_SCLK() -#define CS1238_SCLK_L() CLR_CS1238_SCLK() - -#define CS1238_1US(x) delay_us(x) //1usʱ -#define CS1238_100NS(x) delay_ns(x) //100nsʱ -#define CS1238_1MS(x) delay_ms(x) //1msʱ /*Definition of conversion time corresponding to repeatability setting*/ /* @@ -51,40 +41,39 @@ #define tCon_1280Hz 4 /* ms. */ #define PORT_A 1 //ɼͨA -#define PORT_B 1 //ɼͨB -#define PORT_TEMP 0 //ɼ¶ -#define PORT_JUMP 0 //ڶ̲ɼ -#define PACK_NUM 10 //һβɼݰ +//#define PORT_B 1 //ɼͨB +#define PORT_TEMP 0 //ɼ¶ +#define PORT_JUMP 0 //ڶ̲ɼ +#define PACK_NUM 1 //һβɼݰ +#define FILTER_NUM 0 //˲ typedef enum{ - CS1238_STATUS_IDLE, - CS1238_STATUS_START, - CS1238_STATUS_DELAY, - CS1238_STATUS_READ, - CS1238_STATUS_WAIT_READ, - CS1238_STATUS_CH_SEL, - CS1238_STATUS_STOP, -}CS1238Status_m; + LUCS1237_STATUS_IDLE, + LUCS1237_STATUS_START, + LUCS1237_STATUS_DELAY, + LUCS1237_STATUS_READ, + LUCS1237_STATUS_WAIT_READ, + LUCS1237_STATUS_CH_SEL, + LUCS1237_STATUS_STOP, +}LeftUpCS1237Status_m; typedef struct{ - CS1238Status_m Status; - uint32_t CS1238Delay1mSCnt; + LeftUpCS1237Status_m Status; + uint32_t CS1237Delay1mSCnt; - int32_t Ain1_AD;//AIN1ad - int32_t Ain2_AD;//AIN2ad + int32_t AinA_AD;//AINAad + //int32_t AinB_AD;//AINBad int32_t Temp_AD;//¶ad int32_t Jump_AD;//ڶad } -CS1238Var_t; -extern CS1238Var_t CS1238Var; +LEFTUP_CS1237Var_t; -void CS1238_Init(void); -void CS1238_IrqCallBack(void); -void CS1238DataLoopCollect(void); -void CS1238LoopHandler(void); -void CS12381mSRoutine(void); -void CS1238Start(void); -void CS1238Stop(void); +void LEFTUP_CS1237_Init(void); +void LEFTUP_CS1237_IrqCallBack(void); +void LEFTUP_CS1237DataLoopCollect(void); +void LEFTUP_CS12371mSRoutine(void); +void LEFTUP_CS1237Start(void); +void LEFTUP_CS1237Stop(void); #endif diff --git a/Project/HC32F460/source/Module/CS1237/CS1237_RIGHRLOW.c b/Project/HC32F460/source/Module/CS1237/CS1237_RIGHRLOW.c deleted file mode 100644 index a10e7c8..0000000 --- a/Project/HC32F460/source/Module/CS1237/CS1237_RIGHRLOW.c +++ /dev/null @@ -1,485 +0,0 @@ -#include "CS1238.h" -#include "UartDebug.h" -#include "bsp.h" -#include "main.h" -#include "Algorithm.h" - -CS1238Var_t CS1238Var; -static bool InitFlag; -static bool CS1238IrqFlag; -static bool BuildDelay; -static uint8_t CS1238Port; -static uint8_t CS1238Hz; -static uint8_t CS1238PGA; -extern void CS1238Ain1DataProcessCallBack(int32_t AD); -extern void CS1238Ain2DataProcessCallBack(int32_t AD); -extern void CS1238TempDataProcessCallBack(int32_t AD); -extern void CS1238JumpDataProcessCallBack(int32_t AD); - -/** cs1238 时序时钟*/ -static void CS1238_Clock(void) -{ - CS1238_SCLK_H(); - CS1238_100NS(3); - CS1238_SCLK_L(); - CS1238_100NS(3); -} -/** cs1238 休眠*/ -static void CS1238_Sleep(void) -{ - CS1238_SCLK_H(); - CS1238_1US(150); -} -/** cs1238 唤醒*/ -static void CS1238_WakeUp(void) -{ - CS1238_SCLK_L(); - CS1238_1US(20); -} -/**设置CS1238寄存器*/ -static void Set_CS1238_Config(uint8_t ad_reg) -{ - uint16_t bit_cout = 0; - uint8_t reg_temp = 0x00; - //DOUT由高变低之后开始读取数据 - CS1238_DOUT_OUT(); - CS1238_DOUT_H(); - CS1238_DOUT_IN(); - CS1238_SCLK_L(); //时钟拉低 - CS1238Var.CS1238Delay1mSCnt = 300; - CS1238IrqFlag = false; - while(CS1238IrqFlag == false) //等待芯片准备好 - { - if(CS1238Var.CS1238Delay1mSCnt <= 0){ - DBG_LOG("CS1238 Preparation Timeout...\r\n"); - return; // 超时退出 - } - } - CS1238IntDisable(); - CS1238IrqFlag = false; - - - /* clk1-clk26 写期间不需要操作*/ - for (bit_cout = 0; bit_cout < 26; bit_cout++) - { - CS1238_Clock(); //给一周期时钟 - } - /* clk27 DOUT输出拉高*/ - CS1238_Clock(); //给一周期时钟 - CS1238_DOUT_H(); - /* clk28 - clk29 发送写寄存器命令字 */ - CS1238_Clock(); //给一周期时钟 - CS1238_Clock(); //给一周期时钟 - - /* clk30 - clk36 发送写寄存器命令字 */ - CS1238_DOUT_OUT(); - reg_temp = WRITE_CONFIG_CMD << 1; //命令长度为 7bits (写0x65)左移1位 - for (bit_cout = 0; bit_cout < 7; bit_cout++) - { - if (reg_temp & 0x80) //MSB - { - CS1238_DOUT_H(); - } - else - { - CS1238_DOUT_L(); - } - reg_temp = reg_temp << 1; - CS1238_Clock(); - } - /* clk37写寄存器模式还是输出 */ - CS1238_Clock(); - /* clk38 ~ clk45 写入寄存器值 */ - reg_temp = ad_reg;//要配件的寄存器数值 - for (bit_cout = 0; bit_cout < 8; bit_cout++) - { - if (reg_temp & 0x80) //MSB - { - CS1238_DOUT_H(); - } - else - { - CS1238_DOUT_L(); - } - reg_temp = reg_temp << 1; - CS1238_Clock(); - } - /* 8: clk46 */ - CS1238_Clock(); - CS1238_DOUT_H(); - CS1238_DOUT_IN(); - CS1238IntEnable(); - return ; -} - -/**读CS1238寄存器*/ -static int32_t Read_CS1238_Config(void) -{ - uint16_t bit_cout = 0; - uint8_t reg_temp = 0x00; - //DOUT由高变低之后开始读取数据 - CS1238_DOUT_OUT(); - CS1238_DOUT_H(); - CS1238_DOUT_IN(); - CS1238_SCLK_L(); //时钟拉低 - CS1238Var.CS1238Delay1mSCnt = 300; - CS1238IrqFlag = false; - while(CS1238IrqFlag == false) //等待芯片准备好 - { - if(CS1238Var.CS1238Delay1mSCnt <= 0){ - DBG_LOG("CS1238 Preparation Timeout...\r\n"); - return 0; // 超时退出 - } - } - CS1238IntDisable(); - CS1238IrqFlag = false; - - /* clk1-clk26 写期间不需要操作*/ - for (bit_cout = 0; bit_cout < 26; bit_cout++) - { - CS1238_Clock(); //给一周期时钟 - } - /* clk27 DOUT输出拉高*/ - CS1238_Clock(); //给一周期时钟 - CS1238_DOUT_H(); - /* clk28 - clk29 发送写寄存器命令字 */ - CS1238_Clock(); //给一周期时钟 - CS1238_Clock(); //给一周期时钟 - - /* clk30 - clk36 发送读寄存器命令字 */ - CS1238_DOUT_OUT(); - reg_temp = READ_CONFIG_CMD << 1; //命令长度为 7bits (写0x56)左移1位 - for (bit_cout = 0; bit_cout < 7; bit_cout++) - { - if (reg_temp & 0x80) //MSB - { - CS1238_DOUT_H(); - } - else - { - CS1238_DOUT_L(); - } - reg_temp = reg_temp << 1; - CS1238_Clock(); - } - /* clk37,读寄存器模式改输入 */ - CS1238_Clock(); - CS1238_DOUT_IN(); - for (bit_cout = 0; bit_cout < 8; bit_cout++) - { - CS1238_SCLK_H(); - reg_temp <<= 1; //左移1位准备接受数据 初始默认0 - CS1238_100NS(3);//延时300ns - if(GET_CS1238_DOUT() == true) //有数值则累加 - reg_temp |= 1; - CS1238_SCLK_L(); - CS1238_100NS(3); - } - /* 8: clk46 */ - CS1238_Clock(); - CS1238_DOUT_IN(); - CS1238_DOUT_H(); - CS1238IntEnable(); - return reg_temp ; -} -/**读取CS1238的AD数*/ -static int32_t Read_CS1238_Ad_Data(void) -{ - uint16_t bit_cout = 0; - int32_t data_temp = 0; - - /* clk1 ~ clk24 ADC数据*/ - data_temp = 0; - for (bit_cout = 0; bit_cout < 24; bit_cout++) - { - CS1238_SCLK_H(); - data_temp <<= 1; //左移1位准备接受数据 初始默认0 - CS1238_100NS(3);//延时300ns - if(GET_CS1238_DOUT() == true) //有数值则累加 - data_temp |= 1; - CS1238_SCLK_L(); - CS1238_100NS(3); - } - - /* clk25 ~ clk27 */ - for (bit_cout = 24; bit_cout < 27; bit_cout++) - { - CS1238_Clock(); //给一周期时钟 - } - CS1238_DOUT_H(); - CS1238_SCLK_L(); - - if(data_temp > 0x7FFFFF) //取24位 - { - data_temp |= 0xFF000000; - } - return data_temp; -} - -void CS1238_IrqCallBack(void) -{ - CS1238IrqFlag = true; -} -void CS1238_Init(void) -{ - CS1238IrqFlag = false; - BuildDelay = false; - CS1238IntEnable(); - CS1238Var.Ain1_AD = 0; - CS1238Var.Ain2_AD = 0; - CS1238Var.Temp_AD = 0; - CS1238Var.Jump_AD = 0; - - CS1238Port = CH_SEL_A; - CS1238Hz = SPEED_SEL_640Hz; - CS1238PGA = PGA_SEL_128; - - uint8_t read_reg = 0x00; - uint8_t set_reg = REFO_ON | CS1238Hz | CS1238PGA | CS1238Port; - CS1238_1MS(20); - Set_CS1238_Config(set_reg); - CS1238_1MS(20); - read_reg = Read_CS1238_Config(); - CS1238_1MS(20); - if(read_reg != set_reg){ - DBG_LOG("CS1238 Init ERR...\r\n"); - DBG_LOG("set_reg = %02X\tread_reg = %02X\r\n",set_reg,read_reg); - InitFlag = false; - } - else { - DBG_LOG("CS1238 Init OK...\r\n"); - //DBG_LOG("set_reg = %02X\tread_reg = %02X\r\n",set_reg,read_reg); - CS1238Port = read_reg & 0x03; - InitFlag = true; - } -} -void CS1238DataLoopCollect(void) -{ - static int32_t ad_array[PACK_NUM]; - static uint8_t adcnt; - static uint8_t TimeOutmagcnt; - - switch(CS1238Var.Status) { - case CS1238_STATUS_IDLE:{ - break;} - - case CS1238_STATUS_START:{ - memset(&ad_array, 0x00, sizeof(ad_array)); - adcnt = 0; - TimeOutmagcnt = 0; - memset(&CS1238Var, NULL, sizeof(CS1238Var)); - if(BuildDelay == true) - { - BuildDelay = false; - if(CS1238Hz == SPEED_SEL_10Hz){ - CS1238Var.CS1238Delay1mSCnt = tCon_10Hz; - } - if(CS1238Hz == SPEED_SEL_40Hz){ - CS1238Var.CS1238Delay1mSCnt = tCon_40Hz; - } - if(CS1238Hz == SPEED_SEL_640Hz){ - CS1238Var.CS1238Delay1mSCnt = tCon_640Hz; - } - if(CS1238Hz == SPEED_SEL6_1280Hz){ - CS1238Var.CS1238Delay1mSCnt = tCon_1280Hz; - } - CS1238Var.Status = CS1238_STATUS_DELAY; - } - else - { - CS1238Var.Status = CS1238_STATUS_READ; - } - break;} - - case CS1238_STATUS_DELAY:{ - if(CS1238Var.CS1238Delay1mSCnt <= 0){ - CS1238Var.Status = CS1238_STATUS_READ; - } - break;} - - case CS1238_STATUS_READ:{ - CS1238IrqFlag = false; - CS1238Var.CS1238Delay1mSCnt = 100; - CS1238Var.Status = CS1238_STATUS_WAIT_READ; - break;} - - case CS1238_STATUS_WAIT_READ:{ - if(CS1238Var.CS1238Delay1mSCnt <= 0){ - CS1238Var.Status = CS1238_STATUS_READ; - TimeOutmagcnt++; - } - if(CS1238IrqFlag == true){ - CS1238IrqFlag = false; - ad_array[adcnt++] = Read_CS1238_Ad_Data(); - CS1238Var.Status = CS1238_STATUS_READ; - } - if(TimeOutmagcnt >= PACK_NUM){ - TimeOutmagcnt = 0; - if(adcnt > 0){ - if(CS1238Port == CH_SEL_A){ - CS1238Var.Ain1_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238Ain1DataProcessCallBack(CS1238Var.Ain1_AD); - } - if(CS1238Port == CH_SEL_B){ - CS1238Var.Ain2_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238Ain2DataProcessCallBack(CS1238Var.Ain2_AD); - } - if(CS1238Port == CH_SEL_TEMP){ - CS1238Var.Temp_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238TempDataProcessCallBack(CS1238Var.Temp_AD); - } - if(CS1238Port == CH_SEL_JUMP){ - CS1238Var.Jump_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238JumpDataProcessCallBack(CS1238Var.Jump_AD); - } - CS1238Var.Status = CS1238_STATUS_CH_SEL; - } - else{ - if(CS1238Port == CH_SEL_A){ - DBG_LOG("CS1238 CHA TimeOut...\r\n"); - } - if(CS1238Port == CH_SEL_B){ - DBG_LOG("CS1238 CHB TimeOut...\r\n"); - } - if(CS1238Port == CH_SEL_TEMP){ - DBG_LOG("CS1238 Temp TimeOut...\r\n"); - } - if(CS1238Port == CH_SEL_JUMP){ - DBG_LOG("CS1238 Jump TimeOut...\r\n"); - } - CS1238Var.Status = CS1238_STATUS_CH_SEL; - } - } - if(adcnt >= PACK_NUM){ - if(CS1238Port == CH_SEL_A){ - CS1238Var.Ain1_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238Ain1DataProcessCallBack(CS1238Var.Ain1_AD); - } - if(CS1238Port == CH_SEL_B){ - CS1238Var.Ain2_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238Ain2DataProcessCallBack(CS1238Var.Ain2_AD); - } - if(CS1238Port == CH_SEL_TEMP){ - CS1238Var.Temp_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238TempDataProcessCallBack(CS1238Var.Temp_AD); - } - if(CS1238Port == CH_SEL_JUMP){ - CS1238Var.Jump_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238JumpDataProcessCallBack(CS1238Var.Jump_AD); - } - CS1238Var.Status = CS1238_STATUS_CH_SEL; - } - break;} - - case CS1238_STATUS_CH_SEL:{ - CS1238Var.Status = CS1238_STATUS_STOP; - BuildDelay = false; - uint8_t read_reg; - if(CS1238Port == CH_SEL_A){ -#if(PORT_TEMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_TEMP); - CS1238Port = CH_SEL_TEMP; - BuildDelay = true; - break; -#endif -#if(PORT_JUMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_JUMP); - CS1238Port = CH_SEL_JUMP; - BuildDelay = true; - break; -#endif - } - - if(CS1238Port == CH_SEL_B){ -#if(PORT_TEMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_TEMP); - CS1238Port = CH_SEL_TEMP; - BuildDelay = true; - break; -#endif -#if(PORT_JUMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_JUMP); - CS1238Port = CH_SEL_JUMP; - BuildDelay = true; - break; -#endif -#if(PORT_A == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_A); - CS1238Port = CH_SEL_A; - BuildDelay = true; - break; -#endif - } - - if(CS1238Port == CH_SEL_TEMP){ -#if(PORT_JUMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_JUMP); - CS1238Port = CH_SEL_JUMP; - BuildDelay = true; - break; -#endif -#if(PORT_A == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_A); - CS1238Port = CH_SEL_A; - BuildDelay = true; - break; -#endif - } - - if(CS1238Port == CH_SEL_JUMP){ -#if(PORT_A == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_A); - CS1238Port = CH_SEL_A; - BuildDelay = true; - break; -#endif -#if(PORT_TEMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_TEMP); - CS1238Port = CH_SEL_TEMP; - BuildDelay = true; - break; -#endif - } - break;} - - case CS1238_STATUS_STOP:{ - //CS1238Stop(); - //CS1238Var.Status = CS1238_STATUS_IDLE; - CS1238Var.Status = CS1238_STATUS_START;//持续工作 - break;} - } -} -void CS12381mSRoutine(void) -{ - if(CS1238Var.CS1238Delay1mSCnt > 0) - CS1238Var.CS1238Delay1mSCnt--; -} -void CS1238Start(void) -{ - CS1238_WakeUp(); - CS1238_1MS(2); - BuildDelay = true; - CS1238IntEnable(); - if(!InitFlag){ - CS1238_Init(); - return; - } - CS1238Var.Status = CS1238_STATUS_START; -} -void CS1238Stop(void) -{ - CS1238IntDisable(); - CS1238_Sleep(); -} - - - diff --git a/Project/HC32F460/source/Module/CS1237/CS1237_RIGHRLOW.h b/Project/HC32F460/source/Module/CS1237/CS1237_RIGHRLOW.h deleted file mode 100644 index 354d39d..0000000 --- a/Project/HC32F460/source/Module/CS1237/CS1237_RIGHRLOW.h +++ /dev/null @@ -1,91 +0,0 @@ -#include "bsp.h" - -#ifndef _CS1238_H_ -#define _CS1238_H_ - -#define READ_CONFIG_CMD 0x56 -#define WRITE_CONFIG_CMD 0x65 - -#define CONFIG_RST 0x0C - -#define REFO_OFF 0x40 -#define REFO_ON 0x00 - -#define SPEED_SEL_10Hz 0x00 -#define SPEED_SEL_40Hz 0x10 -#define SPEED_SEL_640Hz 0x20 -#define SPEED_SEL6_1280Hz 0x30 - -#define PGA_SEL_1 0x00 -#define PGA_SEL_2 0x04 -#define PGA_SEL_64 0x08 -#define PGA_SEL_128 0x0C - -#define CH_SEL_A 0x00 -#define CH_SEL_B 0x01 -#define CH_SEL_TEMP 0x02 -#define CH_SEL_JUMP 0x03 - -#define CS1238_DOUT_OUT() SetBit(((uint32_t)&M0P_GPIO->PADIR + CS1238_DOUT_PORTx), CS1238_DOUT_PINx, 0) -#define CS1238_DOUT_IN() SetBit(((uint32_t)&M0P_GPIO->PADIR + CS1238_DOUT_PORTx), CS1238_DOUT_PINx, 1) -#define CS1238_DOUT_H() SET_CS1238_DOUT() -#define CS1238_DOUT_L() CLR_CS1238_DOUT() - -#define CS1238_SCLK_H() SET_CS1238_SCLK() -#define CS1238_SCLK_L() CLR_CS1238_SCLK() - -#define CS1238_1US(x) delay_us(x) //1usʱ -#define CS1238_100NS(x) delay_ns(x) //100nsʱ -#define CS1238_1MS(x) delay_ms(x) //1msʱ - -/*Definition of conversion time corresponding to repeatability setting*/ -/* - 10Hz //ʱ300ms - 40Hz //ʱ75ms - 640Hz //ʱ6.25ms - 1280Hz //ʱ3.125ms -*/ -#define tCon_10Hz 300 /* ms. */ -#define tCon_40Hz 75 /* ms. */ -#define tCon_640Hz 7 /* ms. */ -#define tCon_1280Hz 4 /* ms. */ - -#define PORT_A 1 //ɼͨA -#define PORT_B 1 //ɼͨB -#define PORT_TEMP 0 //ɼ¶ -#define PORT_JUMP 0 //ڶ̲ɼ -#define PACK_NUM 10 //һβɼݰ - -typedef enum{ - CS1238_STATUS_IDLE, - CS1238_STATUS_START, - CS1238_STATUS_DELAY, - CS1238_STATUS_READ, - CS1238_STATUS_WAIT_READ, - CS1238_STATUS_CH_SEL, - CS1238_STATUS_STOP, -}CS1238Status_m; - -typedef struct{ - CS1238Status_m Status; - uint32_t CS1238Delay1mSCnt; - - int32_t Ain1_AD;//AIN1ad - int32_t Ain2_AD;//AIN2ad - int32_t Temp_AD;//¶ad - int32_t Jump_AD;//ڶad -} -CS1238Var_t; -extern CS1238Var_t CS1238Var; - -void CS1238_Init(void); -void CS1238_IrqCallBack(void); -void CS1238DataLoopCollect(void); -void CS1238LoopHandler(void); -void CS12381mSRoutine(void); -void CS1238Start(void); -void CS1238Stop(void); -#endif - - - diff --git a/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTLOW.c b/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTLOW.c new file mode 100644 index 0000000..75bf6c7 --- /dev/null +++ b/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTLOW.c @@ -0,0 +1,464 @@ +#include "CS1237_RIGHTLOW.h" +#include "Debug.h" +#include "bsp.h" +#include "main.h" +#include "Algorithm.h" + +#define CS1237_DOUT_OUT() PORT_OE(RIGHTLOW_CS1237_DOUT_PORTx, RIGHTLOW_CS1237_DOUT_PINx, Enable) +#define CS1237_DOUT_IN() PORT_OE(RIGHTLOW_CS1237_DOUT_PORTx, RIGHTLOW_CS1237_DOUT_PINx, Disable) +#define CS1237_DOUT_H() SET_RIGHTLOW_CS1237_DOUT() +#define CS1237_DOUT_L() CLR_RIGHTLOW_CS1237_DOUT() +#define CS1237_DOUT_GET() GET_RIGHTLOW_CS1237_DOUT() + +#define CS1237_SCLK_H() SET_RIGHTLOW_CS1237_SCLK() +#define CS1237_SCLK_L() CLR_RIGHTLOW_CS1237_SCLK() + +#define CS1237_5NS(x) delay_5ns(x) //5ns延时 +#define CS1237_1US(x) Ddl_Delay1us(x) //1us延时 +#define CS1237_1MS(x) Ddl_Delay1ms(x) //1ms延时 + +#define CS1237IntEnable() ExtInt06IntEnable() +#define CS1237IntDisable() ExtInt06IntDisable() + +RIGHTLOW_CS1237Var_t RIGHTLOW_CS1237Var; +static bool InitFlag; +static bool CS1237IrqFlag; +static bool BuildDelay; +static uint8_t CS1237Port; +static uint8_t CS1237Hz; +static uint8_t CS1237PGA; +extern void RIGHTLOW_CS1237AinADataProcessCallBack(int32_t AD); + + +/** cs1237 时序时钟*/ +static void CS1237_Clock(void) +{ + CS1237_SCLK_H(); + CS1237_5NS(60); + CS1237_SCLK_L(); + CS1237_5NS(60); +} +/** cs1237 休眠*/ +static void CS1237_Sleep(void) +{ + CS1237_SCLK_H(); + CS1237_1US(200); +} +/** cs1237 唤醒*/ +static void CS1237_WakeUp(void) +{ + CS1237_SCLK_L(); + CS1237_1US(20); +} +/**设置CS1237寄存器*/ +static void Set_CS1237_Config(uint8_t ad_reg) +{ + uint16_t bit_cout = 0; + uint8_t reg_temp = 0x00; + //DOUT由高变低之后开始读取数据 + CS1237_DOUT_OUT(); + CS1237_DOUT_H(); + CS1237_DOUT_IN(); + CS1237_SCLK_L(); //时钟拉低 + RIGHTLOW_CS1237Var.CS1237Delay1mSCnt = 300; + CS1237IrqFlag = false; + while(CS1237IrqFlag == false) //等待芯片准备好 + { + if(RIGHTLOW_CS1237Var.CS1237Delay1mSCnt <= 0){ + //DBG_LOG("RIGHTLOW CS1237 Preparation Timeout...\r\n"); + return; // 超时退出 + } + } + CS1237IntDisable(); + CS1237IrqFlag = false; + + + /* clk1-clk26 写期间不需要操作*/ + for (bit_cout = 0; bit_cout < 26; bit_cout++) + { + CS1237_Clock(); //给一周期时钟 + } + /* clk27 DOUT输出拉高*/ + CS1237_Clock(); //给一周期时钟 + CS1237_DOUT_H(); + /* clk28 - clk29 发送写寄存器命令字 */ + CS1237_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 + + /* clk30 - clk36 发送写寄存器命令字 */ + CS1237_DOUT_OUT(); + reg_temp = WRITE_CONFIG_CMD << 1; //命令长度为 7bits (写0x65)左移1位 + for (bit_cout = 0; bit_cout < 7; bit_cout++) + { + if (reg_temp & 0x80) //MSB + { + CS1237_DOUT_H(); + } + else + { + CS1237_DOUT_L(); + } + reg_temp = reg_temp << 1; + CS1237_Clock(); + } + /* clk37写寄存器模式还是输出 */ + CS1237_Clock(); + /* clk38 ~ clk45 写入寄存器值 */ + reg_temp = ad_reg;//要配件的寄存器数值 + for (bit_cout = 0; bit_cout < 8; bit_cout++) + { + if (reg_temp & 0x80) //MSB + { + CS1237_DOUT_H(); + } + else + { + CS1237_DOUT_L(); + } + reg_temp = reg_temp << 1; + CS1237_Clock(); + } + /* 8: clk46 */ + CS1237_Clock(); + CS1237_DOUT_H(); + CS1237_DOUT_IN(); + CS1237IntEnable(); + return ; +} + +/**读CS1237寄存器*/ +static int32_t Read_CS1237_Config(void) +{ + uint16_t bit_cout = 0; + uint8_t reg_temp = 0x00; + //DOUT由高变低之后开始读取数据 + CS1237_DOUT_OUT(); + CS1237_DOUT_H(); + CS1237_DOUT_IN(); + CS1237_SCLK_L(); //时钟拉低 + RIGHTLOW_CS1237Var.CS1237Delay1mSCnt = 300; + CS1237IrqFlag = false; + while(CS1237IrqFlag == false) //等待芯片准备好 + { + if(RIGHTLOW_CS1237Var.CS1237Delay1mSCnt <= 0){ + //DBG_LOG("RIGHTLOW CS1237 Preparation Timeout...\r\n"); + return 0; // 超时退出 + } + } + CS1237IntDisable(); + CS1237IrqFlag = false; + + /* clk1-clk26 写期间不需要操作*/ + for (bit_cout = 0; bit_cout < 26; bit_cout++) + { + CS1237_Clock(); //给一周期时钟 + } + /* clk27 DOUT输出拉高*/ + CS1237_Clock(); //给一周期时钟 + CS1237_DOUT_H(); + /* clk28 - clk29 发送写寄存器命令字 */ + CS1237_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 + + /* clk30 - clk36 发送读寄存器命令字 */ + CS1237_DOUT_OUT(); + reg_temp = READ_CONFIG_CMD << 1; //命令长度为 7bits (写0x56)左移1位 + for (bit_cout = 0; bit_cout < 7; bit_cout++) + { + if (reg_temp & 0x80) //MSB + { + CS1237_DOUT_H(); + } + else + { + CS1237_DOUT_L(); + } + reg_temp = reg_temp << 1; + CS1237_Clock(); + } + /* clk37,读寄存器模式改输入 */ + CS1237_Clock(); + CS1237_DOUT_IN(); + for (bit_cout = 0; bit_cout < 8; bit_cout++) + { + CS1237_SCLK_H(); + reg_temp <<= 1; //左移1位准备接受数据 初始默认0 + CS1237_5NS(60);//延时300ns + if(CS1237_DOUT_GET() == true) //有数值则累加 + reg_temp |= 1; + CS1237_SCLK_L(); + CS1237_5NS(60); + } + /* 8: clk46 */ + CS1237_Clock(); + CS1237_DOUT_IN(); + CS1237_DOUT_H(); + CS1237IntEnable(); + return reg_temp ; +} +/**读取CS1237的AD数*/ +static int32_t Read_CS1237_Ad_Data(void) +{ + uint16_t bit_cout = 0; + int32_t data_temp = 0; + + /* clk1 ~ clk24 ADC数据*/ + data_temp = 0; + for (bit_cout = 0; bit_cout < 24; bit_cout++) + { + CS1237_SCLK_H(); + data_temp <<= 1; //左移1位准备接受数据 初始默认0 + CS1237_5NS(60);//延时300ns + if(CS1237_DOUT_GET() == true) //有数值则累加 + data_temp |= 1; + CS1237_SCLK_L(); + CS1237_5NS(60); + } + + /* clk25 ~ clk27 */ + for (bit_cout = 24; bit_cout < 27; bit_cout++) + { + CS1237_Clock(); //给一周期时钟 + } + CS1237_DOUT_H(); + CS1237_SCLK_L(); + + if(data_temp > 0x7FFFFF) //取24位 + { + data_temp |= 0xFF000000; + } + return data_temp; +} + +void RIGHTLOW_CS1237_IrqCallBack(void) +{ + CS1237IrqFlag = true; +} +void RIGHTLOW_CS1237_Init(void) +{ + CS1237IrqFlag = false; + BuildDelay = false; + RIGHTLOW_CS1237Var.AinA_AD = 0; + RIGHTLOW_CS1237Var.Temp_AD = 0; + RIGHTLOW_CS1237Var.Jump_AD = 0; + + CS1237IntEnable(); + CS1237Port = CH_SEL_A; + CS1237Hz = SPEED_SEL_640Hz; + CS1237PGA = PGA_SEL_128; + + uint8_t read_reg = 0x00; + uint8_t set_reg = REFO_ON | CS1237Hz | CS1237PGA | CS1237Port; + CS1237_1MS(20); + Set_CS1237_Config(set_reg); + CS1237_1MS(20); + read_reg = Read_CS1237_Config(); + CS1237_1MS(20); + if(read_reg != set_reg){ + DBG_LOG("RIGHTLOW CS1237 Init ERR...\r\n"); + //DBG_LOG("set_reg = %02X\tread_reg = %02X\r\n",set_reg,read_reg); + InitFlag = true; + } + else { + DBG_LOG("RIGHTLOW CS1237 Init OK...\r\n"); + //DBG_LOG("set_reg = %02X\tread_reg = %02X\r\n",set_reg,read_reg); + CS1237Port = read_reg & 0x03; + InitFlag = true; + } + CS1237IntDisable(); +} +void RIGHTLOW_CS1237DataLoopCollect(void) +{ + static int32_t ad_array[PACK_NUM]; + static uint8_t adcnt; + static uint8_t TimeOutmagcnt; + + switch(RIGHTLOW_CS1237Var.Status) { + case RLCS1237_STATUS_IDLE:{ + break;} + + case RLCS1237_STATUS_START:{ + memset(&ad_array, 0x00, sizeof(ad_array)); + adcnt = 0; + TimeOutmagcnt = 0; + memset(&RIGHTLOW_CS1237Var, NULL, sizeof(RIGHTLOW_CS1237Var)); + if(BuildDelay == true) + { + BuildDelay = false; + if(CS1237Hz == SPEED_SEL_10Hz){ + RIGHTLOW_CS1237Var.CS1237Delay1mSCnt = tCon_10Hz; + } + if(CS1237Hz == SPEED_SEL_40Hz){ + RIGHTLOW_CS1237Var.CS1237Delay1mSCnt = tCon_40Hz; + } + if(CS1237Hz == SPEED_SEL_640Hz){ + RIGHTLOW_CS1237Var.CS1237Delay1mSCnt = tCon_640Hz; + } + if(CS1237Hz == SPEED_SEL6_1280Hz){ + RIGHTLOW_CS1237Var.CS1237Delay1mSCnt = tCon_1280Hz; + } + RIGHTLOW_CS1237Var.Status = RLCS1237_STATUS_DELAY; + } + else + { + RIGHTLOW_CS1237Var.Status = RLCS1237_STATUS_READ; + } + break;} + + case RLCS1237_STATUS_DELAY:{ + if(RIGHTLOW_CS1237Var.CS1237Delay1mSCnt <= 0){ + RIGHTLOW_CS1237Var.Status = RLCS1237_STATUS_READ; + } + break;} + + case RLCS1237_STATUS_READ:{ + CS1237IrqFlag = false; + RIGHTLOW_CS1237Var.CS1237Delay1mSCnt = 100; + RIGHTLOW_CS1237Var.Status = RLCS1237_STATUS_WAIT_READ; + break;} + + case RLCS1237_STATUS_WAIT_READ:{ + if(RIGHTLOW_CS1237Var.CS1237Delay1mSCnt <= 0){ + RIGHTLOW_CS1237Var.Status = RLCS1237_STATUS_READ; + TimeOutmagcnt++; + } + if(CS1237IrqFlag == true){ + CS1237IrqFlag = false; + ad_array[adcnt++] = Read_CS1237_Ad_Data(); + RIGHTLOW_CS1237Var.Status = RLCS1237_STATUS_READ; + } + if(TimeOutmagcnt >= PACK_NUM){ + TimeOutmagcnt = 0; + if(adcnt > 0){ + if(CS1237Port == CH_SEL_A){ + RIGHTLOW_CS1237Var.AinA_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + RIGHTLOW_CS1237AinADataProcessCallBack(RIGHTLOW_CS1237Var.AinA_AD); + } + if(CS1237Port == CH_SEL_TEMP){ + RIGHTLOW_CS1237Var.Temp_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + //CS1237TempDataProcessCallBack(LEFTLOW_CS1237Var.Temp_AD); + } + if(CS1237Port == CH_SEL_JUMP){ + RIGHTLOW_CS1237Var.Jump_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + //CS1237JumpDataProcessCallBack(LEFTLOW_CS1237Var.Jump_AD); + } + RIGHTLOW_CS1237Var.Status = RLCS1237_STATUS_CH_SEL; + } + else{ + if(CS1237Port == CH_SEL_A){ + DBG_LOG("RIGHTLOW CS1237 CHA TimeOut...\r\n"); + } + if(CS1237Port == CH_SEL_TEMP){ + DBG_LOG("RIGHTLOW CS1237 Temp TimeOut...\r\n"); + } + if(CS1237Port == CH_SEL_JUMP){ + DBG_LOG("RIGHTLOW CS1237 Jump TimeOut...\r\n"); + } + RIGHTLOW_CS1237Var.Status = RLCS1237_STATUS_CH_SEL; + } + } + if(adcnt >= PACK_NUM){ + if(CS1237Port == CH_SEL_A){ + RIGHTLOW_CS1237Var.AinA_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + RIGHTLOW_CS1237AinADataProcessCallBack(RIGHTLOW_CS1237Var.AinA_AD); + } + if(CS1237Port == CH_SEL_TEMP){ + RIGHTLOW_CS1237Var.Temp_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + //CS1237TempDataProcessCallBack(LEFTLOW_CS1237Var.Temp_AD); + } + if(CS1237Port == CH_SEL_JUMP){ + RIGHTLOW_CS1237Var.Jump_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + //CS1237JumpDataProcessCallBack(LEFTLOW_CS1237Var.Jump_AD); + } + RIGHTLOW_CS1237Var.Status = RLCS1237_STATUS_CH_SEL; + } + break;} + + case RLCS1237_STATUS_CH_SEL:{ + RIGHTLOW_CS1237Var.Status = RLCS1237_STATUS_STOP; + BuildDelay = false; + uint8_t read_reg; + if(CS1237Port == CH_SEL_A){ +#if(PORT_TEMP == 1) + read_reg = Read_CS1237_Config(); + Set_CS1237_Config((read_reg & 0xFC) | CH_SEL_TEMP); + CS1237Port = CH_SEL_TEMP; + BuildDelay = true; + break; +#endif +#if(PORT_JUMP == 1) + read_reg = Read_CS1237_Config(); + Set_CS1237_Config((read_reg & 0xFC) | CH_SEL_JUMP); + CS1237Port = CH_SEL_JUMP; + BuildDelay = true; + break; +#endif + } + + if(CS1237Port == CH_SEL_TEMP){ +#if(PORT_JUMP == 1) + read_reg = Read_CS1238_Config(); + Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_JUMP); + CS1238Port = CH_SEL_JUMP; + BuildDelay = true; + break; +#endif +#if(PORT_A == 1) + read_reg = Read_CS1237_Config(); + Set_CS1237_Config((read_reg & 0xFC) | CH_SEL_A); + CS1237Port = CH_SEL_A; + BuildDelay = true; + break; +#endif + } + + if(CS1237Port == CH_SEL_JUMP){ +#if(PORT_A == 1) + read_reg = Read_CS1237_Config(); + Set_CS1237_Config((read_reg & 0xFC) | CH_SEL_A); + CS1237Port = CH_SEL_A; + BuildDelay = true; + break; +#endif +#if(PORT_TEMP == 1) + read_reg = Read_CS1237_Config(); + Set_CS1237_Config((read_reg & 0xFC) | CH_SEL_TEMP); + CS1237Port = CH_SEL_TEMP; + BuildDelay = true; + break; +#endif + } + break;} + + case RLCS1237_STATUS_STOP:{ + RIGHTLOW_CS1237Stop(); + RIGHTLOW_CS1237Var.Status = RLCS1237_STATUS_IDLE; + //RIGHTLOW_CS1237Var.Status = RLCS1237_STATUS_START;//持续工作 + break;} + } +} +void RIGHTLOW_CS12371mSRoutine(void) +{ + if(RIGHTLOW_CS1237Var.CS1237Delay1mSCnt > 0) + RIGHTLOW_CS1237Var.CS1237Delay1mSCnt--; +} +void RIGHTLOW_CS1237Start(void) +{ + CS1237_WakeUp(); + CS1237_1MS(2); + BuildDelay = true; + CS1237IntEnable(); + if(!InitFlag){ + RIGHTLOW_CS1237_Init(); + return; + } + RIGHTLOW_CS1237Var.Status = RLCS1237_STATUS_START; +} +void RIGHTLOW_CS1237Stop(void) +{ + CS1237IntDisable(); + //CS1237_Sleep(); +} + + + diff --git a/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTLOW.h b/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTLOW.h new file mode 100644 index 0000000..732a0a5 --- /dev/null +++ b/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTLOW.h @@ -0,0 +1,78 @@ +#include "bsp.h" + +#ifndef _CS1237_RIGHTLOW_H_ +#define _CS1237_RIGHTLOW_H_ + +#define READ_CONFIG_CMD 0x56 +#define WRITE_CONFIG_CMD 0x65 + +#define CONFIG_RST 0x0C + +#define REFO_OFF 0x40 +#define REFO_ON 0x00 + +#define SPEED_SEL_10Hz 0x00 +#define SPEED_SEL_40Hz 0x10 +#define SPEED_SEL_640Hz 0x20 +#define SPEED_SEL6_1280Hz 0x30 + +#define PGA_SEL_1 0x00 +#define PGA_SEL_2 0x04 +#define PGA_SEL_64 0x08 +#define PGA_SEL_128 0x0C + +#define CH_SEL_A 0x00 +//#define CH_SEL_B 0x01 +#define CH_SEL_TEMP 0x02 +#define CH_SEL_JUMP 0x03 + +/*Definition of conversion time corresponding to repeatability setting*/ +/* + 10Hz //ʱ300ms + 40Hz //ʱ75ms + 640Hz //ʱ6.25ms + 1280Hz //ʱ3.125ms +*/ +#define tCon_10Hz 300 /* ms. */ +#define tCon_40Hz 75 /* ms. */ +#define tCon_640Hz 7 /* ms. */ +#define tCon_1280Hz 4 /* ms. */ + +#define PORT_A 1 //ɼͨA +//#define PORT_B 1 //ɼͨB +#define PORT_TEMP 0 //ɼ¶ +#define PORT_JUMP 0 //ڶ̲ɼ +#define PACK_NUM 1 //һβɼݰ +#define FILTER_NUM 0 //˲ + +typedef enum{ + RLCS1237_STATUS_IDLE, + RLCS1237_STATUS_START, + RLCS1237_STATUS_DELAY, + RLCS1237_STATUS_READ, + RLCS1237_STATUS_WAIT_READ, + RLCS1237_STATUS_CH_SEL, + RLCS1237_STATUS_STOP, +}RightLowCS1237Status_m; + +typedef struct{ + RightLowCS1237Status_m Status; + uint32_t CS1237Delay1mSCnt; + + int32_t AinA_AD;//AINAad + //int32_t AinB_AD;//AINBad + int32_t Temp_AD;//¶ad + int32_t Jump_AD;//ڶad +} +RIGHTLOW_CS1237Var_t; + +void RIGHTLOW_CS1237_Init(void); +void RIGHTLOW_CS1237_IrqCallBack(void); +void RIGHTLOW_CS1237DataLoopCollect(void); +void RIGHTLOW_CS12371mSRoutine(void); +void RIGHTLOW_CS1237Start(void); +void RIGHTLOW_CS1237Stop(void); +#endif + + + diff --git a/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTUP.c b/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTUP.c index a10e7c8..3ff949a 100644 --- a/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTUP.c +++ b/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTUP.c @@ -1,189 +1,203 @@ -#include "CS1238.h" -#include "UartDebug.h" +#include "CS1237_RIGHTUP.h" +#include "Debug.h" #include "bsp.h" #include "main.h" #include "Algorithm.h" -CS1238Var_t CS1238Var; -static bool InitFlag; -static bool CS1238IrqFlag; -static bool BuildDelay; -static uint8_t CS1238Port; -static uint8_t CS1238Hz; -static uint8_t CS1238PGA; -extern void CS1238Ain1DataProcessCallBack(int32_t AD); -extern void CS1238Ain2DataProcessCallBack(int32_t AD); -extern void CS1238TempDataProcessCallBack(int32_t AD); -extern void CS1238JumpDataProcessCallBack(int32_t AD); +#define CS1237_DOUT_OUT() PORT_OE(RIGHTUP_CS1237_DOUT_PORTx, RIGHTUP_CS1237_DOUT_PINx, Enable) +#define CS1237_DOUT_IN() PORT_OE(RIGHTUP_CS1237_DOUT_PORTx, RIGHTUP_CS1237_DOUT_PINx, Disable) +#define CS1237_DOUT_H() SET_RIGHTUP_CS1237_DOUT() +#define CS1237_DOUT_L() CLR_RIGHTUP_CS1237_DOUT() +#define CS1237_DOUT_GET() GET_RIGHTUP_CS1237_DOUT() -/** cs1238 时序时钟*/ -static void CS1238_Clock(void) +#define CS1237_SCLK_H() SET_RIGHTUP_CS1237_SCLK() +#define CS1237_SCLK_L() CLR_RIGHTUP_CS1237_SCLK() + +#define CS1237_5NS(x) delay_5ns(x) //5ns延时 +#define CS1237_1US(x) Ddl_Delay1us(x) //1us延时 +#define CS1237_1MS(x) Ddl_Delay1ms(x) //1ms延时 + +#define CS1237IntEnable() ExtInt04IntEnable() +#define CS1237IntDisable() ExtInt04IntDisable() + +RIGHTUP_CS1237Var_t RIGHTUP_CS1237Var; +static bool InitFlag; +static bool CS1237IrqFlag; +static bool BuildDelay; +static uint8_t CS1237Port; +static uint8_t CS1237Hz; +static uint8_t CS1237PGA; +extern void RIGHTUP_CS1237AinADataProcessCallBack(int32_t AD); + + +/** cs1237 时序时钟*/ +static void CS1237_Clock(void) { - CS1238_SCLK_H(); - CS1238_100NS(3); - CS1238_SCLK_L(); - CS1238_100NS(3); + CS1237_SCLK_H(); + CS1237_5NS(60); + CS1237_SCLK_L(); + CS1237_5NS(60); } -/** cs1238 休眠*/ -static void CS1238_Sleep(void) +/** cs1237 休眠*/ +static void CS1237_Sleep(void) { - CS1238_SCLK_H(); - CS1238_1US(150); + CS1237_SCLK_H(); + CS1237_1US(200); } -/** cs1238 唤醒*/ -static void CS1238_WakeUp(void) +/** cs1237 唤醒*/ +static void CS1237_WakeUp(void) { - CS1238_SCLK_L(); - CS1238_1US(20); + CS1237_SCLK_L(); + CS1237_1US(20); } -/**设置CS1238寄存器*/ -static void Set_CS1238_Config(uint8_t ad_reg) +/**设置CS1237寄存器*/ +static void Set_CS1237_Config(uint8_t ad_reg) { uint16_t bit_cout = 0; uint8_t reg_temp = 0x00; //DOUT由高变低之后开始读取数据 - CS1238_DOUT_OUT(); - CS1238_DOUT_H(); - CS1238_DOUT_IN(); - CS1238_SCLK_L(); //时钟拉低 - CS1238Var.CS1238Delay1mSCnt = 300; - CS1238IrqFlag = false; - while(CS1238IrqFlag == false) //等待芯片准备好 + CS1237_DOUT_OUT(); + CS1237_DOUT_H(); + CS1237_DOUT_IN(); + CS1237_SCLK_L(); //时钟拉低 + RIGHTUP_CS1237Var.CS1237Delay1mSCnt = 300; + CS1237IrqFlag = false; + while(CS1237IrqFlag == false) //等待芯片准备好 { - if(CS1238Var.CS1238Delay1mSCnt <= 0){ - DBG_LOG("CS1238 Preparation Timeout...\r\n"); + if(RIGHTUP_CS1237Var.CS1237Delay1mSCnt <= 0){ + //DBG_LOG("RIGHTUP CS1237 Preparation Timeout...\r\n"); return; // 超时退出 } } - CS1238IntDisable(); - CS1238IrqFlag = false; + CS1237IntDisable(); + CS1237IrqFlag = false; /* clk1-clk26 写期间不需要操作*/ for (bit_cout = 0; bit_cout < 26; bit_cout++) { - CS1238_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 } /* clk27 DOUT输出拉高*/ - CS1238_Clock(); //给一周期时钟 - CS1238_DOUT_H(); + CS1237_Clock(); //给一周期时钟 + CS1237_DOUT_H(); /* clk28 - clk29 发送写寄存器命令字 */ - CS1238_Clock(); //给一周期时钟 - CS1238_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 /* clk30 - clk36 发送写寄存器命令字 */ - CS1238_DOUT_OUT(); + CS1237_DOUT_OUT(); reg_temp = WRITE_CONFIG_CMD << 1; //命令长度为 7bits (写0x65)左移1位 for (bit_cout = 0; bit_cout < 7; bit_cout++) { if (reg_temp & 0x80) //MSB { - CS1238_DOUT_H(); + CS1237_DOUT_H(); } else { - CS1238_DOUT_L(); + CS1237_DOUT_L(); } reg_temp = reg_temp << 1; - CS1238_Clock(); + CS1237_Clock(); } /* clk37写寄存器模式还是输出 */ - CS1238_Clock(); + CS1237_Clock(); /* clk38 ~ clk45 写入寄存器值 */ reg_temp = ad_reg;//要配件的寄存器数值 for (bit_cout = 0; bit_cout < 8; bit_cout++) { if (reg_temp & 0x80) //MSB { - CS1238_DOUT_H(); + CS1237_DOUT_H(); } else { - CS1238_DOUT_L(); + CS1237_DOUT_L(); } reg_temp = reg_temp << 1; - CS1238_Clock(); + CS1237_Clock(); } /* 8: clk46 */ - CS1238_Clock(); - CS1238_DOUT_H(); - CS1238_DOUT_IN(); - CS1238IntEnable(); + CS1237_Clock(); + CS1237_DOUT_H(); + CS1237_DOUT_IN(); + CS1237IntEnable(); return ; } -/**读CS1238寄存器*/ -static int32_t Read_CS1238_Config(void) +/**读CS1237寄存器*/ +static int32_t Read_CS1237_Config(void) { uint16_t bit_cout = 0; uint8_t reg_temp = 0x00; //DOUT由高变低之后开始读取数据 - CS1238_DOUT_OUT(); - CS1238_DOUT_H(); - CS1238_DOUT_IN(); - CS1238_SCLK_L(); //时钟拉低 - CS1238Var.CS1238Delay1mSCnt = 300; - CS1238IrqFlag = false; - while(CS1238IrqFlag == false) //等待芯片准备好 + CS1237_DOUT_OUT(); + CS1237_DOUT_H(); + CS1237_DOUT_IN(); + CS1237_SCLK_L(); //时钟拉低 + RIGHTUP_CS1237Var.CS1237Delay1mSCnt = 300; + CS1237IrqFlag = false; + while(CS1237IrqFlag == false) //等待芯片准备好 { - if(CS1238Var.CS1238Delay1mSCnt <= 0){ - DBG_LOG("CS1238 Preparation Timeout...\r\n"); + if(RIGHTUP_CS1237Var.CS1237Delay1mSCnt <= 0){ + //DBG_LOG("RIGHTUP CS1237 Preparation Timeout...\r\n"); return 0; // 超时退出 } } - CS1238IntDisable(); - CS1238IrqFlag = false; + CS1237IntDisable(); + CS1237IrqFlag = false; /* clk1-clk26 写期间不需要操作*/ for (bit_cout = 0; bit_cout < 26; bit_cout++) { - CS1238_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 } /* clk27 DOUT输出拉高*/ - CS1238_Clock(); //给一周期时钟 - CS1238_DOUT_H(); + CS1237_Clock(); //给一周期时钟 + CS1237_DOUT_H(); /* clk28 - clk29 发送写寄存器命令字 */ - CS1238_Clock(); //给一周期时钟 - CS1238_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 /* clk30 - clk36 发送读寄存器命令字 */ - CS1238_DOUT_OUT(); + CS1237_DOUT_OUT(); reg_temp = READ_CONFIG_CMD << 1; //命令长度为 7bits (写0x56)左移1位 for (bit_cout = 0; bit_cout < 7; bit_cout++) { if (reg_temp & 0x80) //MSB { - CS1238_DOUT_H(); + CS1237_DOUT_H(); } else { - CS1238_DOUT_L(); + CS1237_DOUT_L(); } reg_temp = reg_temp << 1; - CS1238_Clock(); + CS1237_Clock(); } /* clk37,读寄存器模式改输入 */ - CS1238_Clock(); - CS1238_DOUT_IN(); + CS1237_Clock(); + CS1237_DOUT_IN(); for (bit_cout = 0; bit_cout < 8; bit_cout++) { - CS1238_SCLK_H(); + CS1237_SCLK_H(); reg_temp <<= 1; //左移1位准备接受数据 初始默认0 - CS1238_100NS(3);//延时300ns - if(GET_CS1238_DOUT() == true) //有数值则累加 + CS1237_5NS(60);//延时300ns + if(CS1237_DOUT_GET() == true) //有数值则累加 reg_temp |= 1; - CS1238_SCLK_L(); - CS1238_100NS(3); + CS1237_SCLK_L(); + CS1237_5NS(60); } /* 8: clk46 */ - CS1238_Clock(); - CS1238_DOUT_IN(); - CS1238_DOUT_H(); - CS1238IntEnable(); + CS1237_Clock(); + CS1237_DOUT_IN(); + CS1237_DOUT_H(); + CS1237IntEnable(); return reg_temp ; } -/**读取CS1238的AD数*/ -static int32_t Read_CS1238_Ad_Data(void) +/**读取CS1237的AD数*/ +static int32_t Read_CS1237_Ad_Data(void) { uint16_t bit_cout = 0; int32_t data_temp = 0; @@ -192,22 +206,22 @@ static int32_t Read_CS1238_Ad_Data(void) data_temp = 0; for (bit_cout = 0; bit_cout < 24; bit_cout++) { - CS1238_SCLK_H(); + CS1237_SCLK_H(); data_temp <<= 1; //左移1位准备接受数据 初始默认0 - CS1238_100NS(3);//延时300ns - if(GET_CS1238_DOUT() == true) //有数值则累加 + CS1237_5NS(60);//延时300ns + if(CS1237_DOUT_GET() == true) //有数值则累加 data_temp |= 1; - CS1238_SCLK_L(); - CS1238_100NS(3); + CS1237_SCLK_L(); + CS1237_5NS(60); } /* clk25 ~ clk27 */ for (bit_cout = 24; bit_cout < 27; bit_cout++) { - CS1238_Clock(); //给一周期时钟 + CS1237_Clock(); //给一周期时钟 } - CS1238_DOUT_H(); - CS1238_SCLK_L(); + CS1237_DOUT_H(); + CS1237_SCLK_L(); if(data_temp > 0x7FFFFF) //取24位 { @@ -216,190 +230,172 @@ static int32_t Read_CS1238_Ad_Data(void) return data_temp; } -void CS1238_IrqCallBack(void) +void RIGHTUP_CS1237_IrqCallBack(void) { - CS1238IrqFlag = true; + CS1237IrqFlag = true; } -void CS1238_Init(void) +void RIGHTUP_CS1237_Init(void) { - CS1238IrqFlag = false; + CS1237IrqFlag = false; BuildDelay = false; - CS1238IntEnable(); - CS1238Var.Ain1_AD = 0; - CS1238Var.Ain2_AD = 0; - CS1238Var.Temp_AD = 0; - CS1238Var.Jump_AD = 0; + RIGHTUP_CS1237Var.AinA_AD = 0; + RIGHTUP_CS1237Var.Temp_AD = 0; + RIGHTUP_CS1237Var.Jump_AD = 0; - CS1238Port = CH_SEL_A; - CS1238Hz = SPEED_SEL_640Hz; - CS1238PGA = PGA_SEL_128; + CS1237IntEnable(); + CS1237Port = CH_SEL_A; + CS1237Hz = SPEED_SEL_640Hz; + CS1237PGA = PGA_SEL_128; uint8_t read_reg = 0x00; - uint8_t set_reg = REFO_ON | CS1238Hz | CS1238PGA | CS1238Port; - CS1238_1MS(20); - Set_CS1238_Config(set_reg); - CS1238_1MS(20); - read_reg = Read_CS1238_Config(); - CS1238_1MS(20); + uint8_t set_reg = REFO_ON | CS1237Hz | CS1237PGA | CS1237Port; + CS1237_1MS(20); + Set_CS1237_Config(set_reg); + CS1237_1MS(20); + read_reg = Read_CS1237_Config(); + CS1237_1MS(20); if(read_reg != set_reg){ - DBG_LOG("CS1238 Init ERR...\r\n"); - DBG_LOG("set_reg = %02X\tread_reg = %02X\r\n",set_reg,read_reg); - InitFlag = false; - } - else { - DBG_LOG("CS1238 Init OK...\r\n"); + DBG_LOG("RIGHTUP CS1237 Init ERR...\r\n"); //DBG_LOG("set_reg = %02X\tread_reg = %02X\r\n",set_reg,read_reg); - CS1238Port = read_reg & 0x03; InitFlag = true; } + else { + DBG_LOG("RIGHTUP CS1237 Init OK...\r\n"); + //DBG_LOG("set_reg = %02X\tread_reg = %02X\r\n",set_reg,read_reg); + CS1237Port = read_reg & 0x03; + InitFlag = true; + } + CS1237IntDisable(); } -void CS1238DataLoopCollect(void) +void RIGHTUP_CS1237DataLoopCollect(void) { static int32_t ad_array[PACK_NUM]; static uint8_t adcnt; static uint8_t TimeOutmagcnt; - switch(CS1238Var.Status) { - case CS1238_STATUS_IDLE:{ + switch(RIGHTUP_CS1237Var.Status) { + case RUCS1237_STATUS_IDLE:{ break;} - case CS1238_STATUS_START:{ + case RUCS1237_STATUS_START:{ memset(&ad_array, 0x00, sizeof(ad_array)); adcnt = 0; TimeOutmagcnt = 0; - memset(&CS1238Var, NULL, sizeof(CS1238Var)); + memset(&RIGHTUP_CS1237Var, NULL, sizeof(RIGHTUP_CS1237Var)); if(BuildDelay == true) { BuildDelay = false; - if(CS1238Hz == SPEED_SEL_10Hz){ - CS1238Var.CS1238Delay1mSCnt = tCon_10Hz; + if(CS1237Hz == SPEED_SEL_10Hz){ + RIGHTUP_CS1237Var.CS1237Delay1mSCnt = tCon_10Hz; } - if(CS1238Hz == SPEED_SEL_40Hz){ - CS1238Var.CS1238Delay1mSCnt = tCon_40Hz; + if(CS1237Hz == SPEED_SEL_40Hz){ + RIGHTUP_CS1237Var.CS1237Delay1mSCnt = tCon_40Hz; } - if(CS1238Hz == SPEED_SEL_640Hz){ - CS1238Var.CS1238Delay1mSCnt = tCon_640Hz; + if(CS1237Hz == SPEED_SEL_640Hz){ + RIGHTUP_CS1237Var.CS1237Delay1mSCnt = tCon_640Hz; } - if(CS1238Hz == SPEED_SEL6_1280Hz){ - CS1238Var.CS1238Delay1mSCnt = tCon_1280Hz; + if(CS1237Hz == SPEED_SEL6_1280Hz){ + RIGHTUP_CS1237Var.CS1237Delay1mSCnt = tCon_1280Hz; } - CS1238Var.Status = CS1238_STATUS_DELAY; + RIGHTUP_CS1237Var.Status = RUCS1237_STATUS_DELAY; } else { - CS1238Var.Status = CS1238_STATUS_READ; + RIGHTUP_CS1237Var.Status = RUCS1237_STATUS_READ; } break;} - case CS1238_STATUS_DELAY:{ - if(CS1238Var.CS1238Delay1mSCnt <= 0){ - CS1238Var.Status = CS1238_STATUS_READ; + case RUCS1237_STATUS_DELAY:{ + if(RIGHTUP_CS1237Var.CS1237Delay1mSCnt <= 0){ + RIGHTUP_CS1237Var.Status = RUCS1237_STATUS_READ; } break;} - case CS1238_STATUS_READ:{ - CS1238IrqFlag = false; - CS1238Var.CS1238Delay1mSCnt = 100; - CS1238Var.Status = CS1238_STATUS_WAIT_READ; + case RUCS1237_STATUS_READ:{ + CS1237IrqFlag = false; + RIGHTUP_CS1237Var.CS1237Delay1mSCnt = 100; + RIGHTUP_CS1237Var.Status = RUCS1237_STATUS_WAIT_READ; break;} - case CS1238_STATUS_WAIT_READ:{ - if(CS1238Var.CS1238Delay1mSCnt <= 0){ - CS1238Var.Status = CS1238_STATUS_READ; + case RUCS1237_STATUS_WAIT_READ:{ + if(RIGHTUP_CS1237Var.CS1237Delay1mSCnt <= 0){ + RIGHTUP_CS1237Var.Status = RUCS1237_STATUS_READ; TimeOutmagcnt++; } - if(CS1238IrqFlag == true){ - CS1238IrqFlag = false; - ad_array[adcnt++] = Read_CS1238_Ad_Data(); - CS1238Var.Status = CS1238_STATUS_READ; + if(CS1237IrqFlag == true){ + CS1237IrqFlag = false; + ad_array[adcnt++] = Read_CS1237_Ad_Data(); + RIGHTUP_CS1237Var.Status = RUCS1237_STATUS_READ; } if(TimeOutmagcnt >= PACK_NUM){ TimeOutmagcnt = 0; if(adcnt > 0){ - if(CS1238Port == CH_SEL_A){ - CS1238Var.Ain1_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238Ain1DataProcessCallBack(CS1238Var.Ain1_AD); + if(CS1237Port == CH_SEL_A){ + RIGHTUP_CS1237Var.AinA_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + RIGHTUP_CS1237AinADataProcessCallBack(RIGHTUP_CS1237Var.AinA_AD); } - if(CS1238Port == CH_SEL_B){ - CS1238Var.Ain2_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238Ain2DataProcessCallBack(CS1238Var.Ain2_AD); + if(CS1237Port == CH_SEL_TEMP){ + RIGHTUP_CS1237Var.Temp_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + //CS1237TempDataProcessCallBack(LEFTLOW_CS1237Var.Temp_AD); } - if(CS1238Port == CH_SEL_TEMP){ - CS1238Var.Temp_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238TempDataProcessCallBack(CS1238Var.Temp_AD); + if(CS1237Port == CH_SEL_JUMP){ + RIGHTUP_CS1237Var.Jump_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + //CS1237JumpDataProcessCallBack(LEFTLOW_CS1237Var.Jump_AD); } - if(CS1238Port == CH_SEL_JUMP){ - CS1238Var.Jump_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238JumpDataProcessCallBack(CS1238Var.Jump_AD); - } - CS1238Var.Status = CS1238_STATUS_CH_SEL; + RIGHTUP_CS1237Var.Status = RUCS1237_STATUS_CH_SEL; } else{ - if(CS1238Port == CH_SEL_A){ - DBG_LOG("CS1238 CHA TimeOut...\r\n"); + if(CS1237Port == CH_SEL_A){ + DBG_LOG("RIGHTUP CS1237 CHA TimeOut...\r\n"); } - if(CS1238Port == CH_SEL_B){ - DBG_LOG("CS1238 CHB TimeOut...\r\n"); + if(CS1237Port == CH_SEL_TEMP){ + DBG_LOG("RIGHTUP CS1237 Temp TimeOut...\r\n"); } - if(CS1238Port == CH_SEL_TEMP){ - DBG_LOG("CS1238 Temp TimeOut...\r\n"); + if(CS1237Port == CH_SEL_JUMP){ + DBG_LOG("RIGHTUP CS1237 Jump TimeOut...\r\n"); } - if(CS1238Port == CH_SEL_JUMP){ - DBG_LOG("CS1238 Jump TimeOut...\r\n"); - } - CS1238Var.Status = CS1238_STATUS_CH_SEL; + RIGHTUP_CS1237Var.Status = RUCS1237_STATUS_CH_SEL; } } if(adcnt >= PACK_NUM){ - if(CS1238Port == CH_SEL_A){ - CS1238Var.Ain1_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238Ain1DataProcessCallBack(CS1238Var.Ain1_AD); + if(CS1237Port == CH_SEL_A){ + RIGHTUP_CS1237Var.AinA_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + RIGHTUP_CS1237AinADataProcessCallBack(RIGHTUP_CS1237Var.AinA_AD); } - if(CS1238Port == CH_SEL_B){ - CS1238Var.Ain2_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238Ain2DataProcessCallBack(CS1238Var.Ain2_AD); + if(CS1237Port == CH_SEL_TEMP){ + RIGHTUP_CS1237Var.Temp_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + //CS1237TempDataProcessCallBack(LEFTLOW_CS1237Var.Temp_AD); } - if(CS1238Port == CH_SEL_TEMP){ - CS1238Var.Temp_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238TempDataProcessCallBack(CS1238Var.Temp_AD); + if(CS1237Port == CH_SEL_JUMP){ + RIGHTUP_CS1237Var.Jump_AD = IntFilter_32t(ad_array, adcnt, FILTER_NUM); + //CS1237JumpDataProcessCallBack(LEFTLOW_CS1237Var.Jump_AD); } - if(CS1238Port == CH_SEL_JUMP){ - CS1238Var.Jump_AD = IntFilter_32t(ad_array, adcnt, 4); - CS1238JumpDataProcessCallBack(CS1238Var.Jump_AD); - } - CS1238Var.Status = CS1238_STATUS_CH_SEL; + RIGHTUP_CS1237Var.Status = RUCS1237_STATUS_CH_SEL; } break;} - case CS1238_STATUS_CH_SEL:{ - CS1238Var.Status = CS1238_STATUS_STOP; + case RUCS1237_STATUS_CH_SEL:{ + RIGHTUP_CS1237Var.Status = RUCS1237_STATUS_STOP; BuildDelay = false; uint8_t read_reg; - if(CS1238Port == CH_SEL_A){ + if(CS1237Port == CH_SEL_A){ #if(PORT_TEMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_TEMP); - CS1238Port = CH_SEL_TEMP; + read_reg = Read_CS1237_Config(); + Set_CS1237_Config((read_reg & 0xFC) | CH_SEL_TEMP); + CS1237Port = CH_SEL_TEMP; BuildDelay = true; break; #endif #if(PORT_JUMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_JUMP); - CS1238Port = CH_SEL_JUMP; + read_reg = Read_CS1237_Config(); + Set_CS1237_Config((read_reg & 0xFC) | CH_SEL_JUMP); + CS1237Port = CH_SEL_JUMP; BuildDelay = true; break; #endif } - if(CS1238Port == CH_SEL_B){ -#if(PORT_TEMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_TEMP); - CS1238Port = CH_SEL_TEMP; - BuildDelay = true; - break; -#endif + if(CS1237Port == CH_SEL_TEMP){ #if(PORT_JUMP == 1) read_reg = Read_CS1238_Config(); Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_JUMP); @@ -408,77 +404,60 @@ void CS1238DataLoopCollect(void) break; #endif #if(PORT_A == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_A); - CS1238Port = CH_SEL_A; - BuildDelay = true; - break; -#endif - } - - if(CS1238Port == CH_SEL_TEMP){ -#if(PORT_JUMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_JUMP); - CS1238Port = CH_SEL_JUMP; - BuildDelay = true; - break; -#endif -#if(PORT_A == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_A); - CS1238Port = CH_SEL_A; + read_reg = Read_CS1237_Config(); + Set_CS1237_Config((read_reg & 0xFC) | CH_SEL_A); + CS1237Port = CH_SEL_A; BuildDelay = true; break; #endif } - if(CS1238Port == CH_SEL_JUMP){ + if(CS1237Port == CH_SEL_JUMP){ #if(PORT_A == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_A); - CS1238Port = CH_SEL_A; + read_reg = Read_CS1237_Config(); + Set_CS1237_Config((read_reg & 0xFC) | CH_SEL_A); + CS1237Port = CH_SEL_A; BuildDelay = true; break; #endif #if(PORT_TEMP == 1) - read_reg = Read_CS1238_Config(); - Set_CS1238_Config((read_reg & 0xFC) | CH_SEL_TEMP); - CS1238Port = CH_SEL_TEMP; + read_reg = Read_CS1237_Config(); + Set_CS1237_Config((read_reg & 0xFC) | CH_SEL_TEMP); + CS1237Port = CH_SEL_TEMP; BuildDelay = true; break; #endif } break;} - case CS1238_STATUS_STOP:{ - //CS1238Stop(); - //CS1238Var.Status = CS1238_STATUS_IDLE; - CS1238Var.Status = CS1238_STATUS_START;//持续工作 + case RUCS1237_STATUS_STOP:{ + RIGHTUP_CS1237Stop(); + RIGHTUP_CS1237Var.Status = RUCS1237_STATUS_IDLE; + //RIGHTUP_CS1237Var.Status = RUCS1237_STATUS_START;//持续工作 break;} } } -void CS12381mSRoutine(void) +void RIGHTUP_CS12371mSRoutine(void) { - if(CS1238Var.CS1238Delay1mSCnt > 0) - CS1238Var.CS1238Delay1mSCnt--; + if(RIGHTUP_CS1237Var.CS1237Delay1mSCnt > 0) + RIGHTUP_CS1237Var.CS1237Delay1mSCnt--; } -void CS1238Start(void) +void RIGHTUP_CS1237Start(void) { - CS1238_WakeUp(); - CS1238_1MS(2); + CS1237_WakeUp(); + CS1237_1MS(2); BuildDelay = true; - CS1238IntEnable(); + CS1237IntEnable(); if(!InitFlag){ - CS1238_Init(); + RIGHTUP_CS1237_Init(); return; } - CS1238Var.Status = CS1238_STATUS_START; + RIGHTUP_CS1237Var.Status = RUCS1237_STATUS_START; } -void CS1238Stop(void) +void RIGHTUP_CS1237Stop(void) { - CS1238IntDisable(); - CS1238_Sleep(); + CS1237IntDisable(); + //CS1237_Sleep(); } diff --git a/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTUP.h b/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTUP.h index 354d39d..4a91bc1 100644 --- a/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTUP.h +++ b/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTUP.h @@ -1,7 +1,7 @@ #include "bsp.h" -#ifndef _CS1238_H_ -#define _CS1238_H_ +#ifndef _CS1237_RIGHTUP_H_ +#define _CS1237_RIGHTUP_H_ #define READ_CONFIG_CMD 0x56 #define WRITE_CONFIG_CMD 0x65 @@ -22,21 +22,11 @@ #define PGA_SEL_128 0x0C #define CH_SEL_A 0x00 -#define CH_SEL_B 0x01 +//#define CH_SEL_B 0x01 #define CH_SEL_TEMP 0x02 #define CH_SEL_JUMP 0x03 -#define CS1238_DOUT_OUT() SetBit(((uint32_t)&M0P_GPIO->PADIR + CS1238_DOUT_PORTx), CS1238_DOUT_PINx, 0) -#define CS1238_DOUT_IN() SetBit(((uint32_t)&M0P_GPIO->PADIR + CS1238_DOUT_PORTx), CS1238_DOUT_PINx, 1) -#define CS1238_DOUT_H() SET_CS1238_DOUT() -#define CS1238_DOUT_L() CLR_CS1238_DOUT() -#define CS1238_SCLK_H() SET_CS1238_SCLK() -#define CS1238_SCLK_L() CLR_CS1238_SCLK() - -#define CS1238_1US(x) delay_us(x) //1usʱ -#define CS1238_100NS(x) delay_ns(x) //100nsʱ -#define CS1238_1MS(x) delay_ms(x) //1msʱ /*Definition of conversion time corresponding to repeatability setting*/ /* @@ -51,40 +41,39 @@ #define tCon_1280Hz 4 /* ms. */ #define PORT_A 1 //ɼͨA -#define PORT_B 1 //ɼͨB -#define PORT_TEMP 0 //ɼ¶ -#define PORT_JUMP 0 //ڶ̲ɼ -#define PACK_NUM 10 //һβɼݰ +//#define PORT_B 1 //ɼͨB +#define PORT_TEMP 0 //ɼ¶ +#define PORT_JUMP 0 //ڶ̲ɼ +#define PACK_NUM 1 //һβɼݰ +#define FILTER_NUM 0 //˲ typedef enum{ - CS1238_STATUS_IDLE, - CS1238_STATUS_START, - CS1238_STATUS_DELAY, - CS1238_STATUS_READ, - CS1238_STATUS_WAIT_READ, - CS1238_STATUS_CH_SEL, - CS1238_STATUS_STOP, -}CS1238Status_m; + RUCS1237_STATUS_IDLE, + RUCS1237_STATUS_START, + RUCS1237_STATUS_DELAY, + RUCS1237_STATUS_READ, + RUCS1237_STATUS_WAIT_READ, + RUCS1237_STATUS_CH_SEL, + RUCS1237_STATUS_STOP, +}RightUpCS1237Status_m; typedef struct{ - CS1238Status_m Status; - uint32_t CS1238Delay1mSCnt; + RightUpCS1237Status_m Status; + uint32_t CS1237Delay1mSCnt; - int32_t Ain1_AD;//AIN1ad - int32_t Ain2_AD;//AIN2ad + int32_t AinA_AD;//AINAad + //int32_t AinB_AD;//AINBad int32_t Temp_AD;//¶ad int32_t Jump_AD;//ڶad } -CS1238Var_t; -extern CS1238Var_t CS1238Var; +RIGHTUP_CS1237Var_t; -void CS1238_Init(void); -void CS1238_IrqCallBack(void); -void CS1238DataLoopCollect(void); -void CS1238LoopHandler(void); -void CS12381mSRoutine(void); -void CS1238Start(void); -void CS1238Stop(void); +void RIGHTUP_CS1237_Init(void); +void RIGHTUP_CS1237_IrqCallBack(void); +void RIGHTUP_CS1237DataLoopCollect(void); +void RIGHTUP_CS12371mSRoutine(void); +void RIGHTUP_CS1237Start(void); +void RIGHTUP_CS1237Stop(void); #endif diff --git a/Project/HC32F460/source/User/Inc/bsp.h b/Project/HC32F460/source/User/Inc/bsp.h index b33b57b..30818ae 100644 --- a/Project/HC32F460/source/User/Inc/bsp.h +++ b/Project/HC32F460/source/User/Inc/bsp.h @@ -11,10 +11,10 @@ /*ģر*/ #define USE_DEBUG 1 //DEBUGأ0رգ1 -#define USE_VBAT_AD 0 //﮵صѹADȡѡ0رգ1 +#define USE_AD 0 //ADȡѡ0رգ1 #define USE_WDT 0 //Źѡ0رգ1 #define USE_EXFALSE 0 //ⲿFALSE洢ѡ0رգ1 -#define USE_RTC 1 //RTCʱӿأ0رգ1 +#define USE_RTC 0 //RTCʱӿأ0رգ1 #define USE_LPTIM0 0 //LPTIM0أ0رգ1 #define USE_DMA 0 //DMAأ0رգ1 #define USE_RS485 0 //RS485أ0رգ1 @@ -27,7 +27,7 @@ #define USE_CS1237_LEFTUP 1 //CS1237أ0رգ1 #define USE_CS1237_LEFTLOW 1 //CS1237أ0رգ1 #define USE_CS1237_RIGHTUP 1 //CS1237أ0رգ1 -#define USE_CS1237_RIGHRLOW 1 //CS1237أ0رգ1 +#define USE_CS1237_RIGHTLOW 1 //CS1237أ0رգ1 //<<---------------------------- MCU -------------------------------->> //< DEBUG @@ -46,6 +46,8 @@ #define DBG_FCG1_PERIPH (PWC_FCG1_PERIPH_USART1) #define DBG_RXPIN_EXIT_CH (ExtiCh13) #define DBG_RXPIN_EXIT_SRC (INT_PORT_EIRQ13) +#define DBG_RX_IRQn (Int000_IRQn) +#define DBG_ER_IRQn (Int001_IRQn) #endif // SPI3 @@ -88,17 +90,17 @@ #define RS485_USART_TX_PORT (PortA) #define RS485_USART_TX_PIN (Pin12) #define RS485_USART_RX_FUNC (Func_Usart1_Rx) -#define RS485_USART_TX_FUNC (Func_Usart1_Tx) -#define RS485_USART_RI_NUM (INT_USART1_RI) -#define RS485_USART_EI_NUM (INT_USART1_EI) -#define RS485_USART_TI_NUM (INT_USART1_TI) -#define RS485_USART_TCI_NUM (INT_USART1_TCI) +#define RS485_USART_TX_FUNC (Func_Usart1_Tx) +#define RS485_USART_RI_NUM (INT_USART1_RI) +#define RS485_USART_EI_NUM (INT_USART1_EI) +#define RS485_USART_TI_NUM (INT_USART1_TI) +#define RS485_USART_TCI_NUM (INT_USART1_TCI) #define RS485_FCG1_PERIPH (PWC_FCG1_PERIPH_USART1) #define RS485_RXPIN_EXIT_CH (ExtiCh14) #define RS485_RXPIN_EXIT_SRC (INT_PORT_EIRQ14) -#define RS485_CTRL_PORT (PortC) -#define RS485_CTRL_PIN (Pin13) +#define RS485_CTRL_PORT (PortC) +#define RS485_CTRL_PIN (Pin13) #define RS485_TX() PORT_SetBits(RS485_CTRL_PORT, RS485_CTRL_PIN) #define RS485_RX() PORT_ResetBits(RS485_CTRL_PORT, RS485_CTRL_PIN) #endif @@ -107,59 +109,68 @@ #define RTC_IRQn Int001_IRQn #endif //<<----------------------------- CS1237 ------------------------------->> -//< LEFTUP CS1237 +//< CS1237 #if(USE_CS1237_LEFTUP == 1) +#define LEFTUP_CS1237_IRQn (Int001_IRQn) #define LEFTUP_CS1237_DOUT_PORTx (PortB) -#define LEFTUP_CS1237_DOUT_PINx (Pin00) +#define LEFTUP_CS1237_DOUT_PINx (Pin10) #define SET_LEFTUP_CS1237_DOUT() PORT_SetBits(LEFTUP_CS1237_DOUT_PORTx, LEFTUP_CS1237_DOUT_PINx)// #define CLR_LEFTUP_CS1237_DOUT() PORT_ResetBits(LEFTUP_CS1237_DOUT_PORTx, LEFTUP_CS1237_DOUT_PINx)// -#define GET_LEFTUP_CS1237_DOUT() Gpio_GetInputIO(LEFTUP_CS1237_DOUT_PORTx, LEFTUP_CS1237_DOUT_PINx) +#define GET_LEFTUP_CS1237_DOUT() PORT_GetBit(LEFTUP_CS1237_DOUT_PORTx, LEFTUP_CS1237_DOUT_PINx) #define LEFTUP_CS1237_SCLK_PORTx (PortB) -#define LEFTUP_CS1237_SCLK_PINx (Pin01) +#define LEFTUP_CS1237_SCLK_PINx (Pin02) #define SET_LEFTUP_CS1237_SCLK() PORT_SetBits(LEFTUP_CS1237_SCLK_PORTx, LEFTUP_CS1237_SCLK_PINx)// #define CLR_LEFTUP_CS1237_SCLK() PORT_ResetBits(LEFTUP_CS1237_SCLK_PORTx, LEFTUP_CS1237_SCLK_PINx)// #endif -//< LEFTLOW CS1237 +//< CS1237 #if(USE_CS1237_LEFTLOW == 1) +#define LEFTLOW_CS1237_IRQn (Int002_IRQn) #define LEFTLOW_CS1237_DOUT_PORTx (PortB) -#define LEFTLOW_CS1237_DOUT_PINx (Pin02) +#define LEFTLOW_CS1237_DOUT_PINx (Pin01) #define SET_LEFTLOW_CS1237_DOUT() PORT_SetBits(LEFTLOW_CS1237_DOUT_PORTx, LEFTLOW_CS1237_DOUT_PINx)// #define CLR_LEFTLOW_CS1237_DOUT() PORT_ResetBits(LEFTLOW_CS1237_DOUT_PORTx, LEFTLOW_CS1237_DOUT_PINx)// -#define GET_LEFTLOW_CS1237_DOUT() Gpio_GetInputIO(LEFTLOW_CS1237_DOUT_PORTx, LEFTLOW_CS1237_DOUT_PINx) +#define GET_LEFTLOW_CS1237_DOUT() PORT_GetBit(LEFTLOW_CS1237_DOUT_PORTx, LEFTLOW_CS1237_DOUT_PINx) #define LEFTLOW_CS1237_SCLK_PORTx (PortB) -#define LEFTLOW_CS1237_SCLK_PINx (Pin10) +#define LEFTLOW_CS1237_SCLK_PINx (Pin00) #define SET_LEFTLOW_CS1237_SCLK() PORT_SetBits(LEFTLOW_CS1237_SCLK_PORTx, LEFTLOW_CS1237_SCLK_PINx)// #define CLR_LEFTLOW_CS1237_SCLK() PORT_ResetBits(LEFTLOW_CS1237_SCLK_PORTx, LEFTLOW_CS1237_SCLK_PINx)// #endif -//< RIGHTUP CS1237 +//< CS1237 #if(USE_CS1237_RIGHTUP == 1) +#define RIGHTUP_CS1237_IRQn (Int003_IRQn) #define RIGHTUP_CS1237_DOUT_PORTx (PortA) -#define RIGHTUP_CS1237_DOUT_PINx (Pin06) +#define RIGHTUP_CS1237_DOUT_PINx (Pin04) #define SET_RIGHTUP_CS1237_DOUT() PORT_SetBits(RIGHTUP_CS1237_DOUT_PORTx, RIGHTUP_CS1237_DOUT_PINx)// #define CLR_RIGHTUP_CS1237_DOUT() PORT_ResetBits(RIGHTUP_CS1237_DOUT_PORTx, RIGHTUP_CS1237_DOUT_PINx)// -#define GET_RIGHTUP_CS1237_DOUT() Gpio_GetInputIO(RIGHTUP_CS1237_DOUT_PORTx, RIGHTUP_CS1237_DOUT_PINx) +#define GET_RIGHTUP_CS1237_DOUT() PORT_GetBit(RIGHTUP_CS1237_DOUT_PORTx, RIGHTUP_CS1237_DOUT_PINx) #define RIGHTUP_CS1237_SCLK_PORTx (PortA) -#define RIGHTUP_CS1237_SCLK_PINx (Pin07) +#define RIGHTUP_CS1237_SCLK_PINx (Pin05) #define SET_RIGHTUP_CS1237_SCLK() PORT_SetBits(RIGHTUP_CS1237_SCLK_PORTx, RIGHTUP_CS1237_SCLK_PINx)// #define CLR_RIGHTUP_CS1237_SCLK() PORT_ResetBits(RIGHTUP_CS1237_SCLK_PORTx, RIGHTUP_CS1237_SCLK_PINx)// #endif -//< RIGHRLOW CS1237 -#if(USE_CS1237_RIGHRLOW == 1) -#define RIGHRLOW_CS1237_DOUT_PORTx (PortA) -#define RIGHRLOW_CS1237_DOUT_PINx (Pin04) -#define SET_RIGHRLOW_CS1237_DOUT() PORT_SetBits(RIGHRLOW_CS1237_DOUT_PORTx, RIGHRLOW_CS1237_DOUT_PINx)// -#define CLR_RIGHRLOW_CS1237_DOUT() PORT_ResetBits(RIGHRLOW_CS1237_DOUT_PORTx, RIGHRLOW_CS1237_DOUT_PINx)// -#define GET_RIGHRLOW_CS1237_DOUT() Gpio_GetInputIO(RIGHRLOW_CS1237_DOUT_PORTx, RIGHRLOW_CS1237_DOUT_PINx) +//< CS1237 +#if(USE_CS1237_RIGHTLOW == 1) +#define RIGHTLOW_CS1237_IRQn (Int004_IRQn) +#define RIGHTLOW_CS1237_DOUT_PORTx (PortA) +#define RIGHTLOW_CS1237_DOUT_PINx (Pin06) +#define SET_RIGHTLOW_CS1237_DOUT() PORT_SetBits(RIGHTLOW_CS1237_DOUT_PORTx, RIGHTLOW_CS1237_DOUT_PINx)// +#define CLR_RIGHTLOW_CS1237_DOUT() PORT_ResetBits(RIGHTLOW_CS1237_DOUT_PORTx, RIGHTLOW_CS1237_DOUT_PINx)// +#define GET_RIGHTLOW_CS1237_DOUT() PORT_GetBit(RIGHTLOW_CS1237_DOUT_PORTx, RIGHTLOW_CS1237_DOUT_PINx) -#define RIGHRLOW_CS1237_SCLK_PORTx (PortA) -#define RIGHRLOW_CS1237_SCLK_PINx (Pin05) -#define SET_RIGHRLOW_CS1237_SCLK() PORT_SetBits(RIGHRLOW_CS1237_SCLK_PORTx, RIGHRLOW_CS1237_SCLK_PINx)// -#define CLR_RIGHRLOW_CS1237_SCLK() PORT_ResetBits(RIGHRLOW_CS1237_SCLK_PORTx, RIGHRLOW_CS1237_SCLK_PINx)// +#define RIGHTLOW_CS1237_SCLK_PORTx (PortA) +#define RIGHTLOW_CS1237_SCLK_PINx (Pin07) +#define SET_RIGHTLOW_CS1237_SCLK() PORT_SetBits(RIGHTLOW_CS1237_SCLK_PORTx, RIGHTLOW_CS1237_SCLK_PINx)// +#define CLR_RIGHTLOW_CS1237_SCLK() PORT_ResetBits(RIGHTLOW_CS1237_SCLK_PORTx, RIGHTLOW_CS1237_SCLK_PINx)// #endif +typedef struct { + + uint32_t FactoryFlag;//־λ +}AppPara_T, *pAppPara; + void BSP_Init(void); uint8_t DbgUartRec(void); @@ -206,4 +217,18 @@ void TimeGet(struct tm *cTime); int TimeTs(void); void TimeShow(uint32_t dwStamp); void TimeSync(time_t ts) ; + +void delay_5ns(uint32_t ns); + +void ExtInt10IntEnable(void); +void ExtInt10IntDisable(void); +void ExtInt01IntEnable(void); +void ExtInt01IntDisable(void); +void ExtInt04IntEnable(void); +void ExtInt04IntDisable(void); +void ExtInt06IntEnable(void); +void ExtInt06IntDisable(void); #endif + + + diff --git a/Project/HC32F460/source/User/Inc/main.h b/Project/HC32F460/source/User/Inc/main.h index 808f878..cb331f2 100644 --- a/Project/HC32F460/source/User/Inc/main.h +++ b/Project/HC32F460/source/User/Inc/main.h @@ -1,5 +1,6 @@ #ifndef __MAIN__H #define __MAIN__H +#include #include "bsp.h" @@ -7,18 +8,87 @@ #define SDCARD_BLOCK_MAX (10000) +#define OSC_CNT 40 +#define SLOPE_CNT 30 + +typedef struct{ + int32_t Slope_VPT; + + int32_t LeftUpVPT;//豸ֵ + int32_t LeftLowVPT;//豸ֵ + int32_t RightUpVPT;//豸ֵ + int32_t RightLowVPT;//豸ֵ + + int32_t LeftUp_Org_AdZero;//豸ԭʼAD + int32_t LeftLow_Org_AdZero;//豸ԭʼAD + int32_t RightUp_Org_AdZero;//豸ԭʼAD + int32_t RightLow_Org_AdZero;//豸ԭʼAD +}ADTrack_t; + +/*ݶȡ״̬*/ +typedef enum { + READ_STATUS_IDLE, + READ_STATUS_START, + READ_STATUS_LEFTUP, + READ_STATUS_WAIT_LEFTUP, + READ_STATUS_LEFTLOW, + READ_STATUS_WAIT_LEFTLOW, + READ_STATUS_RIGHTUP, + READ_STATUS_WAIT_RIGHTUP, + READ_STATUS_RIGHTLOW, + READ_STATUS_WAIT_RIGHTLOW, + READ_STATUS_SUPPORT_CONT +}ReadStatus_m; + +/*״̬*/ +typedef enum { + APP_STATUS_IDLE, + APP_STATUS_ON, + APP_STATUS_OFF, + APP_STATUS_WAIT, +}AppStatus_m; + +typedef struct{ + __IO uint16_t rPayLen; + __IO bool HeaderFrame; + __IO uint16_t RxLen; + uint8_t RxBuff[10]; +}Uart1Rx_t; typedef struct { - uint16_t Acc[3]; - uint16_t SensorValue[4]; -}SendData_t, *SendData; + AppStatus_m Status;//״̬ + ReadStatus_m RStatus; + AppPara_T Para; + Uart1Rx_t RxUart1Data; + ADTrack_t ADTrack; + uint32_t TD1mSDelayCnt; + uint32_t Read1mSDelayCnt; + uint32_t Uart1Delay1mSCnt; + uint32_t StopCollDelay1mSCnt; + uint32_t EvenRunDelay1mSCnt; + uint8_t FeedDogDlyCnt; + + bool UpFlag;//־λ + bool DownFlag;//½־λ + bool StopFlag;//ֹͣ־λ + bool EvenRunning;//ƽб־λ -typedef struct { - uint16_t ADValue[4]; - uint16_t Index; -}SaveData_t, *SaveData; - + bool LeftUpCS1237ReadEndFlag; + bool LeftLowCS1237ReadEndFlag; + bool RightUpCS1237ReadEndFlag; + bool RightLowCS1237ReadEndFlag; + int32_t LeftUpCS1237_TrendArray[OSC_CNT]; + int32_t LeftLowCS1237_TrendArray[OSC_CNT]; + int32_t RightUpCS1237_TrendArray[OSC_CNT]; + int32_t RightLowCS1237_TrendArray[OSC_CNT]; + + int32_t LeftUpCS1237_SlopeArray[SLOPE_CNT]; + int32_t LeftLowCS1237_SlopeArray[SLOPE_CNT]; + int32_t RightUpCS1237_SlopeArray[SLOPE_CNT]; + int32_t RightLowCS1237_SlopeArray[SLOPE_CNT]; +}AppDetect_t; +extern AppDetect_t App; #endif diff --git a/Project/HC32F460/source/User/Src/Algorithm.c b/Project/HC32F460/source/User/Src/Algorithm.c index 9c4a583..fd98f88 100644 --- a/Project/HC32F460/source/User/Src/Algorithm.c +++ b/Project/HC32F460/source/User/Src/Algorithm.c @@ -746,6 +746,38 @@ bool isAllZero(uint8_t *arr, int size) return true; // ԪضΪ0򷵻true } - +/***************************************************************************************** +* : HexToAscii +* : 16תASCII +* : HexData16 + ASCDataASCII + sLenݳ +* ֵ: truefalse +*****************************************************************************************/ +void HexToAscii(uint8_t *HexData, char *ASCData, uint8_t sLen) +{ + uint8_t temp; + + for(int i = 0; i < sLen; i++) { + temp = (HexData[i] >> 4) & 0x0f; + if(temp < 10) + temp += '0'; + else + temp = (temp - 10) + 'A'; + + ASCData[i * 2] = temp; + + temp = HexData[i] & 0x0f; + if(temp < 10) + temp += '0'; + else + temp = (temp - 10) + 'A'; + + ASCData[i * 2 + 1] = temp; + } + ASCData[sLen * 2] = '\r'; + ASCData[sLen * 2 + 1] = '\n'; + ASCData[sLen * 2 + 2] = 0; +} diff --git a/Project/HC32F460/source/User/Src/bsp.c b/Project/HC32F460/source/User/Src/bsp.c index e2dcc3b..3673cbb 100644 --- a/Project/HC32F460/source/User/Src/bsp.c +++ b/Project/HC32F460/source/User/Src/bsp.c @@ -3,23 +3,21 @@ #include "Debug.h" #include "hc32f460_efm.h" - +#include "CS1237_LEFTUP.h" +#include "CS1237_LEFTLOW.h" +#include "CS1237_RIGHTUP.h" +#include "CS1237_RIGHTLOW.h" #define SPI_MASTER_MODE #define SPI3_MASTER_MODE - #define FLASH_WRITE_ADDR (0x0003C000u) static void SystemClockConfig(void); uint16_t m_au16Adc1SaValue[4]; - - - - void FlashWrite(uint32_t *wData, uint32_t wLen) { EFM_Unlock(); @@ -85,9 +83,9 @@ static void SystemClockConfig(void) /* Config Xtal and Enable Xtal */ stcXtalCfg.enMode = ClkXtalModeOsc; stcXtalCfg.enDrv = ClkXtalLowDrv; - stcXtalCfg.enFastStartup = Enable; + stcXtalCfg.enFastStartup = Disable; CLK_XtalConfig(&stcXtalCfg); - CLK_XtalCmd(Enable); + CLK_XtalCmd(Disable); /* Config Hrc and enable HRC */ CLK_HrcTrim(SystemCoreClock); @@ -104,13 +102,13 @@ static void SystemClockConfig(void) EFM_SetLatency(EFM_LATENCY_5); EFM_Lock(); - /* MPLL config (XTAL / pllmDiv * plln / PllpDiv = 200M). */ + /* MPLL config (HRC / pllmDiv * plln / PllpDiv = 200M). */ stcMpllCfg.pllmDiv = 1ul; - stcMpllCfg.plln = 50ul; + stcMpllCfg.plln = 25ul; stcMpllCfg.PllpDiv = 2ul; stcMpllCfg.PllqDiv = 2ul; stcMpllCfg.PllrDiv = 2ul; - CLK_SetPllSource(ClkPllSrcXTAL); + CLK_SetPllSource(ClkPllSrcHRC); CLK_MpllConfig(&stcMpllCfg); /* Enable MPLL. */ @@ -128,14 +126,14 @@ static void SystemClockConfig(void) void FeedDog(void) { -#if (USE_DEBUG == 1) +#if (USE_WDT == 1) SWDT_RefreshCounter(); #endif } /***************************************************************************************** * : Xtal32_ClockConfig -* : ϵͳʱ +* : ⲿʱ * : * ֵ: *****************************************************************************************/ @@ -158,7 +156,14 @@ static void Xtal32_ClockConfig(void) /* wait for xtal32 running */ Ddl_Delay1ms(100u); } - +void delay_5ns(uint32_t ns) +{ + for(uint32_t i = 0; i < ns; i++) + { + __NOP(); + } +} +#if(USE_RS485 == 1) /***************************************************************************************** * : RS485Uart_Config * : RS485ڳʼ @@ -244,7 +249,6 @@ static void RS485Uart_Config(uint32_t BaudRate) USART_FuncCmd(RS485_USART_CH, UsartRxInt, Enable); } - void RS485UartSend(uint8_t *sData, uint16_t sLen) { RS485_TX(); @@ -297,7 +301,9 @@ static void RS485RxWakeupInit(void) NVIC_EnableIRQ(stcIrqRegiConf.enIRQn); /* Enable NVIC */ enIntWakeupEnable(Extint2WU); } +#endif +#if(USE_DEBUG == 1) static void DbgUart_Config(uint32_t BaudRate) { stc_usart_uart_init_t stcInitCfg; @@ -335,7 +341,7 @@ static void DbgUart_Config(uint32_t BaudRate) Error_Handler(); } - stcIrqRegiCfg.enIRQn = DBGUART_IRQn; + stcIrqRegiCfg.enIRQn = DBG_RX_IRQn; stcIrqRegiCfg.pfnCallback = &DbgUsartRxIrqCallback; stcIrqRegiCfg.enIntSrc = DBG_USART_RI_NUM; enIrqRegistration(&stcIrqRegiCfg); @@ -343,9 +349,8 @@ static void DbgUart_Config(uint32_t BaudRate) NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn); NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn); - /* Set USART RX error IRQ */ - stcIrqRegiCfg.enIRQn = DBGUART_EI_IRQn; + stcIrqRegiCfg.enIRQn = DBG_ER_IRQn; stcIrqRegiCfg.pfnCallback = &DBGUsartErrIrqCallback; stcIrqRegiCfg.enIntSrc = DBG_USART_EI_NUM; enIrqRegistration(&stcIrqRegiCfg); @@ -414,7 +419,7 @@ static void DBGRxWakeupInit(void) stcExtiConfig.enExtiLvl = ExIntRisingEdge; EXINT_Init(&stcExtiConfig); stcIrqRegiConf.enIntSrc = DBG_RXPIN_EXIT_SRC; /* Select External Int Ch.1 */ - stcIrqRegiConf.enIRQn = DBG_RXPIN_IRQn; /* Register External Int to Vect.No.000 */ + stcIrqRegiConf.enIRQn = DBG_RX_IRQn; /* Register External Int to Vect.No.000 */ stcIrqRegiConf.pfnCallback = &DBG_RxPinIntCallBack; /* Callback function */ enIrqRegistration(&stcIrqRegiConf); /* Registration IRQ */ NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn); /* Clear pending */ @@ -422,36 +427,314 @@ static void DBGRxWakeupInit(void) NVIC_EnableIRQ(stcIrqRegiConf.enIRQn); /* Enable NVIC */ enIntWakeupEnable(Extint2WU); } - +#endif static void GPIO_Config(void) { stc_port_init_t stcPortInit; - stc_port_pub_set_t stcPortPub; -// stc_exint_config_t stcExtiConfig; -// stc_irq_regi_conf_t stcIrqRegiConf; - - PORT_DebugPortSetting(TDO_SWO, Disable); - PORT_DebugPortSetting(TDI, Disable); - PORT_DebugPortSetting(TRST, Disable); MEM_ZERO_STRUCT(stcPortInit); - MEM_ZERO_STRUCT(stcPortPub); - - stcPortPub.enReadWait = WaitCycle3; - PORT_PubSetting(&stcPortPub); + /********************************** GPIO ****************************************/ stcPortInit.enPinMode = Pin_Mode_Out; stcPortInit.enPinOType = Pin_OType_Cmos; stcPortInit.enPinDrv = Pin_Drv_H; - stcPortInit.enPullUp = Disable; - - PORT_Init(RS485_CTRL_PORT, RS485_CTRL_PIN, &stcPortInit); - RS485_RX(); - - PORT_Init(LED_Blue_PORT, LED_Blue_PIN, &stcPortInit); - PORT_Init(LED_Green_PORT, LED_Green_PIN, &stcPortInit); -} + stcPortInit.enPullUp = Disable;// + PORT_Init(LEFTUP_CS1237_SCLK_PORTx, LEFTUP_CS1237_SCLK_PINx, &stcPortInit); + PORT_Init(LEFTLOW_CS1237_SCLK_PORTx, LEFTLOW_CS1237_SCLK_PINx, &stcPortInit); + PORT_Init(RIGHTUP_CS1237_SCLK_PORTx, RIGHTUP_CS1237_SCLK_PINx, &stcPortInit); + PORT_Init(RIGHTLOW_CS1237_SCLK_PORTx, RIGHTLOW_CS1237_SCLK_PINx, &stcPortInit); + +} +/*********************************ϴ + ******************************************************************************* + ** \brief ExtInt00 callback function + ** + ** \param None + ** + ** \retval None + ** + ******************************************************************************/ +void ExtInt10_Callback(void) +{ + if (Set == EXINT_IrqFlgGet(ExtiCh10)) + { + LEFTUP_CS1237_IrqCallBack(); + EXINT_IrqFlgClr(ExtiCh10); + } +} +void ExtiCh10_Init(void) +{ + stc_exint_config_t stcExtiConfig; + stc_irq_regi_conf_t stcIrqRegiConf; + stc_port_init_t stcPortInit; + + /* configuration structure initialization */ + MEM_ZERO_STRUCT(stcExtiConfig); + MEM_ZERO_STRUCT(stcIrqRegiConf); + MEM_ZERO_STRUCT(stcPortInit); + + /**************************************************************************/ + /* External Int Ch.10 */ + /**************************************************************************/ + stcExtiConfig.enExitCh = ExtiCh10; + + /* Filter setting */ + stcExtiConfig.enFilterEn = Enable; + stcExtiConfig.enFltClk = Pclk3Div8; + stcExtiConfig.enExtiLvl = ExIntFallingEdge; + EXINT_Init(&stcExtiConfig); + + /* Set External Int */ + MEM_ZERO_STRUCT(stcPortInit); + stcPortInit.enExInt = Enable; + PORT_Init(LEFTUP_CS1237_DOUT_PORTx, LEFTUP_CS1237_DOUT_PINx, &stcPortInit); + + /* Select External Int Ch.10 */ + stcIrqRegiConf.enIntSrc = INT_PORT_EIRQ10; + + /* Register External Int to Vect.No.004 */ + stcIrqRegiConf.enIRQn = LEFTUP_CS1237_IRQn; + + /* Callback function */ + stcIrqRegiConf.pfnCallback = &ExtInt10_Callback; + + /* Registration IRQ */ + enIrqRegistration(&stcIrqRegiConf); + + /* Clear pending */ + NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn); + + /* Set priority */ + NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIORITY_DEFAULT); +} +void ExtInt10IntEnable(void) +{ + /* Enable NVIC */ + NVIC_EnableIRQ(LEFTUP_CS1237_IRQn); +} +void ExtInt10IntDisable(void) +{ + /* Disable NVIC */ + NVIC_DisableIRQ(LEFTUP_CS1237_IRQn); +} +/*******************************´ + ******************************************************************************* + ** \brief ExtInt01 callback function + ** + ** \param None + ** + ** \retval None + ** + ******************************************************************************/ +void ExtInt01_Callback(void) +{ + if (Set == EXINT_IrqFlgGet(ExtiCh01)) + { + LEFTLOW_CS1237_IrqCallBack(); + EXINT_IrqFlgClr(ExtiCh01); + } +} +void ExtiCh01_Init(void) +{ + stc_exint_config_t stcExtiConfig; + stc_irq_regi_conf_t stcIrqRegiConf; + stc_port_init_t stcPortInit; + + /* configuration structure initialization */ + MEM_ZERO_STRUCT(stcExtiConfig); + MEM_ZERO_STRUCT(stcIrqRegiConf); + MEM_ZERO_STRUCT(stcPortInit); + + /**************************************************************************/ + /* External Int Ch.1 */ + /**************************************************************************/ + stcExtiConfig.enExitCh = ExtiCh01; + + /* Filter setting */ + stcExtiConfig.enFilterEn = Enable; + stcExtiConfig.enFltClk = Pclk3Div8; + stcExtiConfig.enExtiLvl = ExIntFallingEdge; + EXINT_Init(&stcExtiConfig); + + /* Set External Int */ + MEM_ZERO_STRUCT(stcPortInit); + stcPortInit.enExInt = Enable; + PORT_Init(LEFTLOW_CS1237_DOUT_PORTx, LEFTLOW_CS1237_DOUT_PINx, &stcPortInit); + + /* Select External Int Ch.1 */ + stcIrqRegiConf.enIntSrc = INT_PORT_EIRQ1; + + /* Register External Int to Vect.No.005 */ + stcIrqRegiConf.enIRQn = LEFTLOW_CS1237_IRQn; + + /* Callback function */ + stcIrqRegiConf.pfnCallback = &ExtInt01_Callback; + + /* Registration IRQ */ + enIrqRegistration(&stcIrqRegiConf); + + /* Clear pending */ + NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn); + + /* Set priority */ + NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIORITY_DEFAULT); +} +void ExtInt01IntEnable(void) +{ + /* Enable NVIC */ + NVIC_EnableIRQ(LEFTLOW_CS1237_IRQn); +} +void ExtInt01IntDisable(void) +{ + /* Disable NVIC */ + NVIC_DisableIRQ(LEFTLOW_CS1237_IRQn); +} +/*******************************ϴ + ******************************************************************************* + ** \brief ExtInt04 callback function + ** + ** \param None + ** + ** \retval None + ** + ******************************************************************************/ +void ExtInt04_Callback(void) +{ + if (Set == EXINT_IrqFlgGet(ExtiCh04)) + { + RIGHTUP_CS1237_IrqCallBack(); + EXINT_IrqFlgClr(ExtiCh04); + } +} +void ExtiCh04_Init(void) +{ + stc_exint_config_t stcExtiConfig; + stc_irq_regi_conf_t stcIrqRegiConf; + stc_port_init_t stcPortInit; + + /* configuration structure initialization */ + MEM_ZERO_STRUCT(stcExtiConfig); + MEM_ZERO_STRUCT(stcIrqRegiConf); + MEM_ZERO_STRUCT(stcPortInit); + + /**************************************************************************/ + /* External Int Ch.4 */ + /**************************************************************************/ + stcExtiConfig.enExitCh = ExtiCh04; + + /* Filter setting */ + stcExtiConfig.enFilterEn = Enable; + stcExtiConfig.enFltClk = Pclk3Div8; + stcExtiConfig.enExtiLvl = ExIntFallingEdge; + EXINT_Init(&stcExtiConfig); + + /* Set External Int */ + MEM_ZERO_STRUCT(stcPortInit); + stcPortInit.enExInt = Enable; + PORT_Init(RIGHTUP_CS1237_DOUT_PORTx, RIGHTUP_CS1237_DOUT_PINx, &stcPortInit); + + /* Select External Int Ch.4 */ + stcIrqRegiConf.enIntSrc = INT_PORT_EIRQ4; + + /* Register External Int to Vect.No.006 */ + stcIrqRegiConf.enIRQn = RIGHTUP_CS1237_IRQn; + + /* Callback function */ + stcIrqRegiConf.pfnCallback = &ExtInt04_Callback; + + /* Registration IRQ */ + enIrqRegistration(&stcIrqRegiConf); + + /* Clear pending */ + NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn); + + /* Set priority */ + NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIORITY_DEFAULT); +} +void ExtInt04IntEnable(void) +{ + /* Enable NVIC */ + NVIC_EnableIRQ(RIGHTUP_CS1237_IRQn); +} +void ExtInt04IntDisable(void) +{ + /* Disable NVIC */ + NVIC_DisableIRQ(RIGHTUP_CS1237_IRQn); +} +/*******************************´ + ******************************************************************************* + ** \brief ExtInt04 callback function + ** + ** \param None + ** + ** \retval None + ** + ******************************************************************************/ +void ExtInt06_Callback(void) +{ + if (Set == EXINT_IrqFlgGet(ExtiCh06)) + { + RIGHTLOW_CS1237_IrqCallBack(); + EXINT_IrqFlgClr(ExtiCh06); + } +} +void ExtiCh06_Init(void) +{ + stc_exint_config_t stcExtiConfig; + stc_irq_regi_conf_t stcIrqRegiConf; + stc_port_init_t stcPortInit; + + /* configuration structure initialization */ + MEM_ZERO_STRUCT(stcExtiConfig); + MEM_ZERO_STRUCT(stcIrqRegiConf); + MEM_ZERO_STRUCT(stcPortInit); + + /**************************************************************************/ + /* External Int Ch.6 */ + /**************************************************************************/ + stcExtiConfig.enExitCh = ExtiCh06; + + /* Filter setting */ + stcExtiConfig.enFilterEn = Enable; + stcExtiConfig.enFltClk = Pclk3Div8; + stcExtiConfig.enExtiLvl = ExIntFallingEdge; + EXINT_Init(&stcExtiConfig); + + /* Set External Int */ + MEM_ZERO_STRUCT(stcPortInit); + stcPortInit.enExInt = Enable; + PORT_Init(RIGHTLOW_CS1237_DOUT_PORTx, RIGHTLOW_CS1237_DOUT_PINx, &stcPortInit); + + /* Select External Int Ch.6 */ + stcIrqRegiConf.enIntSrc = INT_PORT_EIRQ6; + + /* Register External Int to Vect.No.006 */ + stcIrqRegiConf.enIRQn = RIGHTLOW_CS1237_IRQn; + + /* Callback function */ + stcIrqRegiConf.pfnCallback = &ExtInt06_Callback; + + /* Registration IRQ */ + enIrqRegistration(&stcIrqRegiConf); + + /* Clear pending */ + NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn); + + /* Set priority */ + NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIORITY_DEFAULT); +} +void ExtInt06IntEnable(void) +{ + /* Enable NVIC */ + NVIC_EnableIRQ(RIGHTLOW_CS1237_IRQn); +} +void ExtInt06IntDisable(void) +{ + /* Disable NVIC */ + NVIC_DisableIRQ(RIGHTLOW_CS1237_IRQn); +} +#if(USE_SPI1 == 1) static void Spi_Config(void) { stc_spi_init_t stcSpiInit; @@ -546,10 +829,10 @@ uint16_t SpiSendReceive(uint16_t sData) return rData; } +#endif - -//SPI3 +#if(USE_SPI3 == 1) static void Spi3_Config(void) { stc_spi_init_t stcSpiInit; @@ -674,9 +957,10 @@ uint8_t Spi3_RWByte(M4_SPI_TypeDef *SPIx, uint8_t u8Data) } return SPIx->DR; } +#endif - +#if(USE_RTC == 1) /***************************************************************************************** * : Rtc_Config * : RTC @@ -805,7 +1089,8 @@ void TimeSync(time_t ts) DBG_LOG("TimeSync = %d-%d-%d %d:%d:%d\n", RtcDateTime.u8Year, RtcDateTime.u8Month, \ RtcDateTime.u8Day, RtcDateTime.u8Hour, RtcDateTime.u8Minute, RtcDateTime.u8Second); } - +#endif +#if(USE_AD == 1) /***************************************************************************************** * : AdcInitConfig * : ADCʼ @@ -957,7 +1242,8 @@ static void AdcDmaConfig(void) PWC_Fcg0PeriphClockCmd(PWC_FCG0_PERIPH_AOS, Enable); DMA_SetTriggerSrc(M4_DMA1, DmaCh0, EVT_ADC1_EOCA); } - +#endif +#if(USE_DMA == 1) /***************************************************************************************** * : DmaIrqRegister * : DMAжϼĴ @@ -1012,7 +1298,7 @@ static void Dma_Config(void) AdcDmaConfig(); DmaIrqConfig(); } - +#endif /***************************************************************************************** * : ReadAdcValue * : ȡADֵ @@ -1053,26 +1339,32 @@ void ReadAdcValue(uint16_t *ADValue) void BSP_Init(void) { + stc_clk_freq_t Freq; SystemClockConfig(); SystemCoreClockUpdate(); - Xtal32_ClockConfig(); + //Xtal32_ClockConfig(); GPIO_Config(); + ExtiCh10_Init(); + ExtiCh01_Init(); + ExtiCh06_Init(); + ExtiCh04_Init(); + DbgUart_Config(500000); - RS485Uart_Config(9600); - Rtc_Config(); -// SdioInit(); + //RS485Uart_Config(9600); + + //Rtc_Config(); + //SdioInit(); //Spi_Config(); - Spi3_Config(); + // Spi3_Config(); - Adc1_Config(); - Dma_Config(); - FeedDog(); - SysTick_Init(1000); + //Adc1_Config(); + //Dma_Config(); + //FeedDog(); + SysTick_Init(1000u); SysTick_Delay(1000); CLK_GetClockFreq(&Freq); - TimeSync(1705578500); - DBG_LOG("SysFreq = %d\r\n", Freq.sysclkFreq); + //DBG_LOG("SysFreq = %d\r\n", Freq.sysclkFreq); } /***************************************************************************************** @@ -1087,7 +1379,7 @@ void EnterStop(void) stc_port_init_t stcPortInit; uint16_t AnaPin; - PWC_Fcg1PeriphClockCmd(SPI3_UNIT_CLOCK, Disable); + //PWC_Fcg1PeriphClockCmd(SPI3_UNIT_CLOCK, Disable); PWC_Fcg1PeriphClockCmd(DBG_FCG1_PERIPH, Disable); DBGRxWakeupInit(); @@ -1126,12 +1418,12 @@ extern uint8_t BDRxData[256]; *****************************************************************************************/ void Wakeup(void) { - NVIC_DisableIRQ(DBG_RXPIN_IRQn); + NVIC_DisableIRQ(DBG_RX_IRQn); PWC_ClkRecover(); //SystemClockConfig(); - Spi3_Config(); + //Spi3_Config(); DbgUart_Config(5000000); - RS485Uart_Config(9600); + // RS485Uart_Config(9600); //GPIO_Config(); //SysTick_Resume(); SysTick_Init(1000); @@ -1148,12 +1440,10 @@ void Error_Handler(void) - - - - +#if(USE_RS485 == 1) __WEAK void RS485UsartErrIrqCallback(void) { + if(RS485_USART_CH->SR_f.ORE) { RS485_USART_CH->CR1_f.CORE = 1; USART_RecData(RS485_USART_CH); @@ -1164,12 +1454,8 @@ __WEAK void RS485UsartErrIrqCallback(void) if(RS485_USART_CH->SR_f.FE) RS485_USART_CH->CR1_f.CFE = 1; + } - - - - - __WEAK void RS485_RxPinIntCallBack(void) { @@ -1178,6 +1464,7 @@ __WEAK void RS485_RxPinIntCallBack(void) +#endif __WEAK void DBGUsartErrIrqCallback(void) { if(DBG_USART_CH->SR_f.ORE) { diff --git a/Project/HC32F460/source/User/Src/main.c b/Project/HC32F460/source/User/Src/main.c index 7b17b15..caa343e 100644 --- a/Project/HC32F460/source/User/Src/main.c +++ b/Project/HC32F460/source/User/Src/main.c @@ -4,62 +4,435 @@ #include "main.h" #include "Encryption.h" #include "Debug.h" - +#include "Algorithm.h" +#include "CS1237_LEFTUP.h" +#include "CS1237_LEFTLOW.h" +#include "CS1237_RIGHTUP.h" +#include "CS1237_RIGHTLOW.h" #define MAIN_DBG_LOG(...) DBG_LOG(__VA_ARGS__) -#define MAIN_DBG_ARRAY(ARRAY, SIZE) DBG_ARRAY(ARRAY,SIZE) +#define MAIN_DBG_ARRAY(ARRAY, SIZE) DBG_ARRAY(ARRAY,SIZE) -uint8_t TestData[16 * 512]; +#define SOFTWARE_VERSION 10 //汾 +#define HARDWARE_VERSION 20 //Ӳ汾 +AppDetect_t App; - - -void HexToAscii(uint8_t *HexData, char *ASCData, uint8_t sLen) +static void show(uint8_t ch,int32_t ad) { - uint8_t temp; - - for(int i = 0; i < sLen; i++) { - temp = (HexData[i] >> 4) & 0x0f; - if(temp < 10) - temp += '0'; - else - temp = (temp - 10) + 'A'; - - ASCData[i * 2] = temp; - - temp = HexData[i] & 0x0f; - if(temp < 10) - temp += '0'; - else - temp = (temp - 10) + 'A'; - - ASCData[i * 2 + 1] = temp; + uint8_t bao[7]; + bao[0] = 0x5A; + bao[1] = ch; + bao[2] = ad & 0xFF; + bao[3] = ad >> 8 & 0xFF; + bao[4] = ad >> 16 & 0xFF; + bao[5] = ad >> 24 & 0xFF; + bao[6] = 0xA5; + DebugUartSend(bao,7); +} +void LEFTUP_CS1237AinADataProcessCallBack(int32_t AD) +{ + show(1,AD); + for(int i = OSC_CNT-1; i > 0; i--) + { + App.LeftUpCS1237_TrendArray[i] = App.LeftUpCS1237_TrendArray[i - 1]; } - ASCData[sLen * 2] = '\r'; - ASCData[sLen * 2 + 1] = '\n'; - ASCData[sLen * 2 + 2] = 0; + App.LeftUpCS1237_TrendArray[0] = AD; + App.LeftUpCS1237ReadEndFlag = true; } - - - - -void ADC_DMA_CallBack(void) +void LEFTLOW_CS1237AinADataProcessCallBack(int32_t AD) { + show(2,AD); + for(int i = OSC_CNT-1; i > 0; i--) + { + App.LeftLowCS1237_TrendArray[i] = App.LeftLowCS1237_TrendArray[i - 1]; + } + App.LeftLowCS1237_TrendArray[0] = AD; + App.LeftLowCS1237ReadEndFlag = true; +} +void RIGHTUP_CS1237AinADataProcessCallBack(int32_t AD) +{ + show(3,AD); + for(int i = OSC_CNT-1; i > 0; i--) + { + App.RightUpCS1237_TrendArray[i] = App.RightUpCS1237_TrendArray[i - 1]; + } + App.RightUpCS1237_TrendArray[0] = AD; + App.RightUpCS1237ReadEndFlag = true; +} +void RIGHTLOW_CS1237AinADataProcessCallBack(int32_t AD) +{ + show(4,AD); + for(int i = OSC_CNT-1; i > 0; i--) + { + App.RightLowCS1237_TrendArray[i] = App.RightLowCS1237_TrendArray[i - 1]; + } + App.RightLowCS1237_TrendArray[0] = AD; + App.RightLowCS1237ReadEndFlag = true; +} +#if 0 +void SupportControlHandle(int32_t *Ain1_ad, int32_t *Ain2_ad) +{ + int32_t A1_diff[OSC_CNT], A2_diff[OSC_CNT], O1_diff1, O1_diff2, O1_diff3, O2_diff1, O2_diff2, O2_diff3; + O1_diff1 = Ain1_ad[0] - App.ADTrack.Ain1_Org_AdZero; + O1_diff2 = Ain1_ad[1] - App.ADTrack.Ain1_Org_AdZero; + O1_diff3 = Ain1_ad[2] - App.ADTrack.Ain1_Org_AdZero; + O2_diff1 = Ain2_ad[0] - App.ADTrack.Ain2_Org_AdZero; + O2_diff2 = Ain2_ad[1] - App.ADTrack.Ain2_Org_AdZero; + O2_diff3 = Ain2_ad[2] - App.ADTrack.Ain2_Org_AdZero; + for(int i = 0; i < OSC_CNT; i++) + { + A1_diff[i] = Ain1_ad[i] - Ain1_ad[OSC_CNT - 1]; + A2_diff[i] = Ain2_ad[i] - Ain2_ad[OSC_CNT - 1]; + } + TrendResult result_A1 = analyze_trend(A1_diff, OSC_CNT); + TrendResult result_A2 = analyze_trend(A2_diff, OSC_CNT); + + int32_t A1_slope = result_A1.slope; + int32_t A2_slope = result_A2.slope; + //show2(A2_slope); + for(int i = SLOPE_CNT-1; i > 0; i--) + { + App.LeftUpCS1237_SlopeArray[i] = App.LeftUpCS1237_SlopeArray[i - 1]; + App.LeftLowCS1237_SlopeArray[i] = App.LeftLowCS1237_SlopeArray[i - 1]; + } + App.LeftUpCS1237_SlopeArray[0] = A1_slope; + App.LeftLowCS1237_SlopeArray[0] = A2_slope; + + PeakValleyCheck result1_K = check_peaks_valleys(App.LeftUpCS1237_SlopeArray, SLOPE_CNT); + PeakValleyCheck result2_K = check_peaks_valleys(App.LeftLowCS1237_SlopeArray, SLOPE_CNT); + + if(App.StopFlag == true) + { + if(App.StopCollDelay1mSCnt <= 0) + { + if(((App.LeftUpCS1237_SlopeArray[0] <= -App.ADTrack.Slope_VPT) + && (App.LeftUpCS1237_SlopeArray[1] <= -App.ADTrack.Slope_VPT) + && (App.LeftUpCS1237_SlopeArray[2] <= -App.ADTrack.Slope_VPT) + && (App.LeftLowCS1237_SlopeArray[0] >= App.ADTrack.Slope_VPT) + && (App.LeftLowCS1237_SlopeArray[1] >= App.ADTrack.Slope_VPT) + && (App.LeftLowCS1237_SlopeArray[2] >= App.ADTrack.Slope_VPT)) + || ((O1_diff1 >= App.ADTrack.Ain1VPT) + && (O1_diff2 >= App.ADTrack.Ain1VPT) + && (O1_diff3 >= App.ADTrack.Ain1VPT) + && (O2_diff1 <= -App.ADTrack.Ain2VPT) + && (O2_diff2 <= -App.ADTrack.Ain2VPT) + && (O2_diff3 <= -App.ADTrack.Ain2VPT))) + { + //BDC_UP(); + App.UpFlag = true; + App.StopFlag = false; + App.DownFlag = false; + } + else if(((App.Ain1_SlopeArray[0] >= App.ADTrack.Slope_VPT) + && (App.Ain1_SlopeArray[1] >= App.ADTrack.Slope_VPT) + && (App.Ain1_SlopeArray[2] >= App.ADTrack.Slope_VPT) + && (App.Ain2_SlopeArray[0] <= -App.ADTrack.Slope_VPT) + && (App.Ain2_SlopeArray[1] <= -App.ADTrack.Slope_VPT) + && (App.Ain2_SlopeArray[2] <= -App.ADTrack.Slope_VPT)) + || ((O1_diff1 <= -App.ADTrack.Ain1VPT) + && (O1_diff2 <= -App.ADTrack.Ain1VPT) + && (O1_diff3 <= -App.ADTrack.Ain1VPT) + && (O2_diff1 >= App.ADTrack.Ain2VPT) + && (O2_diff2 >= App.ADTrack.Ain2VPT) + && (O2_diff3 >= App.ADTrack.Ain2VPT))) + { + //BDC_DOWN(); + App.DownFlag = true; + App.StopFlag = false; + App.UpFlag = false; + } + } + } + else if(App.DownFlag == true) + { + if(A1_slope < -App.ADTrack.Slope_VPT + && A2_slope > App.ADTrack.Slope_VPT) + { + //BDC_STOP(); + App.StopFlag = true; + App.DownFlag = false; + App.UpFlag = false; + App.StopCollDelay1mSCnt = 1000; + } + else if(O1_diff1 > -(App.ADTrack.Ain1VPT / 2) + && O2_diff1 < (App.ADTrack.Ain2VPT / 2)) + { + //BDC_STOP(); + App.StopFlag = true; + App.DownFlag = false; + App.UpFlag = false; + App.StopCollDelay1mSCnt = 1000; + } + } + else if(App.UpFlag == true) + { + if(A1_slope > App.ADTrack.Slope_VPT + && A2_slope < -App.ADTrack.Slope_VPT) + { + //BDC_STOP(); + App.StopFlag = true; + App.DownFlag = false; + App.UpFlag = false; + App.StopCollDelay1mSCnt = 1000; + } + else if(O1_diff1 < (App.ADTrack.Ain1VPT / 2) + && O2_diff1 > -(App.ADTrack.Ain2VPT / 2)) + { + //BDC_STOP(); + App.StopFlag = true; + App.DownFlag = false; + App.UpFlag = false; + App.StopCollDelay1mSCnt = 1000; + } + } + + if (result1_K.peaks_positive + && result1_K.valleys_negative + && A1_diff[0] < App.ADTrack.Slope_VPT / 2 + && A1_diff[0] > -App.ADTrack.Slope_VPT / 2 + && A1_diff[1] < App.ADTrack.Slope_VPT / 2 + && A1_diff[1] > -App.ADTrack.Slope_VPT / 2 + && A1_diff[2] < App.ADTrack.Slope_VPT / 2 + && A1_diff[2] > -App.ADTrack.Slope_VPT / 2 + && result2_K.peaks_positive + && result2_K.valleys_negative + && A2_diff[0] < App.ADTrack.Slope_VPT / 2 + && A2_diff[0] > -App.ADTrack.Slope_VPT / 2 + && A2_diff[1] < App.ADTrack.Slope_VPT / 2 + && A2_diff[1] > -App.ADTrack.Slope_VPT / 2 + && A2_diff[2] < App.ADTrack.Slope_VPT / 2 + && A2_diff[2] > -App.ADTrack.Slope_VPT / 2) + { + if(App.StopFlag == true && App.StopCollDelay1mSCnt <= 0){ + App.ADTrack.Ain1_Org_AdZero = Ain1_ad[0]; + App.ADTrack.Ain2_Org_AdZero = Ain2_ad[0]; + } + else if(App.StopFlag == false) + { + App.EvenRunning = true; + App.EvenRunDelay1mSCnt = 0; + } + } + else + { + App.EvenRunning = false; + App.EvenRunDelay1mSCnt = 0; + } + if(App.EvenRunDelay1mSCnt >= 2000) + { + App.EvenRunning = false; + App.EvenRunDelay1mSCnt = 0; + App.ADTrack.Ain1_Org_AdZero = Ain1_ad[0]; + App.ADTrack.Ain2_Org_AdZero = Ain2_ad[0]; + } +} +#endif +static void AppInit(void) +{ + DBG_LOG("\r\n\r\n"); + DBG_LOG("****************************************************\r\n"); + DBG_LOG("** **\r\n"); + DBG_LOG("** Acc_Support_29V **\r\n"); + DBG_LOG("** SoftWare V:%d.%d **\r\n", SOFTWARE_VERSION / 10, SOFTWARE_VERSION % 10); + DBG_LOG("** HardWare V:%d.%d **\r\n", HARDWARE_VERSION / 10, HARDWARE_VERSION % 10); + DBG_LOG("** Compile: %s %s **\r\n", __DATE__, __TIME__); + DBG_LOG("** **\r\n"); + DBG_LOG("****************************************************\r\n\r\n"); + + //FeedDog(); + LEFTUP_CS1237_Init(); + LEFTLOW_CS1237_Init(); + RIGHTUP_CS1237_Init(); + RIGHTLOW_CS1237_Init(); + + App.Status = APP_STATUS_WAIT; + App.TD1mSDelayCnt = 2000; + App.RStatus = READ_STATUS_START; +} +static void ReadLoopHandler(void) +{ + switch(App.RStatus){ + case READ_STATUS_IDLE:{ + break;} + + case READ_STATUS_START:{ + App.LeftUpCS1237ReadEndFlag = false; + App.LeftLowCS1237ReadEndFlag = false; + App.RightUpCS1237ReadEndFlag = false; + App.RightLowCS1237ReadEndFlag = false; + App.RStatus = READ_STATUS_LEFTUP; + break;} + + case READ_STATUS_LEFTUP:{ + LEFTUP_CS1237Start(); + App.Read1mSDelayCnt = 50; + App.RStatus = READ_STATUS_WAIT_LEFTUP; + break;} + + case READ_STATUS_WAIT_LEFTUP:{ + if(App.Read1mSDelayCnt <= 0) + { + App.RStatus = READ_STATUS_LEFTLOW; + } + else if(App.LeftUpCS1237ReadEndFlag == true) + { + App.RStatus = READ_STATUS_LEFTLOW; + } + break;} + + case READ_STATUS_LEFTLOW:{ + LEFTLOW_CS1237Start(); + App.Read1mSDelayCnt = 50; + App.RStatus = READ_STATUS_WAIT_LEFTLOW; + break;} + + case READ_STATUS_WAIT_LEFTLOW:{ + if(App.Read1mSDelayCnt <= 0) + { + App.RStatus = READ_STATUS_RIGHTUP; + } + else if(App.LeftLowCS1237ReadEndFlag == true) + { + App.RStatus = READ_STATUS_RIGHTUP; + } + break;} + + case READ_STATUS_RIGHTUP:{ + RIGHTUP_CS1237Start(); + App.Read1mSDelayCnt = 50; + App.RStatus = READ_STATUS_WAIT_RIGHTUP; + break;} + + case READ_STATUS_WAIT_RIGHTUP:{ + if(App.Read1mSDelayCnt <= 0) + { + App.RStatus = READ_STATUS_RIGHTLOW; + } + else if(App.RightUpCS1237ReadEndFlag == true) + { + App.RStatus = READ_STATUS_RIGHTLOW; + } + break;} + + case READ_STATUS_RIGHTLOW:{ + RIGHTLOW_CS1237Start(); + App.Read1mSDelayCnt = 50; + App.RStatus = READ_STATUS_WAIT_RIGHTLOW; + break;} + + case READ_STATUS_WAIT_RIGHTLOW:{ + if(App.Read1mSDelayCnt <= 0) + { + App.RStatus = READ_STATUS_SUPPORT_CONT; + } + else if(App.RightLowCS1237ReadEndFlag == true) + { + App.RStatus = READ_STATUS_SUPPORT_CONT; + } + break;} + + case READ_STATUS_SUPPORT_CONT:{ + if(App.LeftUpCS1237ReadEndFlag == true && + App.LeftLowCS1237ReadEndFlag == true && + App.RightUpCS1237ReadEndFlag == true && + App.RightLowCS1237ReadEndFlag == true) + { + App.LeftUpCS1237ReadEndFlag = false; + App.LeftUpCS1237ReadEndFlag = false; + App.RightUpCS1237ReadEndFlag = false; + App.RightLowCS1237ReadEndFlag = false; + //SupportControlHandle(App.Ain1_TrendArray, App.Ain2_TrendArray); + } + App.RStatus = READ_STATUS_START; + break;} + } } +static void AppLoopHandler(void) +{ + switch(App.Status) { + case APP_STATUS_IDLE:{ + break;} + + case APP_STATUS_ON:{ + App.Status = APP_STATUS_IDLE; + break;} + + case APP_STATUS_OFF:{ + + App.Status = APP_STATUS_IDLE; + break;} + + case APP_STATUS_WAIT:{ + if(App.TD1mSDelayCnt <= 0) + { + App.UpFlag = false; + App.DownFlag = false; + App.StopFlag = true; + App.EvenRunning = false; + + App.ADTrack.Slope_VPT = 1000; + App.ADTrack.LeftUpVPT = 20000; + App.ADTrack.LeftLowVPT = 20000; + App.ADTrack.RightUpVPT = 20000; + App.ADTrack.RightLowVPT = 20000; + + App.ADTrack.LeftUp_Org_AdZero = App.LeftUpCS1237_TrendArray[0]; + App.ADTrack.LeftLow_Org_AdZero = App.LeftLowCS1237_TrendArray[0]; + App.ADTrack.RightUp_Org_AdZero = App.RightUpCS1237_TrendArray[0]; + App.ADTrack.RightLow_Org_AdZero = App.RightLowCS1237_TrendArray[0]; + DBG_LOG("Frist Pack Data LeftUp Zero AD: %08d\tLeftUp Zero AD: %08d\tRightUp Zero AD: %08d\tRightLow Zero AD: %08d\r\n", + App.ADTrack.LeftUp_Org_AdZero, + App.ADTrack.LeftLow_Org_AdZero, + App.ADTrack.RightUp_Org_AdZero, + App.ADTrack.RightLow_Org_AdZero); + App.Status = APP_STATUS_IDLE; + } + break;} + } +} +static void App1mSRoutine(void) +{ + if(App.TD1mSDelayCnt > 0) + App.TD1mSDelayCnt--; + if(App.Read1mSDelayCnt > 0) + App.Read1mSDelayCnt--; + if(App.Uart1Delay1mSCnt > 0) + App.Uart1Delay1mSCnt--; + if(App.StopCollDelay1mSCnt > 0) + App.StopCollDelay1mSCnt--; + + if(App.EvenRunning == true) + App.EvenRunDelay1mSCnt++; - - - + App.FeedDogDlyCnt++; +} +void FeedDogHandler(void) +{ + if(App.FeedDogDlyCnt >= 200) { + FeedDog(); + App.FeedDogDlyCnt = 0; + } +} int main(void) { BSP_Init(); - DBG_LOG("**********************************************\r\n"); - DBG_LOG("* Ver 1.0 2024-01-15 *\r\n"); - DBG_LOG("**********************************************\r\n"); + AppInit(); while(1) { +#if(USE_WDT == 1) + FeedDogHandler(); +#endif +#if(USE_DEBUG == 1) DebugLoopHandler(); +#endif + LEFTUP_CS1237DataLoopCollect(); + LEFTLOW_CS1237DataLoopCollect(); + RIGHTUP_CS1237DataLoopCollect(); + RIGHTLOW_CS1237DataLoopCollect(); + ReadLoopHandler(); + AppLoopHandler(); } } @@ -72,7 +445,12 @@ int main(void) void SysTick_IrqHandler(void) { SysTick_IncTick(); + App1mSRoutine(); Dbg1msRoutine(); + LEFTUP_CS12371mSRoutine(); + LEFTLOW_CS12371mSRoutine(); + RIGHTUP_CS12371mSRoutine(); + RIGHTLOW_CS12371mSRoutine(); } /***************************************************************************************** @@ -93,4 +471,7 @@ void RtcPeriod_IrqCallback(void) //PORT_Toggle(LED_Green_PORT, LED_Green_PIN); } +void ADC_DMA_CallBack(void) +{ +} diff --git a/driver/inc/hc32f460_gpio.h b/driver/inc/hc32f460_gpio.h index b553de1..c62dc29 100644 --- a/driver/inc/hc32f460_gpio.h +++ b/driver/inc/hc32f460_gpio.h @@ -272,6 +272,7 @@ extern en_flag_status_t PORT_GetBit(en_port_t enPort, en_pin_t enPin); extern en_result_t PORT_SetPortData(en_port_t enPort, uint16_t u16Pin); extern en_result_t PORT_ResetPortData(en_port_t enPort, uint16_t u16Pin); extern en_result_t PORT_OE(en_port_t enPort, uint16_t u16Pin, en_functional_state_t enNewState); +extern en_result_t PORT_PIDR(en_port_t enPort, uint16_t u16Pin, en_functional_state_t enNewState); extern en_result_t PORT_SetBits(en_port_t enPort, uint16_t u16Pin); extern en_result_t PORT_ResetBits(en_port_t enPort, uint16_t u16Pin); extern en_result_t PORT_Toggle(en_port_t enPort, uint16_t u16Pin); diff --git a/driver/inc/hc32f460_icg.h b/driver/inc/hc32f460_icg.h index 2497bef..0dbae24 100644 --- a/driver/inc/hc32f460_icg.h +++ b/driver/inc/hc32f460_icg.h @@ -258,7 +258,7 @@ extern "C" ** \brief SWDT hardware start configuration ******************************************************************************/ /*!< Enable or disable SWDT hardware start */ -#if (USE_DEBUG == 1) +#if (USE_WDT == 1) #define ICG0_SWDT_HARDWARE_START (ICG_FUNCTION_ON) #else #define ICG0_SWDT_HARDWARE_START (ICG_FUNCTION_OFF) diff --git a/driver/src/hc32f460_gpio.c b/driver/src/hc32f460_gpio.c index 16b8656..93020fc 100644 --- a/driver/src/hc32f460_gpio.c +++ b/driver/src/hc32f460_gpio.c @@ -483,7 +483,6 @@ en_result_t PORT_OE(en_port_t enPort, uint16_t u16Pin, en_functional_state_t enN return Ok; } - /** ******************************************************************************* ** \brief Set Port Pin @@ -507,7 +506,6 @@ en_result_t PORT_SetBits(en_port_t enPort, uint16_t u16Pin) return Ok; } - /** ******************************************************************************* ** \brief Reset Port Pin diff --git a/mcu/common/hc32_common.h b/mcu/common/hc32_common.h index f8424c8..b7d667e 100644 --- a/mcu/common/hc32_common.h +++ b/mcu/common/hc32_common.h @@ -139,7 +139,7 @@ typedef enum en_result #define __UNUSED __attribute__((unused)) #endif /* __UNUSED */ #ifndef __RAM_FUNC - #define __RAM_FUNC __attribute__((long_call, section(".ramfunc"))) + #define __RAM_FUNC __attribute__((section(".ramfunc"))) /* Usage: void __RAM_FUNC foo(void) */ #endif /* __RAM_FUNC */ #elif defined (__ICCARM__) ///< IAR Compiler