mapp_433_pt4306.c 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. //==================================================================
  2. //
  3. // Filename: mapp_433_pt4306.c
  4. // Description:
  5. //
  6. //------------------------------------------------------------------
  7. //
  8. // version:
  9. // data: 10:10am, 25.Api.2020, written by dwd
  10. // Description:
  11. //
  12. //------------------------------------------------------------------
  13. //==================================================================
  14. /*------------------------------------------------------------------------------
  15. * I N C L U D E
  16. *------------------------------------------------------------------------------*/
  17. //#include <string.h>
  18. #include "stm32f0xx.h"
  19. #include "general.h"
  20. #include "mapp_gpio.h"
  21. #include "main.h"
  22. #include "mapp_433_pt4306.h"
  23. #include "TSC2046_spi.h"
  24. #include "mapp_arm.h"
  25. #include "mapp_msg.h"
  26. /*------------------------------------------------------------------------------
  27. * D E F I N E
  28. *------------------------------------------------------------------------------*/
  29. #define RG_MAX_LEN 849
  30. /*------------------------------------------------------------------------------
  31. * S T R U C T
  32. *------------------------------------------------------------------------------*/
  33. /*------------------------------------------------------------------------------
  34. * S T A T I C - V A R I A B L E S
  35. *------------------------------------------------------------------------------*/
  36. static VU16 s_vu16I2cPT4306TaskTmr = 0;
  37. T_Pt4306_STATE gt433pt4306state = P433_ON_RESET ;
  38. /*------------------------------------------------------------------------------
  39. * G L O B A L
  40. *------------------------------------------------------------------------------*/
  41. /*------------------------------------------------------------------------------
  42. * P R O T O T Y P E
  43. *------------------------------------------------------------------------------*/
  44. /*------------------------------------------------------------------------------*/
  45. void PT4306InitVal(void)
  46. {
  47. gt433pt4306state = P433_ON_RESET;
  48. }
  49. int TIM3_init(void)
  50. {
  51. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  52. TIM_ICInitTypeDef TIM_ICInitStructure;
  53. NVIC_InitTypeDef NVIC_InitStructure;
  54. GPIO_InitTypeDef GPIO_InitStructure;
  55. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
  56. //=================================
  57. NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  58. NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
  59. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  60. NVIC_Init(&NVIC_InitStructure);
  61. //=================================
  62. //TIM_DeInit(TIM1);
  63. //=================================
  64. TIM_TimeBaseStructure.TIM_Period =50; //设置自动重装载寄存器周期值初始值 F=1M/100=10KHz
  65. TIM_TimeBaseStructure.TIM_Prescaler =(48-1); //////48000000/48=1M
  66. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割
  67. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
  68. TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; //重复计数设置
  69. TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //参数初始化
  70. /* Select the slave Mode: Reset Mode */
  71. // TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);
  72. //TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable);
  73. // TIM_Cmd(TIM3, ENABLE);
  74. // TIM_ClearFlag(TIM1,TIM_FLAG_CC4); //清中断标志位
  75. // TIM_ITConfig(TIM3,TIM_IT_CC4,ENABLE); //允许CC4IE捕获中断
  76. TIM_ClearFlag(TIM3, TIM_FLAG_Update); // 清除溢出中断
  77. TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
  78. // TIM_ARRPreloadConfig(TIM1, ENABLE);
  79. TIM_Cmd(TIM3, ENABLE);
  80. //=================================
  81. return 1;
  82. }
  83. U32 bdatetest =0x55AA55;
  84. /* 0.1ms,50us*/
  85. void TIM3_IRQHandler(void)
  86. {
  87. static U16 flag=0;
  88. static U08 Hi_Bcnt =0;
  89. static U08 Lo_Bcnt =0;
  90. static U08 sendcnt =0;
  91. if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
  92. {
  93. //=========================================
  94. TIM_ClearITPendingBit(TIM3,TIM_FLAG_Update);
  95. if (gtArm.CallState ==CALL_START){
  96. switch (gtArm.rf_stp)
  97. {
  98. case 0x80:
  99. // case 0x81:
  100. SE_433_O_H;
  101. flag ++;
  102. if (flag >2000) {
  103. flag =0;
  104. gtArm.rf_stp =0;
  105. }
  106. break;
  107. case 0:
  108. SE_433_O_L;
  109. flag ++;
  110. if (flag >180) {
  111. flag =0;
  112. gtArm.rf_stp++;
  113. bdatetest = gtTp.tf_X_Y_add;
  114. }
  115. break;
  116. case 1:
  117. SE_433_O_H;
  118. flag ++;
  119. if (bdatetest&0x1) {
  120. if (flag >7) {
  121. flag =0;
  122. gtArm.rf_stp++;
  123. }
  124. } else {
  125. if (flag >15) {
  126. flag =0;
  127. gtArm.rf_stp++;
  128. }
  129. }
  130. break;
  131. case 2:
  132. SE_433_O_L;
  133. flag ++;
  134. if (bdatetest&0x1) {
  135. if (flag >15) {
  136. flag =0;
  137. gtArm.rf_stp++;
  138. }
  139. } else {
  140. if (flag >7) {
  141. flag =0;
  142. gtArm.rf_stp++;
  143. }
  144. }
  145. break;
  146. case 3:
  147. bdatetest = bdatetest>>1;
  148. gtArm.count_Bit++;
  149. gtArm.rf_stp =1;
  150. if (gtArm.count_Bit >24) {
  151. gtArm.rf_stp =4;
  152. }
  153. break;
  154. case 4:
  155. SE_433_O_H;
  156. flag ++;
  157. if (flag >180) {
  158. flag =0;
  159. gtArm.rf_stp =0;
  160. gtArm.count_Bit =0;
  161. sendcnt++;
  162. if (sendcnt >4) {
  163. sendcnt =0;
  164. SE_433_O_L;
  165. gtArm.CallState = CALL_ACK;
  166. SE_POWER_ON;
  167. }
  168. }
  169. break;
  170. default:
  171. break;
  172. }
  173. //TIM_ITConfig(TIM3 , TIM_IT_Update, DISABLE);
  174. } else if (gtArm.CallState ==CALL_ACK){
  175. switch (gtArm.rf_stp)
  176. {
  177. case 0:
  178. if (!RE_433_DET) { //LO
  179. if (gtArm.count_Lead != 0xff ) {
  180. gtArm.count_Lead ++;
  181. }
  182. } else {
  183. if ((gtArm.count_Lead >=150) && (gtArm.count_Lead <=210)) { //180
  184. gtArm.count_Lead =0;
  185. gtArm.count_Data_Hi =0;
  186. gtArm.count_Data_Lo =0;
  187. gtArm.count_Bit =0;
  188. gtArm.rf_stp =1;
  189. } else {
  190. gtArm.count_Lead =0;
  191. gtArm.rf_stp =0;
  192. }
  193. }
  194. break;
  195. case 1:
  196. if (RE_433_DET) { //HI
  197. gtArm.count_Data_Hi ++;
  198. } else {
  199. if ((gtArm.count_Data_Hi >=3) && (gtArm.count_Data_Hi <=21)) { //16
  200. Hi_Bcnt = gtArm.count_Data_Hi;
  201. gtArm.count_Data_Hi =0;
  202. gtArm.rf_stp =2;
  203. } else {
  204. gtArm.count_Lead =0;
  205. gtArm.rf_stp =0;
  206. }
  207. }
  208. break;
  209. case 2:
  210. if (!RE_433_DET) { //LO
  211. gtArm.count_Data_Lo ++;
  212. } else {
  213. if ((gtArm.count_Data_Lo >=3) && (gtArm.count_Data_Lo <=21)) { //7
  214. Lo_Bcnt = gtArm.count_Data_Lo;
  215. gtArm.count_Data_Lo =0;
  216. gtArm.rf_stp =3;
  217. } else {
  218. gtArm.count_Lead =0;
  219. gtArm.rf_stp =0;
  220. }
  221. }
  222. break;
  223. case 3:
  224. if (Hi_Bcnt >Lo_Bcnt){
  225. gtArm.rf_bitdata[gtArm.enque][gtArm.count_Bit] =0;
  226. } else {
  227. gtArm.rf_bitdata[gtArm.enque][gtArm.count_Bit] =1;
  228. }
  229. gtArm.count_Bit ++;
  230. if (gtArm.count_Bit >23) {
  231. gtArm.count_Bit =0;
  232. gtArm.rf_stp =0;
  233. gtArm.decode_ok =1;
  234. gtArm.enque ++;
  235. if (gtArm.enque >9) {
  236. gtArm.enque =0;
  237. }
  238. } else
  239. {
  240. if (RE_433_DET) {
  241. gtArm.rf_stp =1;
  242. gtArm.count_Data_Hi ++;
  243. } else {
  244. gtArm.rf_stp =2;
  245. gtArm.count_Data_Lo ++;
  246. }
  247. }
  248. break;
  249. default:
  250. gtArm.rf_stp =0;
  251. gtArm.count_Lead =0;
  252. break;
  253. }
  254. }
  255. }
  256. }
  257. U08 u8PT4306regDate[10] = {0};
  258. //U16 u16testcnt = 0x2200;
  259. void PT4306_Tick(void)
  260. {
  261. static U08 u8cnt =0;
  262. switch (gt433pt4306state) {
  263. case P433_ON_RESET:
  264. s_vu16I2cPT4306TaskTmr = 0;
  265. u8cnt =0;
  266. gt433pt4306state ++;
  267. break;
  268. case P433_ON_INIT:
  269. if (s_vu16I2cPT4306TaskTmr < OS_TIMER_200MS) {
  270. break;
  271. }
  272. s_vu16I2cPT4306TaskTmr = 0;
  273. gt433pt4306state ++;
  274. break;
  275. case P433_ON_WAIT:
  276. if (s_vu16I2cPT4306TaskTmr < OS_TIMER_1S) {
  277. break;
  278. }
  279. s_vu16I2cPT4306TaskTmr = 0;
  280. gt433pt4306state ++;
  281. break;
  282. case P433_ON_STABLE:
  283. if (s_vu16I2cPT4306TaskTmr < OS_TIMER_200MS) {
  284. break;
  285. }
  286. s_vu16I2cPT4306TaskTmr =0;
  287. gt433pt4306state++;
  288. break;
  289. case P433_SYSTEM_RUN:
  290. if (s_vu16I2cPT4306TaskTmr < OS_TIMER_1S) {
  291. break;
  292. }
  293. s_vu16I2cPT4306TaskTmr =0;
  294. if (gtArm.decode_ok ==1) {
  295. }
  296. break;
  297. case P433_OFF_INIT:
  298. gt433pt4306state++;
  299. break;
  300. case P433_OFF_SLEEP:
  301. break;
  302. default:
  303. break;
  304. }
  305. }
  306. void PT4306TaskTmr(void)
  307. {
  308. if(s_vu16I2cPT4306TaskTmr!=0xffff)s_vu16I2cPT4306TaskTmr++;
  309. }
  310. /*=============================== END OF FILE ===============================*/