//================================================================== // // Filename: mapp_433_pt4306.c // Description: // //------------------------------------------------------------------ // // version: // data: 10:10am, 25.Api.2020, written by dwd // Description: // //------------------------------------------------------------------ //================================================================== /*------------------------------------------------------------------------------ * I N C L U D E *------------------------------------------------------------------------------*/ //#include #include "stm32f0xx.h" #include "general.h" #include "mapp_gpio.h" #include "main.h" #include "mapp_433_pt4306.h" #include "TSC2046_spi.h" #include "mapp_arm.h" #include "mapp_msg.h" /*------------------------------------------------------------------------------ * D E F I N E *------------------------------------------------------------------------------*/ #define RG_MAX_LEN 849 /*------------------------------------------------------------------------------ * S T R U C T *------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------ * S T A T I C - V A R I A B L E S *------------------------------------------------------------------------------*/ static VU16 s_vu16I2cPT4306TaskTmr = 0; T_Pt4306_STATE gt433pt4306state = P433_ON_RESET ; /*------------------------------------------------------------------------------ * G L O B A L *------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------ * P R O T O T Y P E *------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/ void PT4306InitVal(void) { gt433pt4306state = P433_ON_RESET; } int TIM3_init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_ICInitTypeDef TIM_ICInitStructure; NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 //================================= NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //================================= //TIM_DeInit(TIM1); //================================= TIM_TimeBaseStructure.TIM_Period =50; //设置自动重装载寄存器周期值初始值 F=1M/100=10KHz TIM_TimeBaseStructure.TIM_Prescaler =(48-1); //////48000000/48=1M TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; //重复计数设置 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //参数初始化 /* Select the slave Mode: Reset Mode */ // TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); //TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable); // TIM_Cmd(TIM3, ENABLE); // TIM_ClearFlag(TIM1,TIM_FLAG_CC4); //清中断标志位 // TIM_ITConfig(TIM3,TIM_IT_CC4,ENABLE); //允许CC4IE捕获中断 TIM_ClearFlag(TIM3, TIM_FLAG_Update); // 清除溢出中断 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); // TIM_ARRPreloadConfig(TIM1, ENABLE); TIM_Cmd(TIM3, ENABLE); //================================= return 1; } U32 bdatetest =0x55AA55; /* 0.1ms,50us*/ void TIM3_IRQHandler(void) { static U16 flag=0; static U08 Hi_Bcnt =0; static U08 Lo_Bcnt =0; static U08 sendcnt =0; if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) { //========================================= TIM_ClearITPendingBit(TIM3,TIM_FLAG_Update); if (gtArm.CallState ==CALL_START){ switch (gtArm.rf_stp) { case 0x80: // case 0x81: SE_433_O_H; flag ++; if (flag >2000) { flag =0; gtArm.rf_stp =0; } break; case 0: SE_433_O_L; flag ++; if (flag >180) { flag =0; gtArm.rf_stp++; bdatetest = gtTp.tf_X_Y_add; } break; case 1: SE_433_O_H; flag ++; if (bdatetest&0x1) { if (flag >7) { flag =0; gtArm.rf_stp++; } } else { if (flag >15) { flag =0; gtArm.rf_stp++; } } break; case 2: SE_433_O_L; flag ++; if (bdatetest&0x1) { if (flag >15) { flag =0; gtArm.rf_stp++; } } else { if (flag >7) { flag =0; gtArm.rf_stp++; } } break; case 3: bdatetest = bdatetest>>1; gtArm.count_Bit++; gtArm.rf_stp =1; if (gtArm.count_Bit >24) { gtArm.rf_stp =4; } break; case 4: SE_433_O_H; flag ++; if (flag >180) { flag =0; gtArm.rf_stp =0; gtArm.count_Bit =0; sendcnt++; if (sendcnt >4) { sendcnt =0; SE_433_O_L; gtArm.CallState = CALL_ACK; SE_POWER_ON; } } break; default: break; } //TIM_ITConfig(TIM3 , TIM_IT_Update, DISABLE); } else if (gtArm.CallState ==CALL_ACK){ switch (gtArm.rf_stp) { case 0: if (!RE_433_DET) { //LO if (gtArm.count_Lead != 0xff ) { gtArm.count_Lead ++; } } else { if ((gtArm.count_Lead >=150) && (gtArm.count_Lead <=210)) { //180 gtArm.count_Lead =0; gtArm.count_Data_Hi =0; gtArm.count_Data_Lo =0; gtArm.count_Bit =0; gtArm.rf_stp =1; } else { gtArm.count_Lead =0; gtArm.rf_stp =0; } } break; case 1: if (RE_433_DET) { //HI gtArm.count_Data_Hi ++; } else { if ((gtArm.count_Data_Hi >=3) && (gtArm.count_Data_Hi <=21)) { //16 Hi_Bcnt = gtArm.count_Data_Hi; gtArm.count_Data_Hi =0; gtArm.rf_stp =2; } else { gtArm.count_Lead =0; gtArm.rf_stp =0; } } break; case 2: if (!RE_433_DET) { //LO gtArm.count_Data_Lo ++; } else { if ((gtArm.count_Data_Lo >=3) && (gtArm.count_Data_Lo <=21)) { //7 Lo_Bcnt = gtArm.count_Data_Lo; gtArm.count_Data_Lo =0; gtArm.rf_stp =3; } else { gtArm.count_Lead =0; gtArm.rf_stp =0; } } break; case 3: if (Hi_Bcnt >Lo_Bcnt){ gtArm.rf_bitdata[gtArm.enque][gtArm.count_Bit] =0; } else { gtArm.rf_bitdata[gtArm.enque][gtArm.count_Bit] =1; } gtArm.count_Bit ++; if (gtArm.count_Bit >23) { gtArm.count_Bit =0; gtArm.rf_stp =0; gtArm.decode_ok =1; gtArm.enque ++; if (gtArm.enque >9) { gtArm.enque =0; } } else { if (RE_433_DET) { gtArm.rf_stp =1; gtArm.count_Data_Hi ++; } else { gtArm.rf_stp =2; gtArm.count_Data_Lo ++; } } break; default: gtArm.rf_stp =0; gtArm.count_Lead =0; break; } } } } U08 u8PT4306regDate[10] = {0}; //U16 u16testcnt = 0x2200; void PT4306_Tick(void) { static U08 u8cnt =0; switch (gt433pt4306state) { case P433_ON_RESET: s_vu16I2cPT4306TaskTmr = 0; u8cnt =0; gt433pt4306state ++; break; case P433_ON_INIT: if (s_vu16I2cPT4306TaskTmr < OS_TIMER_200MS) { break; } s_vu16I2cPT4306TaskTmr = 0; gt433pt4306state ++; break; case P433_ON_WAIT: if (s_vu16I2cPT4306TaskTmr < OS_TIMER_1S) { break; } s_vu16I2cPT4306TaskTmr = 0; gt433pt4306state ++; break; case P433_ON_STABLE: if (s_vu16I2cPT4306TaskTmr < OS_TIMER_200MS) { break; } s_vu16I2cPT4306TaskTmr =0; gt433pt4306state++; break; case P433_SYSTEM_RUN: if (s_vu16I2cPT4306TaskTmr < OS_TIMER_1S) { break; } s_vu16I2cPT4306TaskTmr =0; if (gtArm.decode_ok ==1) { } break; case P433_OFF_INIT: gt433pt4306state++; break; case P433_OFF_SLEEP: break; default: break; } } void PT4306TaskTmr(void) { if(s_vu16I2cPT4306TaskTmr!=0xffff)s_vu16I2cPT4306TaskTmr++; } /*=============================== END OF FILE ===============================*/