From a6e5c60a9ec30574bf7c3d584046444b15f8680f Mon Sep 17 00:00:00 2001
From: zhyinch <zhyinch@gmail.com>
Date: 星期四, 10 二月 2022 16:29:20 +0800
Subject: [PATCH] V1.61 修改成中断模式,测试不丢包。

---
 源码/核心板/Src/application/dw_app.c |   51 +++++++++++++++++++++++++++++++++++----------------
 1 files changed, 35 insertions(+), 16 deletions(-)

diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
index 8a69306..5b14703 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
@@ -9,7 +9,7 @@
 	NEARPOLL,
 }tag_state=NEARPOLL;
 static dwt_config_t config = {
-	5,               /* Channel number. */
+	2,               /* Channel number. */
 	DWT_PRF_64M,     /* Pulse repetition frequency. */
 	DWT_PLEN_128,    /* Preamble length. */
 	DWT_PAC8,        /* Preamble acquisition chunk size. Used in RX only. */
@@ -128,7 +128,7 @@
 
     /* Configure DW1000. See NOTE 6 below. */
     dwt_configure(&config);//配置DW1000
-	 //dwt_setinterrupt(DWT_INT_TFRS | DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 1);
+	 dwt_setinterrupt(  DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 1);
  
     /* Apply default antenna delay value. See NOTE 1 below. */
     dwt_setrxantennadelay(RX_ANT_DLY);		//设置接收天线延迟
@@ -182,7 +182,7 @@
 u8 g_start_sync_flag;
 void SyncPoll(u8 sync_seq,uint32_t sync_baseid)
 {u8 result;
-	g_start_sync_flag=1;   //中断模式,退出终端后,需要重新来过
+	//g_start_sync_flag=1;   //中断模式,退出终端后,需要重新来过
 	dwt_forcetrxoff();   	//关闭接收,以防在RX ON 状态
 	
 	
@@ -198,6 +198,10 @@
                 { };
 		}
 			 dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_TXFRS);//清楚标志位
+	//	UART_CheckSend();
+	//dwt_setinterrupt(  DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 1);
+		dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间
+	dwt_rxenable(0);//打开接收
 }
 uint16_t g_Resttimer;
 uint8_t result;
@@ -741,6 +745,10 @@
 	SetNextPollTime(tyncpoll_time);
 	g_start_send_flag = 0;		
 	GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_RESET);	
+	UART_CheckSend();
+	dwt_setinterrupt(  DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 1);
+		dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间
+	dwt_rxenable(0);//打开接收
 }
 
 int8_t correction_time,new_tagid=0;
@@ -870,6 +878,8 @@
  //   min_power =  - 10 * log10((F1 *F1 + F2 * F2 + F3 * F3) / (C *B));
     return min_power;
   }
+u8 testt[100],testt2[100],testt3[100],testt4[100],testt6[100],ti;
+u16 testt5[100];
 u16 smallcar_idlist[10]={0x4052,0x4032,0x4055,0x4034,0x4016,0x4010,0x4036,0x4027,0x4024,0x4047};
 extern u16 dist_threshold;
 u8 misdist_num[TAG_NUM_IN_SYS],seize_anchor,getrange_success=0;
@@ -924,11 +934,11 @@
 			dwt_writetxfctrl(22, 0);//设定发送长度
 			}
 			result = dwt_starttx(DWT_START_TX_DELAYED | DWT_RESPONSE_EXPECTED);//延迟发送,等待接收
-
+testt2[ti]=frame_seq_nb2;
 			
 			if(result==0)
 			{
-				while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_sync_flag)///不断查询芯片状态直到接收成功或者出现错误
+				while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)))///不断查询芯片状态直到接收成功或者出现错误
 			{ };
 		}else{
 			result++;
@@ -936,7 +946,7 @@
 	
 			if (status_reg & SYS_STATUS_RXFCG)//接收成功
 			{
-				
+				testt3[ti]=frame_seq_nb2;
 				dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG | SYS_STATUS_TXFRS);//清楚标志位
 				frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFLEN_MASK;//数据长度
 				dwt_readrxdata(rx_buffer, frame_len, 0);//读取接收数据
@@ -985,7 +995,8 @@
                         }
                     
 					g_flag_Taggetdist[taglist_pos]=0;
-                    
+             testt4[ti]=frame_seq_nb2; 
+							testt5[ti] = hex_dist/10;												
 					if(hex_dist>-100000&&hex_dist<2000000)
 					{
 					if(abs(hex_dist-his_dist[taglist_pos])<dist_threshold||misdist_num[taglist_pos]>3)
@@ -1027,6 +1038,8 @@
 					memcpy(&usart_send[19],&checksum,2);
 					if(g_com_map[MODBUS_MODE]!=1)
 					UART_PushFrame(usart_send,21);
+				//USART_puts(usart_send,21);
+					testt6[ti]=frame_seq_nb2; 
 					tagstate_list[taglist_pos] = button<<8|battary;
 				#else		
 					memcpy(&usart_send_anc[4+6*anc_report_num],&tag_id_recv,2);
@@ -1080,13 +1093,14 @@
 dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR| SYS_STATUS_TXFRS |SYS_STATUS_RXFCG);
 	g_start_sync_flag=0;
 dwt_setinterrupt(DWT_INT_TFRS | DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 1);
-	dwt_setrxtimeout(1000);//设定接收超时时间,0位没有超时时间
+	dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间
 	dwt_rxenable(0);//打开接收
 //    while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_send_flag&&!g_start_sync_flag)//不断查询芯片状态直到接收成功或者出现错误
 //	{ 
 //		//IdleTask();
 //	};
 }
+
 void Anchor_App(void)
 {
 	
@@ -1105,14 +1119,13 @@
 //		
 //		IdleTask();
 //	};
-	dwt_setinterrupt(DWT_INT_TFRS | DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 0);
+	dwt_setinterrupt(DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 0);
 	status_reg = dwt_read32bitreg(SYS_STATUS_ID);
 //GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_RESET);	
 	if (status_reg & SYS_STATUS_RXFCG)//成功接收
 	{ u16 tag_recv_interval;
 		float temp_tagpos;
-	
-
+		
 		dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG);//清除标志位
 		frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFL_MASK_1023;//获得接收数据长度
         recpoll_len = frame_len;
@@ -1171,10 +1184,13 @@
 		
 			case NEAR_POLL:	
                 frame_seq_nb2 = rx_buffer[SEQUENCE_IDX];
+			testt[ti++]=frame_seq_nb2;
+			if(ti>100)
+				ti=0;
                 battary = rx_buffer[BATTARY_IDX];
                 button = rx_buffer[BUTTON_IDX];
                 rec_nearbase_num=rx_buffer[NEARBASENUM_INDEX];                
-				memcpy(&tag_id_recv,&rx_buffer[TAG_ID_IDX],2);
+								memcpy(&tag_id_recv,&rx_buffer[TAG_ID_IDX],2);
                 memcpy(&rec_ancidlist,&rx_buffer[NEARBASEID_INDEX],2*rec_nearbase_num);
                 memcpy(&rec_ancdistlist,&rx_buffer[NEARBASEID_INDEX+2*rec_nearbase_num],2*rec_nearbase_num);
                 memcpy(&rec_antdelay,&rx_buffer[NEARBASEID_INDEX+nearbase_num*4],2);
@@ -1198,8 +1214,7 @@
 				if(taglist_pos==taglist_num)
 				{
 					taglist_pos=taglist_num;
-					tagid_list[taglist_num++]=tag_id_recv;
-					
+					tagid_list[taglist_num++]=tag_id_recv;					
 					new_tagid=1;
 				}else{
 					new_tagid=0;
@@ -1234,9 +1249,13 @@
 				
 				break;		
 		}	
-	}else{
+	}
+}else{
 		dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR);
 	}
-}
+UART_CheckSend();
+	dwt_setinterrupt(  DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 1);
+		dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间
+	dwt_rxenable(0);//打开接收
 }
 

--
Gitblit v1.9.3