|
|
@@ -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();
|
|
|
}
|