Browse Source

1. 修改通讯为4G通讯, 调整包括设置电源在内的通讯代码,增加一些针对4G通讯的子函数. 频段设置到B5(850Mhz). tcp能正常上报数据
2. 超声波采集目前是0.5秒中断一次,待完善和修改.

wxl 4 ngày trước cách đây
mục cha
commit
072e6f587e

+ 3 - 3
Drivers/Board/board.h

@@ -37,7 +37,7 @@
 //  #define DEBUG_LOG_WARM
 //  #define DEBUG_PARAM
 //  #define DEBUG_PATCH
-//  #define DEBUG_NB
+  #define DEBUG_NB
 //   #define DEBUG_BILL2
 //   #define DEBUG_BILL
 //   add by yuewei 20260305 end
@@ -311,7 +311,7 @@ typedef void (*McuFlash_WordPP_fpt)(uint32_t addr, uint32_t data);
     extern void debug_uart_init(void);
 
     // lpuart0_drv.c
-    extern void lpuart0_drv_init(void);
+    extern void lpuart0_drv_init(uint8_t baud);
     extern void lpuart0_tx_str(char *str);
     extern void lpuart0_set_rx_itf(uart_rx_itf itf);
 
@@ -323,7 +323,7 @@ typedef void (*McuFlash_WordPP_fpt)(uint32_t addr, uint32_t data);
 #define NB_EN_GPIO_PORT GpioPortF
 #define NB_EN_GPIO_BITMASK GpioBitMsk0
 
-    extern void nb_power_on(void);
+    extern void nb_power_on(uint8_t baud);
     extern void nb_power_off(void);
 
 #define LOW_PWR_THRESHOLD (3200)

+ 10 - 4
Drivers/Board/lpuart0_drv.c

@@ -1,6 +1,6 @@
 #include "board.h"
 
-void lpuart0_drv_init(void)
+void lpuart0_drv_init(uint8_t baud)
 {
     // LPUART0_RX: PD09(AF1)
     GpioInit(PD09_LPUART0_RXD, GPIO_DIG_IN_PULLUP_NONEDOWN);
@@ -12,7 +12,7 @@ void lpuart0_drv_init(void)
                       (0<<16) |     // DMARXEN, RX DMAC handshake 0:close; 1:open;
                       (0<<14) |     // STOPBIT, Stop bit length, 0:1-bit; 1:1.5-bits; 2:2-bits; 3:RSV
                       (0<<13) |     // PEIE, Parity error interrupt 0:close; 1:open;
-                      (0<<11) |     // SCLKSEL, 0,1:PCLK; 2:XTL; 3:RCL;
+                      (baud<<11) |     // SCLKSEL, 0,1:PCLK; 2:XTL; 3:RCL;
                       (2<<9)  |     // OVER, 0:16x-sample; 1:8x-sample; 2:4x-sample; 
                       (0<<8)  |     // TXEIE, TX empty interrupt 0:close; 1:open;
                       (1<<6)  |     // SM, 0:mode0; 1:mode1; 2:mode2; 3:mode3;
@@ -21,8 +21,14 @@ void lpuart0_drv_init(void)
                       (1<<0);       // RCIE, Rx completed interrupt 0:close; 1:open; 
 
     // BaudRate = fSCLK/(OVER*SCNT) = 16MHz/(4*35) = 114286 baud (-0.79%).
-    M0P_LPUART0->SCNT = 35;
-
+    if (baud == 3)
+    {
+        M0P_LPUART0->SCNT = 1; // 9600
+    }
+    else
+    {
+        M0P_LPUART0->SCNT = 35; // 115200
+    }
     // enable interrupt at NVIC side
     IRQMutEnable(LPUART0_IRQn, NVIC_PRIO_3);
 //    IRQMutEnable(LPUART1_IRQn, NVIC_PRIO_0);

+ 6 - 5
Drivers/Board/nb_drv.c

@@ -1,11 +1,12 @@
 #include "board.h"
 
-void nb_power_on(void)
+void nb_power_on(uint8_t baud)
 {
-    lpuart0_drv_init(); // nb uart 
-    
-    GpioInit(NB_EN_PIN_FUNC, GPIO_DIG_OUT_WEAK_PUSH_NONEUP_NONEDOWN);
-    GpioSetPins(NB_EN_GPIO_PORT, NB_EN_GPIO_BITMASK);
+    lpuart0_drv_init(baud); // nb uart 
+    if(baud==0)
+    {GpioInit(NB_EN_PIN_FUNC, GPIO_DIG_OUT_WEAK_PUSH_NONEUP_NONEDOWN);
+     GpioSetPins(NB_EN_GPIO_PORT, NB_EN_GPIO_BITMASK);
+		}
 }
 
 void nb_power_off(void)

+ 50 - 0
Middlewares/Common/prj_com.c

@@ -468,6 +468,56 @@ void time_add_secs(tm_t *dest, tm_t *src, uint32_t secs) {
         }
     }
 }
+void time_sub_secs(tm_t *dest, tm_t *src, uint32_t secs) {
+    uint16_t days;
+    uint32_t date;
+    uint16_t i;
+
+    memcpy(dest, src, sizeof(tm_t));
+    
+    // 处理减去秒数发生借位的情况
+    if (dest->sec < secs) {
+        uint32_t borrow_secs = secs - dest->sec;
+        dest->sec = 60 - (borrow_secs % 60);
+        uint32_t borrow_mins = borrow_secs / 60;
+        if (borrow_secs % 60 != 0) {
+            borrow_mins++;
+        }
+
+        if (dest->min < borrow_mins) {
+            uint32_t borrow_mins_actual = borrow_mins - dest->min;
+            dest->min = 60 - (borrow_mins_actual % 60);
+            uint32_t borrow_hours = borrow_mins_actual / 60;
+            if (borrow_mins_actual % 60 != 0) {
+                borrow_hours++;
+            }
+
+            if (dest->hour < borrow_hours) {
+                uint32_t borrow_hours_actual = borrow_hours - dest->hour;
+                dest->hour = 24 - (borrow_hours_actual % 24);
+                days = borrow_hours_actual / 24;
+                if (borrow_hours_actual % 24 != 0) {
+                    days++;
+                }
+
+                date = (dest->year << 16) | (dest->month << 8) | dest->day;
+                for (i = 0; i < days; i++) {
+                    date = prev_day(date);
+                }
+
+                dest->year  = (uint8_t)(date >> 16);
+                dest->month = (uint8_t)(date >> 8);
+                dest->day   = (uint8_t)date;
+            } else {
+                dest->hour -= borrow_hours;
+            }
+        } else {
+            dest->min -= borrow_mins;
+        }
+    } else {
+        dest->sec -= secs;
+    }
+}
 
 uint8_t check_sum(volatile uint8_t *data, uint16_t len) {
     uint8_t  sum = 0;

+ 1 - 1
Middlewares/Common/prj_com.h

@@ -61,7 +61,7 @@ extern uint32_t prev_month(uint32_t date);
 extern uint32_t prev_day(uint32_t date);
 
 extern void time_add_secs(tm_t *dest, tm_t *src, uint32_t secs);
-
+extern void time_sub_secs(tm_t *dest, tm_t *src, uint32_t secs);
 extern uint8_t check_sum(volatile uint8_t *data, uint16_t len);
 extern uint16_t check_sum_2_byte(volatile uint8_t *data, uint16_t len);//add by yuewei 20260304
 extern uint16_t crc16_modbus(volatile uint8_t *data, uint16_t length);//add by yuewei 20260317

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 143 - 898
Users/app_nb/app_nb.c


+ 12 - 6
Users/app_nb/app_nb.h

@@ -14,7 +14,7 @@ extern "C"
 
 #define NB_REC_DELAY_TICK 100 // 等待接收时间节拍 100ms
 
-#define MB_MAX_RETRY_GATT_QUERY_TIME 2
+#define MB_MAX_RETRY_GATT_QUERY_TIME 4
 #define QUERY_RETRY_TIME 90
 
 #define NB_FLAG_ARG_VLD (0x0001u)
@@ -33,7 +33,7 @@ extern "C"
 #define NB_CGATT_ACK NB_AT_ACK // AT+CGATT? rsp: +CGATT:1\r\nOK
 
 #define NB_CGATT_QUERY "AT+CGATT?\r\n"
-#define NB_CGATT_QUERY_ACK "+CGATT:1" // AT+CGATT? rsp: +CGATT:1\r\nOK
+#define NB_CGATT_QUERY_ACK "+CGATT: 1" // AT+CGATT? rsp: +CGATT:1\r\nOK
 
 #define NB_CFUN_QUERY "AT+CFUN?\r\n"
 #define NB_CFUN0 "AT+CFUN=0\r\n"
@@ -54,8 +54,8 @@ extern "C"
 
 #define NB_CIMI "AT+CIMI\r\n" // AT+CIMI rsp: 460113030153660 \r\nOK
 
-#define NB_NCCID "AT+QCCID\r\n"
-#define NB_NCCID_ACK "+QCCID:" //+NCCID:89861124205002135676 \r\n OK
+#define NB_NCCID "AT+QCCID\r\n" // different from bc28 AT+NCCID
+#define NB_NCCID_ACK "+QCCID:"  //+QCCID:89861124205002135676 \r\n OK
 
 #define NB_NUESTATS "AT+NUESTATS=CELL\r\n"
 #define NB_NUESTATS_ACK "NUESTATS:CELL" // NUESTATS:CELL,2504,331,1,-550,-47,-503,186 \r\nOK
@@ -97,8 +97,7 @@ extern "C"
 #define NB_QLINIT "AT+QLINIT=1\r\n"
 
 #define NB_QLWEVTIND_SET "AT+QLWEVTIND=1,255\r\n" // 查询当前注册状态
-  // #define NB_CHECK_REG_ACK	"+NMSTATUS:1" //返回注册状态关键字,第1个字段==1表示注册成功
-
+  // #define NB_CHECK
 #define NB_UPLOAD_MANUAL 0x01
 #define NB_UPLOAD_TIMER 0x02
 #define NB_UPLOAD_REPT 0x04       // 1小时补报
@@ -268,6 +267,7 @@ extern "C"
     uint8_t rept_runflag; // 重复上报标志
     tm_t rept_time;       // 重复上报时间
     // HOUR_REC_UPLOAD_DEF hour_up;
+    uint8_t rept_addr;
   } UPLOAD_DEF;
 
 #pragma pack(1)
@@ -369,6 +369,12 @@ extern "C"
   // #ifdef DEBUG_LOG_WARM
   extern void Debug_log(void);
 	extern uint8_t memstr_exist(uint8_t *, size_t, const char *, size_t);
+	  extern int8_t get_code(uint8_t *buf, const char *keyword, uint16_t dat_len, int16_t *ret);
+  extern void save_datetime_from_at(uint8_t *buf, uint16_t dat_len);
+  extern uint8_t get_nb_signal(uint8_t *buf, uint16_t dat_len);
+  extern uint8_t check_sub_service_flag(void);
+  extern uint8_t check_main_service_flag(void);
+	extern int8_t at_cmd_send2(uint8_t stat, char *cmd_str, char *ack1, char *ack2, uint16_t retry_time, uint8_t time_out);
 // #endif
 #ifdef __cplusplus
 }

+ 8 - 1
Users/bill/bill.h

@@ -148,7 +148,14 @@ extern "C"
 
         double flow_rate;
     } bill_run_t;
-
+#define BIT0 1
+#define BIT1 2
+#define BIT2 4
+#define BIT3 8
+#define BIT4 0x10
+#define BIT5 0x20
+#define BIT6 0x40
+#define BIT7 0x80
     /////////////////////ÔÚ³õʼ»¯Öе÷ÓÃ//////////////////////
     extern void bill_init(void);
     extern void app_bill_run(void);

+ 11 - 5
Users/lcd/lcd_ghg102.c

@@ -506,7 +506,13 @@ void lcd_low_power(void)
         DispMem_Status &= ~LCD_STATUS_LOWPWR;
     }
 }
+#define RSRP_LEVEL1 -140
+#define RSRP_LEVEL2 -115
+#define RSRP_LEVEL3 -105
+#define RSRP_LEVEL4 -95
+#define RSRP_LEVEL5 -85
 
+const int16_t rsrp_level[5] = {RSRP_LEVEL1, RSRP_LEVEL2, RSRP_LEVEL3, RSRP_LEVEL4, RSRP_LEVEL5};
 void lcd_nb_sign(void)
 {
     Nb_Run_t *nb_run;
@@ -517,27 +523,27 @@ void lcd_nb_sign(void)
         return;
     }
 
-    if (nb_run->rsrp >= -105)
+    if (nb_run->rsrp >= RSRP_LEVEL1)
     {
         DispMem_Status |= LCD_STATUS_BAR1;
     }
 
-    if (nb_run->rsrp >= -95)
+    if (nb_run->rsrp >= RSRP_LEVEL2)
     {
         DispMem_Status |= LCD_STATUS_BAR2;
     }
 
-    if (nb_run->rsrp >= -85)
+    if (nb_run->rsrp >= RSRP_LEVEL3)
     {
         DispMem_Status |= LCD_STATUS_BAR3;
     }
 
-    if (nb_run->rsrp >= -75)
+    if (nb_run->rsrp >= RSRP_LEVEL4)
     {
         DispMem_Status |= LCD_STATUS_BAR4;
     }
 
-    if (nb_run->rsrp >= -65)
+    if (nb_run->rsrp >= RSRP_LEVEL5)
     {
         DispMem_Status |= LCD_STATUS_BAR5;
     }

+ 7 - 5
Users/main.c

@@ -355,6 +355,7 @@ static void tdc_business_thread(void *parameter)
 
             tof_isr_convert_tof_to_flow();
         }
+				TdcIntStep=0xff;
         if (TdcIntStep == 0xff)
         {
 // cnt=SYS_MS_CNT;
@@ -363,10 +364,11 @@ static void tdc_business_thread(void *parameter)
             // rt_thread_mdelay(15);
             rtc_run_t *rr;
             get_rtc_run(&rr);
+					#ifdef DEBUG_TDC
             LOG("Diff=%.6f, AvgDiff=%.6f, T=%.6f, vol=%.6f\n", SerPlot.f.Data[0], SerPlot.f.Data[3], WaterPrmt[0], FlowVol * 0.000001f * 3600);
             // LOG("diff=%.6f, U=%.6f, D=%.6f\n", SerPlot.f.Data[0], SerPlot.f.Data[1], SerPlot.f.Data[2]);
             rt_thread_mdelay(4);
-
+#endif
 #endif
             G_TDC_DEEP_SLEEP = 1;
             // rt_thread_mdelay(10);
@@ -537,9 +539,9 @@ int32_t main(void)
     HardwareIdInit(); // 初始化硬件ID接口
     ButtonInit();     // 初始化磁组按键
     tdc_tof_init();   // ms1030 spi驱动
-    nb_power_on();
+    //nb_power_on();
     finsh_drv_init();   // 红外串口初始化波特率2400、8位数据、1位停止位、even偶校验
-    lpuart0_drv_init(); // NB串口初始化波特率9600、8位数据、1位停止位、none校验
+    lpuart0_drv_init(0); // NB串口初始化波特率9600、8位数据、1位停止位、none校验
     nb_run_init();      // NB运行数据初始化
     McuFlash_init();    // FLASH读写初始化
 
@@ -604,8 +606,8 @@ int32_t main(void)
     ///////////////////////////////
 
     rtc_thread_create();      // 创建RTC线程
-    //tdc_thread_create();      // 创建TDC线程
-//    nb_thread_create();       // 创建NB线程
+    tdc_thread_create();      // 创建TDC线程
+    nb_thread_create();       // 创建NB线程
     lcd_thread_create();      // 创建LCD线程
     Key_press_timer_create(); // 创建按键时长检测定时器
 

+ 15 - 1
Users/param/param.c

@@ -1471,7 +1471,19 @@ int8_t set_skew_para(SKEW_PARA_DEF *skew_para)
 	}
 	return (ret == 0 ? 0 : -1);
 }
-
+////////////////////////////设置nb已选择频段标志/////////////////////////////////
+int8_t set_nb_band(void)
+{
+	uint8_t flag = 0, ret = 0;
+	uint8_t dat=0;
+	// 判断数据是否在正常范围内
+	ret = set_para_if_nessary(&dat, &Paramx.nb_band_flag, 1, &flag); // 参数整体保存
+	if (flag == 1)
+	{ // 保存crc校验
+		ret |= set_crc_check_para();
+	}
+	return (ret == 0 ?: -1);
+}
 ////////////////////////////读取自动匹配电平参数/////////////////////////////////////////////
 // 参数指针保存比较器和比较器门槛宽度数据
 // 返回1读取成功
@@ -1513,9 +1525,11 @@ uint16_t pack_crc_check(uint16_t prev_data, uint8_t *data, uint16_t len)
 	return crc;
 }
 ///////////////////1秒一次运行的一些零星任务//////////////////////
+uint8_t rtc_1s_flag;
 void run_clk_task_handler(void)
 {
 	check_rewrite_para(); // 相关参数判断,不合法的重写eeprom
+	rtc_1s_flag=1;
 }
 //////////////////////////////////////
 ///////////检查是否是新app第一次运行,如果是,则更新flash中的运行信息//////////////////

+ 2 - 0
Users/param/param.h

@@ -139,6 +139,7 @@ typedef struct
 	uint16_t b; // nʼ¶¯Öµ
 	uint16_t q; // qÖµ
 	uint16_t r; // Á¿³Ì±È
+		uint8_t nb_band_flag;
 } Param_t;
 
 typedef struct
@@ -349,6 +350,7 @@ extern const char SOFT_VER[5];
 extern uint8_t rewrite_para_flag;
 extern void check_rewrite_para(void);
 extern void run_clk_task_handler(void);
+extern int8_t set_nb_band(void);
 // extern Quad_Cell_t Quad_Cell_Ary[];
 
 #endif

+ 3 - 1
Users/rtc_isr.c

@@ -218,7 +218,9 @@ void rtc_interrupt_deal_tdc(void)
 
             TdcIntStep = 0;
             Tu32 = (RTC_CntInt&0x00000001u) ? TDC_CFG_FIRE_DOWN : TDC_CFG_FIRE_UP;
-//            tdc_start_tof(TDC_CFG_DO_CKENA | TDC_CFG_DO_CKDIS | TDC_CFG_DO_WREG | Tu32);
+            tdc_start_tof(TDC_CFG_DO_CKENA | TDC_CFG_DO_CKDIS | TDC_CFG_DO_WREG | Tu32);
+						
+						
             //LOG("---------------------------------2\n");
         }
 }

+ 136 - 99
Users/tdc_tof/tdc_ms1030.c

@@ -1,70 +1,114 @@
  
 #include "board.h"
 #include "tdc_tof.h"
-
-#define DFLT_WREG0   ((12u<<25) | \
-                      ( 3u<<19) | \
-                      ( 0u<<17) | \
-                      ( 2u<<14) | \
-                      ( 0u<<13) | \
-                      ( 0u<<12) | \
-                      ( 8u<< 8) | \
-                      ( 3u<< 2) | \
-                      ( 0u<< 0)) 
-
-#define DFLT_WREG1   (( 1u<<31) | \
-                      ( 0u<<30) | \
-                      ( 1u<<29) | \
-                      ( 0u<<28) | \
-                      ( 0u<< 0))
-
-#define DFLT_WREG2   (( 0u<<30) | \
-                      ( 6u<<24) | \
-                      ( 8u<<18) | \
-                      (10u<<12) | \
-                      (12u<< 6) | \
-                      (14u<< 0))
-                      
-#define DFLT_WREG3   ((16u<<26) | \
-                      (18u<<20) | \
-                      (20u<<14))
-                      
-#define DFLT_WREG4   (( 0u<<28) | \
-                      ( 0u<<27) | \
-                      ( 1u<<26) | \
-                      ( 1u<<25) | \
-                      ( 0u<<24) | \
-                      ( 1u<<23) | \
-                      ( 0u<<22) | \
-                      ( 1u<<21) | \
-                      ( 0u<<17) | \
-                      ( 1u<<16) | \
-                      ( 1u<<15) | \
-                      ( 0u<<11) | \
-                      ( 1u<<10) | \
-                      ( 0u<<9)  | \
-                      ( 1u<< 8) | \
-                      ( 0u<<7) | \
-                      ( 1u<<6) )
-                      
-                      
-#define DFLT_WREG5   (( 0u<<20) | \
-                      ( 0u<<16) | \
-                      ( 1u<<15) | \
-                      ( 1u<<6)  | \
-                      ( 0u<<0) )
-                      
-#define DFLT_WREG6   (( 0u<<12) | \
-                      ( 0u<<8)  | \
-                      ( 1u<<7)  | \
-                      ( 1u<<6)  | \
-                      ( 0u<<5)  | \
-                      ( 0u<<4)  | \
-                      ( 0u<<3)  | \
-                      ( 0u<<2)  | \
-                      ( 0u<<0)) 
-                      
-                      
+#define ANZ_FIRE 		24u	//fire发送脉冲数
+#define DIV_FIRE 		3u	//内部时钟产生脉冲的分频
+#define DIV_CLKHS 	0u	//高速时钟分频
+#define START_CLKHS 2u	//高速启动后测量前晶振启动间隔时间
+#define NEG_START  	0u	//start通道边缘
+#define NEG_STOP		0u	//stop通道边缘
+#define HITIN				9u	//stop预期脉冲数
+#define SEL_TIMO_MB	0u	//暂未确定数值
+#define SEL_TSTO2		3u	//32khz //和MS1030不同
+#define SEL_TSTO1		1u	//start tdc输出 ,暂时
+
+
+#define DFLT_WREG0   ((ANZ_FIRE<<25) | \
+                      ( DIV_FIRE<<19) | \
+                      ( DIV_CLKHS<<17) | \
+                      ( START_CLKHS<<14) | \
+                      ( NEG_START<<13) | \
+                      ( NEG_STOP<<12) | \
+                      ( HITIN<< 8) | \
+                      ( SEL_TSTO2<< 2) | \
+                      ( SEL_TSTO1<< 0)) 
+#define EN_INT_TO 1		//TIMOUT中断触发位
+#define EN_INT_HIT 0	//END HITS中断触发位
+#define EN_INT_ALU 1  //alu中断触发位
+#define RFEDGE 0			//stop通道边沿敏感性
+#define UP_DELVAL1 0	//当EN_FIST_WAVE=1时,为第一波屏蔽窗口 BIT12~27  暂未设置
+#define OFFSET 0			//当en_hc=1时, 62~-64mV   暂未设置
+
+
+#define DFLT_WREG1   (( EN_INT_TO<<31) | \
+                      ( EN_INT_HIT<<30) | \
+                      ( EN_INT_ALU<<29) | \
+                      ( RFEDGE<<28) | \
+                      ( OFFSET<< 0))
+#define EN_FIRST_WAVE	0u	//BIT31, 为1时后面的定义有效
+#define EDGE_FW				0u	//第一波边缘敏感性
+#define DELREL1				6u	//第1个stop接收第几个回波周期
+#define DELREL2				8u	//第2个stop接收第几个回波周期
+#define DELREL3				10u	//第3个stop接收第几个回波周期
+#define DELREL4				12u	//第4个stop接收第几个回波周期
+#define DELREL5				14u	//第5个stop接收第几个回波周期
+
+#define DFLT_WREG2   ((EDGE_FW<<30) | \
+                      (DELREL1<<24) | \
+                      (DELREL2<<18) | \
+                      (DELREL3<<12) | \
+                      (DELREL4<< 6) | \
+                      (DELREL5<< 0))
+											
+#define DELREL6				16u	//第3个stop接收第几个回波周期
+#define DELREL7				18u	//第4个stop接收第几个回波周期
+#define DELREL8				20u	//第5个stop接收第几个回波周期
+//后面几位和MS1030一致
+#define DFLT_WREG3   ((DELREL6<<26) | \
+                      (DELREL7<<20) | \
+                      (DELREL8<<14))
+#define CONF_FIRE				0		//暂时设置为0 bit29~31
+#define PHASE_FIREUP		0
+#define PHASE_FIREDOWN	0
+#define SEL_START_FIRE	1
+#define EN_ANALOG				1
+#define HZ60						0
+#define TCYCLE					1
+#define ANZ_FAKE				0
+#define SEL_ECLK_TMP		1
+#define TW2							3
+#define EN_PEAK					1		//峰值检波使能 1030不同
+#define EN_DISCHARGE		1		//检波放电使能1030不同
+#define CYCLE_TOF				3		//顺流逆流自动检测模式下,顺流逆流测量间隔时间,初步确定为3=20ms 1030不同
+#define EN_ERR_VAL			1
+#define EN_DC						1		//stop端口充电模式 这里设置为直流  1030不同
+#define FIRE0_DEF				1
+#define DOUBLE_RES			0
+#define QUAD_RES				0
+#define DFLT_WREG4   (( PHASE_FIREUP<<28) | \
+                      ( PHASE_FIREDOWN<<27) | \
+                      ( SEL_START_FIRE<<26) | \
+                      ( EN_ANALOG<<25) | \
+                      ( HZ60<<24) | \
+                      ( TCYCLE<<23) | \
+                      ( ANZ_FAKE<<22) | \
+                      ( SEL_ECLK_TMP<<21) | \
+                      ( TW2<<17) | \
+                      ( EN_PEAK<<16) | \
+											( EN_DISCHARGE<<15) | \
+											( CYCLE_TOF<<11) | \
+                      ( EN_ERR_VAL<<10) | \
+											( EN_DC<<9) | \
+											( FIRE0_DEF<<8) | \
+											( DOUBLE_RES<<7) | \
+											( QUAD_RES<<6))
+
+#define CYCLE_AUTOTOF	 (250<<20)		//自动测量循环时间 500ms
+#define ANZ_AUTOTOF  (1<<16)					//循环次数 一直开启
+#define AUTOTOF_MODE (0<<15)					//顺逆顺逆
+#define PHASE_FIRENUM (3<<6)					//插入相位位置
+#define ANZ_PHASE			(8)							//插入周期数
+#define DFLT_WREG5   (CYCLE_AUTOTOF|ANZ_AUTOTOF|AUTOTOF_MODE|PHASE_FIRENUM|ANZ_PHASE)
+
+#define DOWN_DELVAL1  (0<<12)//第一波屏蔽窗口
+#define SEL_SRC_CLK		(0<<7)//使用晶振产生时钟
+#define EN_HC					(1<<6)
+#define CURR32K				(0<<5)
+#define DIS_Vref			(1<<4)
+#define ADJ_LDO_ROUGH	(0<<3)
+#define ADJ_LDO_FINE	(4<<0)	
+
+#define DFLT_WREG6 (DOWN_DELVAL1|SEL_SRC_CLK|EN_HC|CURR32K|DIS_Vref|ADJ_LDO_ROUGH|ADJ_LDO_FINE)
 
 uint16_t tof_state = TOF_ST_INIT;
 uint32_t tof_flag;
@@ -92,21 +136,11 @@ void tdc_tof_init(void)
     tdc_spi_wr_code(0x50);
     us_delay(1000);     // 1000us > specification(500us)
 
-    tdc_spi_wr_d32(0x80, 0x1818886c);
-    tdc_spi_wr_d32(0x81, 0xA00C8005);
-    tdc_spi_wr_d32(0x82, 0x83105187);
-    tdc_spi_wr_d32(0x83, 0x20928400);
-    tdc_spi_wr_d32(0x84, 0x46880540);
-    tdc_spi_wr_d32(0x85, 0x00000000);
-    tdc_spi_wr_d32(0x86, 0x00000000);
-    
-     tdc_spi_wr_code(0x70);
-    uint16_t aa=0;
-    aa=tdc_spi_rd_d16(0xd0);
-
-#if 0    
+    tdc_spi_wr_d32(0x80, DFLT_WREG0);
+    uint32_t reg0=tdc_spi_rd_d32(0xa0);
+		if(reg0==0)return;
     tof_flag = TOF_FLAG_UNALGND_CHOP;
-    if (tdc_spi_rd_d8(0xa0)!=(DFLT_WREG0&0xFFu)){
+    if (tdc_spi_rd_d8(0xd3)!=(DFLT_WREG0&0xFFu)){
         tof_flag |= TOF_FLAG_TDC_FAULT;
     } else {
         // write_reg0
@@ -116,7 +150,7 @@ void tdc_tof_init(void)
 
         // write_reg1
         tdc_spi_wr_d32(0x81, DFLT_WREG1 |
-                            (5760u<< 12)     // DELVAL1=45us, format:16.5, time unit:Tref;
+                            (5760u<< 7)     // DELVAL1=45us, format:16.5, time unit:Tref;
                       );
 
         // write_reg2
@@ -131,6 +165,9 @@ void tdc_tof_init(void)
 
         // write_reg4
         tdc_spi_wr_d32(0x84, DFLT_WREG4);
+				tdc_spi_wr_d32(0x85, DFLT_WREG5);
+				tdc_spi_wr_d32(0x86, DFLT_WREG6);
+				
 
         tdc_spi_wr_code(0x70);
         tdc_spi_wr_code(0x06);
@@ -148,9 +185,9 @@ void tdc_tof_init(void)
 //
 //            tdc_read_tof(TDC_CFG_FIRE_UP);  // read data and clear interrupt
     }
-#endif 
-//DMA_ReqClkOff();
-//PeriClk_MutDisable(PeriClk_Spi1);
+
+    DMA_ReqClkOff();
+    PeriClk_MutDisable(PeriClk_Spi1);
 
     // MS1030 INTN : PD03 falling edge trigger
     GpioInit(PD03_AF0, GPIO_DIG_IN_PULLUP_NONEDOWN);
@@ -173,13 +210,14 @@ void tdc_start_tof(uint32_t cfg)
     if (cfg & TDC_CFG_DO_WREG){
         // write_reg0
         tdc_spi_wr_d32(0x80, DFLT_WREG0 |
-                              ( 1u<< 4)     // SEL_TIMO_MB, 0:64us; 1:128us; 2:256us; ~ 6:4096us;
+                              ( 3u<< 4)     // SEL_TIMO_MB, 0:64us; 1:128us; 2:256us; ~ 6:4096us;
+                                            //modified by yuewei 20260526 1->3, 128us -> 512us, for DN300 almost 240us
                       );
 
         // write_reg1
         // DN15: L/C > (42+21+10*2)*1000/1555=53us
         tdc_spi_wr_d32(0x81, DFLT_WREG1 |
-                            (5760u<< 7)     // DELVAL1=45us, format:16.5, time unit:Tref;
+                            (5760u<< 12)     // DELVAL1=45us, format:16.5, time unit:Tref;//1031 从BIT12开始
 //                            (6400u<< 7)   // DELVAL1=50us, format:16.5, time unit:Tref;
 //                            (7040u<< 7)   // DELVAL1=55us, format:16.5, time unit:Tref;
 //                            (7680u<< 7)   // DELVAL1=60us, format:16.5, time unit:Tref;
@@ -218,8 +256,8 @@ void tdc_start_tof(uint32_t cfg)
     tdc_spi_wr_code(0x01);
 
     if (cfg & TDC_CFG_DO_CKDIS){
-//        DMA_ReqClkOff();
-//        PeriClk_MutDisable(PeriClk_Spi1);
+        DMA_ReqClkOff();
+        PeriClk_MutDisable(PeriClk_Spi1);
     }
 //rt_exit_critical();
 }
@@ -240,8 +278,7 @@ float TdcScale = 0.00381147861f;
 
 uint32_t TdcPT[4];
 float TdcResist = 5000;     // OhmX10
-
-//modified by yuewei 20260529
+//modified by yuewei 20260520
 //float WaterPrmt[2] = {25.0f, 1496.6f};
 float WaterPrmt[2] = {25.0f, 1497.1484f};
 
@@ -291,8 +328,8 @@ void tdc_read_tof(uint32_t cfg)
     }
 
     if (cfg & TDC_CFG_DO_CKDIS){
-//        DMA_ReqClkOff();
-//        PeriClk_MutDisable(PeriClk_Spi1);
+        DMA_ReqClkOff();
+        PeriClk_MutDisable(PeriClk_Spi1);
     }
 }
 
@@ -321,8 +358,8 @@ void tdc_start_cal(uint32_t cfg)
     tdc_spi_wr_code(0x06);
 
     if (cfg & TDC_CFG_DO_CKDIS){
-//        DMA_ReqClkOff();
-//        PeriClk_MutDisable(PeriClk_Spi1);
+        DMA_ReqClkOff();
+        PeriClk_MutDisable(PeriClk_Spi1);
     }
 //rt_exit_critical();
 }
@@ -354,8 +391,8 @@ void tdc_read_cal(uint32_t cfg)
     }
 
     if (cfg & TDC_CFG_DO_CKDIS){
-//        DMA_ReqClkOff();
-//        PeriClk_MutDisable(PeriClk_Spi1);
+        DMA_ReqClkOff();
+        PeriClk_MutDisable(PeriClk_Spi1);
     }
 //rt_exit_critical();
 }
@@ -376,7 +413,7 @@ void tdc_start_temp(uint32_t cfg)
 
         // write_reg1
         tdc_spi_wr_d32(0x81, DFLT_WREG1 |
-                              ( 0u<< 7)   // DELVAL1=0us, format:16.5, time unit:Tref;
+                              ( 0u<< 12)   // DELVAL1=0us, format:16.5, time unit:Tref;
                       );
 
         // write_reg3
@@ -389,8 +426,8 @@ void tdc_start_temp(uint32_t cfg)
     tdc_spi_wr_code(0x04);
 
     if (cfg & TDC_CFG_DO_CKDIS){
-//        DMA_ReqClkOff();
-//        PeriClk_MutDisable(PeriClk_Spi1);
+        DMA_ReqClkOff();
+        PeriClk_MutDisable(PeriClk_Spi1);
     }
 //rt_exit_critical();
 }
@@ -420,8 +457,8 @@ void tdc_read_temp(uint32_t cfg)
     }
 		//LOG("----------T=%.6f,C=%.6f\n",WaterPrmt[0],WaterPrmt[1]);
     if (cfg & TDC_CFG_DO_CKDIS){
-//        DMA_ReqClkOff();
-//        PeriClk_MutDisable(PeriClk_Spi1);
+        DMA_ReqClkOff();
+        PeriClk_MutDisable(PeriClk_Spi1);
     }
 //rt_exit_critical();
 }

+ 3 - 2
Users/tdc_tof/tof_isr.c

@@ -234,7 +234,7 @@ void tof_isr_convert_tof_to_flow(void)
     float TmpFloat;
     uint32_t Tu32;
     uint32_t ch = get_mux_ch();
-
+/*
     switch (TdcIntStep)
     {
     case (0x00u):
@@ -477,7 +477,8 @@ void tof_isr_convert_tof_to_flow(void)
 
     case (0x80u):
         TdcIntStep = 0xFFu;
-    }
+    }*/
+		TdcIntStep = 0xFFu;
 }
 uint8_t temp_flag=0;
 void PORTD_F_IRQHandler(void)

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác