zhyinch
2022-02-10 a6e5c60a9ec30574bf7c3d584046444b15f8680f
Ô´Âë/ºËÐİå/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);//打开接收
}