123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- #include "TIM1_CAP.h"
- #include "app_def.h"
- #include "app_msg.h"
- #include "TIM6_1MS.h"
- #include "BSP.h"
- //#define debugbustestcomm
- unsigned char TIM1_Rev_flag=0; //表示正在接收总线数据,0表示当前未接收,1表示当前正在接收。
- extern unsigned char RunMode; //工作模式
- static unsigned char Bus_RevLength=146; //工作模式,0表示注册模式,分机发送注册码长度为146,工作模式时为26
- extern unsigned char CallMode; //通话模式,0;双工 1;单工
- extern void BUS_Rev_NewInfo(unsigned char *pInfo);
- #define BUS_REV_MAX 6
- static unsigned short BUS_Rev_Buf[6][150]={0};
- static unsigned char BUS_Rev_ReadIndex=0;
- static unsigned char BUS_Rev_WriteIndex=0;
- static unsigned char TIM1_cc_flag=0;
- unsigned char TIM1_Rev_Buf[30]={0};
- unsigned char gt_busrxflag =0;
- int TIM1_init(void)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- TIM_ICInitTypeDef TIM_ICInitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
-
- //=================================
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 |GPIO_Pin_10;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- //=================================
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能
- TIM_DeInit(TIM1);
-
- GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1, ENABLE);
- //=================================
- TIM_TimeBaseStructure.TIM_Period =65535; //设置自动重装载寄存器周期值
- TIM_TimeBaseStructure.TIM_Prescaler =(720-1); //720-1预分频器,100K的计数频率,10us加1.
- TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
- TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; //重复计数设置
- TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //参数初始化
-
- TIM_ITConfig(TIM1, TIM_IT_Update, DISABLE);
- //=================================
- TIM_ICInitStructure.TIM_Channel = TIM_Channel_4; //选择输入端 IC1映射到TI4上
- TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling; //下降沿捕获
- TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //通道一一对应
- TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频
- TIM_ICInitStructure.TIM_ICFilter =5; //IC4F=0011 配置输入滤波器 8个定时器时钟周期滤波
- TIM_ICInit(TIM1, &TIM_ICInitStructure); //初始化定时器输入捕获通道
- TIM_ClearFlag(TIM1,TIM_FLAG_CC4); //清中断标志位
- TIM_ITConfig(TIM1,TIM_IT_CC4,ENABLE); //允许CC4IE捕获中断
- TIM_ARRPreloadConfig(TIM1, ENABLE);
- //=================================
- NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- //=================================
- TIM_Cmd(TIM1, ENABLE);
- return 1;
- }
- unsigned int itestCC4date[30] = {0};
- unsigned int itestCC4cnt =0;
- void TIM1_CC_IRQHandler(void)
- {
- static unsigned int lastCC4Value=0;
- static unsigned short TIM1_CC3[200]={0};
- unsigned int i,CC4Value;
-
- if(TIM_GetITStatus(TIM1,TIM_IT_CC4)!=RESET)
- {
- //=========================================
- i=TIM_GetCapture4(TIM1);
- if(i>lastCC4Value)
- CC4Value = i-lastCC4Value;
- else
- CC4Value=65535-lastCC4Value+i;
- lastCC4Value=i;
- BufSentTime = 40;
- itestCC4cnt ++;
- if (itestCC4cnt >25) {
- itestCC4cnt =0;
- }
- itestCC4date[itestCC4cnt] = CC4Value;
- //=========================================脉冲计算宽度
- if(CC4Value<=150)
- {
- if(lastCC4Value>=CC4Value)
- {
- lastCC4Value=lastCC4Value-CC4Value;
- }
- else
- {
- lastCC4Value=65535-lastCC4Value+CC4Value;
- }
- }
- //=========================================处理误码
- else
- {
- TIM1_CC3[TIM1_cc_flag]=CC4Value;
- if(TIM1_cc_flag==0)
- {
- if((CC4Value>450)&&(CC4Value<680)) //采集起始位:6ms
- {
- TIM1_cc_flag=2;
- TIM1_CC3[1]=CC4Value;
- gtackvalid =0;
- // TIM1_Rev_flag=1;
- }
- else if((CC4Value>900)&&(CC4Value<1100))//采ACK 10ms
- {
- gtackvalid=0 ;
- return;
- }
- else
- {
- TIM1_cc_flag=1;
- }
- }
- else if(TIM1_cc_flag==1)
- {
- if((CC4Value>450)&&(CC4Value<680)) //采集起始位:6ms
- {
- TIM1_cc_flag=2;
- TIM1_CC3[1]=CC4Value;
- gtackvalid =0;
- }
- else if((CC4Value>900)&&(CC4Value<1100)) //采ACK 10ms
- {
- gtackvalid=0 ;
- return;
- }
- }
- else if(TIM1_cc_flag<Bus_RevLength)
- {
- TIM1_cc_flag++;
- if((CC4Value>450)&&(CC4Value<680)) //采集起始位:6ms
- {
- TIM1_cc_flag=2;
- gtackvalid =0;
- }
- else if((CC4Value>900)&&(CC4Value<1100))//采ACK 10ms
- {
- gtackvalid=0 ;
- return;
- }
- }
-
- //============================================================================
- if(TIM1_cc_flag==Bus_RevLength) //接收完成,进行上传
- {
- for(i=2;i<Bus_RevLength;i++)
- {
- BUS_Rev_Buf[BUS_Rev_WriteIndex][i-2]= TIM1_CC3[i];
- }
- BUS_Rev_WriteIndex++;
- if(BUS_Rev_WriteIndex>=BUS_REV_MAX)BUS_Rev_WriteIndex=0;
- TIM1_cc_flag=0;
- //TIM1_Rev_flag=0;
- }
- else if(TIM1_cc_flag>Bus_RevLength)
- {
- TIM1_cc_flag=0;
- // TIM1_Rev_flag=0;
- }
- //============================================================================
- }
- TIM_ClearITPendingBit(TIM1, TIM_IT_CC4);
- }
- }
- #ifdef debugbustestcomm
- unsigned short dwdcnt =0;
- unsigned short dwdcnt2 =0;
- unsigned short dwdcnt3 =0;
- #endif
- void BUS_Rev_Tick(void)
- {
- unsigned short i,j,k;
- unsigned short checkSum=0;
- //=======================================
- if(RunMode==0)
- {
- Bus_RevLength=146;
- }
- else
- {
- Bus_RevLength=26;
- }
- #ifdef debugbustestcomm
- dwdcnt2 ++;
- if (dwdcnt2 == 110) {
-
- OSQPost(BusMsgQueue, BUS_MSG_REGEDITSTATE, TO_WORD(0xff, 'Y'));
- dwdcnt2 =0;
- } else if (dwdcnt2 >200) {
- dwdcnt2 =0;
- OSQPost(BusMsgQueue, BUS_MSG_REGEDITSTATE, TO_WORD(0xff, 'Y'));
- } else if (dwdcnt2 >100) {
- dwdcnt2 =0;
- OSQPost(BusMsgQueue, BUS_MSG_REGEDITSTATE, TO_WORD(0xff, 'Y'));
- // OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA5, TO_WORD(0x11, 0x39));
- }
- #endif
- //=======================================
- if(BUS_Rev_WriteIndex != BUS_Rev_ReadIndex)
- {
- for(i=0;i<30;i++)
- {
- TIM1_Rev_Buf[i]=0;
- }
- //=======================================
- for(i=0;i<(Bus_RevLength-2);i++)
- {
- if(BUS_Rev_Buf[BUS_Rev_ReadIndex][i]>360) //230409
- {
- if(i>0)
- {
- if(BUS_Rev_Buf[BUS_Rev_ReadIndex][i-1]<280)
- {
- BUS_Rev_Buf[BUS_Rev_ReadIndex][i-1]+=100;
- }
- else
- {
- BUS_Rev_Buf[BUS_Rev_ReadIndex][i+1]+=100;
- }
- }
- else
- {
- BUS_Rev_Buf[BUS_Rev_ReadIndex][i+1]+=100;
- }
- BUS_Rev_Buf[BUS_Rev_ReadIndex][i]-=100;
- }
- }
- //=======================================再次处理误码
- for(i=0;i<(Bus_RevLength-2);i++)
- {
- k=(i)/8;
- j=(i)%8;
- if((BUS_Rev_Buf[BUS_Rev_ReadIndex][i]>250)&&(BUS_Rev_Buf[BUS_Rev_ReadIndex][i]<500)) //数据位:1
- {
- TIM1_Rev_Buf[k]|=(1<<j);
- }
- }
- //=======================================================
- if(RunMode==0)
- {
- checkSum=0;
- for(i=0;i<17;i++)
- {
- checkSum+=TIM1_Rev_Buf[i];
- }
- checkSum+=(TIM1_Rev_Buf[17]&0x0F);
- i=(TIM1_Rev_Buf[17]>>4)&0x0F;
- if((checkSum&0x0F)==i)
- {
- TIM1_Rev_Buf[17]=TIM1_Rev_Buf[17]&0x0F;
- BUS_Rev_NewInfo(TIM1_Rev_Buf);
- } else {
- #ifdef debugbustestcomm
- dwdcnt ++;
- #endif
- }
- }
- else
- {
-
- checkSum=TIM1_Rev_Buf[0];
- checkSum+=TIM1_Rev_Buf[1];
- checkSum+=(TIM1_Rev_Buf[2]&0x0F);
- i=(TIM1_Rev_Buf[2]>>4)&0x0F;
- if((checkSum&0x0F)==i)
- {
- TIM1_Rev_Buf[2]=TIM1_Rev_Buf[2]&0x0F;
- BUS_Rev_NewInfo(TIM1_Rev_Buf);
- } else if ((TIM1_Rev_Buf[2] == 'C') || (TIM1_Rev_Buf[2] == 'S')) {
- BUS_Rev_146BInfo(TIM1_Rev_Buf); // working find device
- }
- }
- BUS_Rev_ReadIndex++;
- if(BUS_Rev_ReadIndex>=BUS_REV_MAX)BUS_Rev_ReadIndex=0;
- }
-
- }
-
|