boardinit.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. #include "boardinit.h"
  2. #include "../App/public.h"
  3. #include "../App/xspDataOpt.h"
  4. TestInitConut testcount;
  5. extiMsg_t g_extimsg; // 中断信息
  6. Identity g_iDentity; // 身份信息 主或从
  7. DevResetMsg g_devResetMsg;
  8. DevPtMsg g_devPtMsg;
  9. GunStatus01 g_gunSta;
  10. PortMsg g_portMsg[4] = {
  11. {GPIOD,GPIO_PIN_5, GPIO_PIN_1, GPIO_PIN_3, GPIO_PIN_2},
  12. {GPIOE,GPIO_PIN_5, GPIO_PIN_1, GPIO_PIN_3, GPIO_PIN_2},
  13. {GPIOD,GPIO_PIN_13,GPIO_PIN_9, GPIO_PIN_11,GPIO_PIN_10},
  14. {GPIOE,GPIO_PIN_14,GPIO_PIN_10,GPIO_PIN_12,GPIO_PIN_11},
  15. };
  16. /* CS_D_0:PB15 CS_D_1:PB14 CS_D_2:PB13 CS_D_3:PB12
  17. * CS_D_4:PE7 CS_D_5:PB1 CS_D_6:PB0 CS_D_7:PC5
  18. * CS_D_8:PC4 CS_D_9:PA7 CS_D_10:PA6 CS_D_11:PA5
  19. *
  20. * CS_U_0:PE1 CS_U_1:PE0 CS_U_2:PB9 CS_U_3:PB8
  21. * CS_U_4:PB7 CS_U_5:PB6 CS_U_6:PB5 CS_U_7:PC11
  22. * CS_U_8:PC10 CS_U_9:PA15 CS_U_10:PA12 CS_U_11:PA11
  23. */
  24. CSPortMsg g_csPortMsg[24] = {
  25. {GPIOB,GPIO_PIN_15}, //CS_D_00--PB15
  26. {GPIOB,GPIO_PIN_14}, //CS_D_01--PB14
  27. {GPIOB,GPIO_PIN_13}, //CS_D_02--PB13
  28. {GPIOB,GPIO_PIN_12}, //CS_D_03--PB12
  29. {GPIOE,GPIO_PIN_7}, //CS_D_04--PE7
  30. {GPIOB,GPIO_PIN_1}, //CS_D_05--PB1
  31. {GPIOB,GPIO_PIN_0}, //CS_D_06--PB0
  32. {GPIOC,GPIO_PIN_5}, //CS_D_07--PC5
  33. {GPIOC,GPIO_PIN_4}, //CS_D_08--PC4
  34. {GPIOA,GPIO_PIN_7}, //CS_D_09--PA7
  35. {GPIOA,GPIO_PIN_6}, //CS_D_10--PA6
  36. {GPIOA,GPIO_PIN_5}, //CS_D_11--PA5
  37. {GPIOE,GPIO_PIN_1}, //CS_U_00--PE1
  38. {GPIOE,GPIO_PIN_0}, //CS_U_01--PE0
  39. {GPIOB,GPIO_PIN_9}, //CS_U_02--PB9
  40. {GPIOB,GPIO_PIN_8}, //CS_U_03--PB8
  41. {GPIOB,GPIO_PIN_7}, //CS_U_04--PB7
  42. {GPIOB,GPIO_PIN_6}, //CS_U_05--PB6
  43. {GPIOB,GPIO_PIN_5}, //CS_U_06--PB5
  44. {GPIOC,GPIO_PIN_12}, //CS_U_07--PC12
  45. {GPIOC,GPIO_PIN_11}, //CS_U_08--PC11
  46. {GPIOC,GPIO_PIN_10}, //CS_U_09--PC10
  47. {GPIOA,GPIO_PIN_12}, //CS_U_10--PA12
  48. {GPIOA,GPIO_PIN_11}, //CS_U_11--PA11
  49. };
  50. void exti_irq_fuction(void)
  51. {
  52. volatile uint8_t status = 0;
  53. volatile uint8_t i = 0,j=0,daUp,daDn;
  54. volatile uint32_t count = 0;
  55. // if(RESET == gpio_input_bit_get(g_extimsg.extiPort,g_extimsg.extiPin)){ //
  56. // if(testcount.btestStart==1){
  57. // status = gpio_input_bit_get(g_extimsg.extiPort,g_extimsg.extiPin);
  58. // testcount.exittest[testcount.count].tick = gTimer_tickt;
  59. // testcount.exittest[testcount.count].status = status;
  60. // testcount.count++;
  61. // if(testcount.count >=24) testcount.count = 0;
  62. // }
  63. #if (NO_INIT_COLLECT)
  64. // else {
  65. // g_timeInfo.bExit = 1;
  66. // g_timeInfo.exitTick = gTimer_tickt;
  67. // }
  68. #else
  69. else {
  70. g_timeInfo.bExit = 1;
  71. g_timeInfo.bRead = 0;
  72. //exti_interrupt_disable(g_extimsg.extiLine); // 关闭外部中断
  73. for(count=0;count<0x7FFF;count++)
  74. status = gpio_input_bit_get(g_extimsg.extiPort,g_extimsg.extiPin);
  75. if(status == RESET) { // COM端为电平时取数
  76. set_all_cs_port_status(SET); // 所有的片选置高
  77. for(j=0;j<20;j++);
  78. for(i=0;i<CS_GROUP_NUM;i++){
  79. gpio_bit_reset(g_csPortMsg[i].csPort,g_csPortMsg[i].csPin);
  80. gpio_bit_reset(g_csPortMsg[i+12].csPort,g_csPortMsg[i+12].csPin);
  81. for(j=0;j<20;j++);
  82. daDn = (gpio_input_port_get(GPIOE));//(status1)^ 因为是高电平取数据,所以要取反
  83. daUp = (gpio_input_port_get(GPIOD));// (status1)^
  84. g_timeInfo.srcDa[i] = (daDn>>8)&0xFF;
  85. g_timeInfo.srcDa[i+CS_GROUP_NUM] = daUp&0xFF;
  86. gpio_bit_set(g_csPortMsg[i].csPort,g_csPortMsg[i].csPin);
  87. gpio_bit_set(g_csPortMsg[i+12].csPort,g_csPortMsg[i+12].csPin);
  88. for(j=0;j<20;j++);
  89. }
  90. }
  91. g_timeInfo.bExit = 0;
  92. g_timeInfo.bRead = 1;
  93. }
  94. #endif
  95. // }
  96. // else if(SET == gpio_input_bit_get(g_extimsg.extiPort,g_extimsg.extiPin)){
  97. // if(testcount.btestStart==1){
  98. // status = gpio_input_bit_get(g_extimsg.extiPort,g_extimsg.extiPin);
  99. // testcount.exittest[testcount.count].tick = gTimer_tickt;
  100. // testcount.exittest[testcount.count].status = status;
  101. // testcount.count++;
  102. // if(testcount.count >=24) testcount.count = 0;
  103. // }
  104. // }
  105. }
  106. void EXTI5_9_IRQHandler(void)
  107. {
  108. volatile static uint8_t gunLevel = 0;
  109. // if(RESET != exti_interrupt_flag_get(g_extimsg.extiLine)){ //
  110. // exti_irq_fuction();
  111. // //if(g_extimsg.extiLine != EXTI_8)
  112. // exti_interrupt_flag_clear(g_extimsg.extiLine);
  113. // }
  114. }
  115. void EXTI10_15_IRQHandler(void)
  116. {
  117. // if(RESET != exti_interrupt_flag_get(g_extimsg.extiLine)){ //
  118. // exti_irq_fuction();
  119. // exti_interrupt_flag_clear(g_extimsg.extiLine);
  120. // }
  121. }
  122. void EXTI0_IRQHandler(void)
  123. {
  124. // if(RESET != exti_interrupt_flag_get(g_extimsg.extiLine)){ //
  125. // exti_irq_fuction();
  126. // exti_interrupt_flag_clear(g_extimsg.extiLine);
  127. // }
  128. }
  129. void EXTI1_IRQHandler(void)
  130. {
  131. // if(RESET != exti_interrupt_flag_get(g_extimsg.extiLine)){ //
  132. // exti_irq_fuction();
  133. // exti_interrupt_flag_clear(g_extimsg.extiLine);
  134. // }
  135. }
  136. #if(0)
  137. void set_port_pin(uint8_t cmd,uint8_t index)
  138. {
  139. switch(cmd){
  140. case CEN:
  141. gpio_bit_set(g_portMsg[index].group, g_portMsg[index].cePin);
  142. break;
  143. case CLK:
  144. gpio_bit_set(g_portMsg[index].group, g_portMsg[index].cpPin);
  145. break;
  146. case PLN:
  147. gpio_bit_set(g_portMsg[index].group, g_portMsg[index].plPin);
  148. break;
  149. }
  150. }
  151. void set_port_all_pin(uint8_t cmd,uint8_t index)//0x01 02 04 08
  152. {
  153. uint8_t i=0;
  154. for(i=0;i<4;i++){
  155. if(0x00 ==((index>>i)&0x01)) continue;
  156. set_port_pin(cmd,i);
  157. }
  158. }
  159. void reset_port_pin(uint8_t cmd,uint8_t index)
  160. {
  161. switch(cmd){
  162. case CEN:
  163. gpio_bit_reset(g_portMsg[index].group, g_portMsg[index].cePin);
  164. break;
  165. case CLK:
  166. gpio_bit_reset(g_portMsg[index].group, g_portMsg[index].cpPin);
  167. break;
  168. case PLN:
  169. gpio_bit_reset(g_portMsg[index].group, g_portMsg[index].plPin);
  170. break;
  171. }
  172. }
  173. void reset_port_all_pin(uint8_t cmd,uint8_t index)//0x01 02 04 08
  174. {
  175. uint8_t i=0;
  176. for(i=0;i<4;i++){
  177. if(0x00 ==((index>>i)&0x01)) continue;
  178. reset_port_pin(cmd,i);
  179. }
  180. }
  181. uint8_t read_daout_pin(uint8_t index)
  182. {
  183. uint8_t ret;
  184. ret = gpio_input_bit_get(g_portMsg[index].group, g_portMsg[index].doutPin);
  185. return ret;
  186. }
  187. #endif
  188. /*------------------------------------------------------------------
  189. * 根据配置表,初始化片选 以及外部中断
  190. * Port1: CS0-PD0, CS6-PD6
  191. * Port2: AD0-PE0, AD6-PE6
  192. * Port3: CS15-PD8 CS9-PD14
  193. * Port4: AD9-PE9 AD15-PE15
  194. * -----------------------------------------------------------------*/
  195. void exti_msg_init(void)
  196. {
  197. // uint8_t port = 0;
  198. epprom_read_com_config();
  199. // exti_interrupt_flag_clear(g_extimsg.extiLine); /* 清除中断 */
  200. // exti_interrupt_disable(g_extimsg.extiLine);
  201. /*----start cs--cs_u_1--PE0 exit--ad_u_5--PD5------*/
  202. /*g_extimsg.csGroup = GPIOB;
  203. g_extimsg.csPin = GPIO_PIN_9;
  204. g_extimsg.extiPin = GPIO_PIN_6;
  205. g_extimsg.extiPort = GPIOD;
  206. g_extimsg.extiIRQn = EXTI5_9_IRQn;
  207. g_extimsg.extiLine = EXTI_6;
  208. g_extimsg.extiPinSource = GPIO_PIN_SOURCE_6;
  209. g_extimsg.outputPort = GPIO_PORT_SOURCE_GPIOD;*///3;
  210. /*------------------end start---------------*/
  211. return;
  212. // switch (port){
  213. // case 0: // CS6
  214. // g_extimsg.csGroup = GPIOD;
  215. // g_extimsg.csPin = GPIO_PIN_6;
  216. // g_extimsg.extiIRQn = EXTI5_9_IRQn;
  217. // g_extimsg.extiLine = EXTI_6;
  218. // g_extimsg.extiPinSource = GPIO_PIN_SOURCE_6;
  219. // g_extimsg.extiPin = GPIO_PIN_6;
  220. // g_extimsg.outputPort = 3;
  221. // break;
  222. // case 1:
  223. // break;
  224. // case 2: // AD6
  225. // g_extimsg.csGroup = GPIOE;
  226. // g_extimsg.csPin = GPIO_PIN_6;
  227. // g_extimsg.extiIRQn = EXTI5_9_IRQn;
  228. // g_extimsg.extiLine = EXTI_6;
  229. // g_extimsg.extiPinSource = GPIO_PIN_SOURCE_6;
  230. // g_extimsg.extiPin = GPIO_PIN_6;
  231. // g_extimsg.outputPort = 4;
  232. // break;
  233. // case 3: // CS15--PD8
  234. // g_extimsg.csGroup = GPIOD;
  235. // g_extimsg.csPin = GPIO_PIN_8;
  236. // g_extimsg.extiIRQn = EXTI5_9_IRQn;
  237. // g_extimsg.extiLine = EXTI_8;
  238. // g_extimsg.extiPinSource = GPIO_PIN_SOURCE_8;
  239. // g_extimsg.extiPin = GPIO_PIN_8;
  240. // g_extimsg.outputPort = 3;
  241. // break;
  242. // default:
  243. // break;
  244. // }
  245. }
  246. /*-----------------------------------------------------------------
  247. * 初始化GPIO管脚
  248. * 版选模式:
  249. * CS_ALL : PE2
  250. * CS片选,设置为输出:
  251. * CS_D_0:PB15 CS_D_1:PB14 CS_D_2:PB13 CS_D_3:PB12
  252. * CS_D_4:PE7 CS_D_5:PB1 CS_D_6:PB0 CS_D_7:PC5
  253. * CS_D_8:PC4 CS_D_9:PA7 CS_D_10:PA6 CS_D_11:PA5
  254. *
  255. * CS_U_0:PE1 CS_U_1:PE0 CS_U_2:PB9 CS_U_3:PB8
  256. * CS_U_4:PB7 CS_U_5:PB6 CS_U_6:PB5 CS_U_7:PC12
  257. * CS_U_8:PC11 CS_U_9:PC10 CS_U_10:PA12 CS_U_11:PA11
  258. *
  259. * DATA信号,设置为输入:PE8~PE15(0xFF00):AD_D0~AD_D7; PD0~PD7(0x00FF):AD_U0~AD_U7
  260. * PE8:设置为外部中断, 上升沿下降沿中断 ,在片选CS8(PD15)上
  261. * 串转并模式:
  262. * PD0 PD1 PD6 PD8 PD9 PD14 设置为输入 (PD1 PD9为DOUT,其它为COM端) 0x4343
  263. * PE0 PE1 PE6 PE9 PE10 PE15 设置为输入 (PE1 PE10为DOUT,其它为COM端)0x8643
  264. * 其它的PE、PD端口都设置为输出 PD:0xBCBC PE:0x79BC
  265. * ----------------------------------------------------------------*/
  266. void exti_gpio_init(void)
  267. {
  268. rcu_periph_clock_enable(RCU_GPIOE);
  269. gpio_init(GPIOE, GPIO_MODE_IPD, GPIO_OSPEED_2MHZ,0xFF00);// PE8~PE15设置为输入
  270. gpio_bit_set(GPIOE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_7);// PE0/PE1/PE7 设置为输出
  271. gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_7);
  272. gpio_bit_reset(GPIOE, GPIO_PIN_2);// CS_ALL
  273. gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ,GPIO_PIN_2);
  274. rcu_periph_clock_enable(RCU_GPIOD);//
  275. gpio_init(GPIOD, GPIO_MODE_IPD, GPIO_OSPEED_2MHZ,0x00FF);// PD0~PD7设置为输入
  276. gpio_bit_reset(GPIOD, GPIO_PIN_9);// PD9 设置为输出 CS_ALL
  277. gpio_init(GPIOD, GPIO_MODE_OUT_OD, GPIO_OSPEED_2MHZ,GPIO_PIN_9);
  278. rcu_periph_clock_enable(RCU_GPIOC);// PC设置为输出 PC4/PC5/PC10/PC11/PC12
  279. gpio_bit_set(GPIOC, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12);
  280. gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12);
  281. rcu_periph_clock_enable(RCU_GPIOB);// PB设置为输出 PB0~PB1/PB5~PB9/PB12~PB15
  282. gpio_bit_set(GPIOB, 0xF3E3);
  283. gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ,0xF3E3);
  284. //rcu_periph_clock_enable(RCU_AF); // 必须要用这句,才能使用下面的remap;
  285. rcu_periph_clock_enable(RCU_GPIOA);// PA设置为输出 PA5~PA7/PA11~PA12
  286. //gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP,ENABLE); // 将PA15做为普通IO口,PA13 PA14为SWD
  287. gpio_bit_set(GPIOA, 0x18E0);
  288. gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ,0x18E0);
  289. rcu_periph_clock_enable(RCU_AF); /* AFIO时钟使能 */
  290. // for(i=0;i<4;i++){
  291. // printf("csport = %d, cspin= %d,extipt = %d, extipin=%d\r\n",g_extimsg.csGroup[i],\
  292. // g_extimsg.csPin[i],g_extimsg.extiPort[i],g_extimsg.extiPin[i]);
  293. // }
  294. //exti_deinit();
  295. /* enable and set key EXTI interrupt priority */
  296. //nvic_irq_enable(g_extimsg.extiIRQn, 2U, 0U); /* 设置优先级 */
  297. /* connect key EXTI line to key GPIO pin */
  298. //gpio_exti_source_select(g_extimsg.outputPort,g_extimsg.extiPinSource); /* 设置EXTI的触发源 */
  299. //exti_init(g_extimsg.extiLine, EXTI_INTERRUPT, EXTI_TRIG_BOTH); /*触发方式:上升沿 下降沿触发*/
  300. //exti_interrupt_flag_clear(g_extimsg.extiLine); /* 清除中断 */
  301. // exti_interrupt_enable(g_extimsg.extiLine);
  302. #if (0) //SEL_74CH165
  303. rcu_periph_clock_enable(RCU_GPIOD);// PD
  304. rcu_periph_clock_enable(RCU_GPIOE); // PE
  305. gpio_bit_set(GPIOD, 0xBCBC);
  306. gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,0xBCBC); // 设置输出
  307. gpio_bit_set(GPIOE, 0x79BC);
  308. gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,0x79BC); // PE 设置输出
  309. gpio_init(GPIOD, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_2MHZ,0x4343);
  310. gpio_init(GPIOE, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_2MHZ,0x8643);
  311. rcu_periph_clock_enable(RCU_AF); /* AFIO时钟使能 */
  312. nvic_irq_enable(g_extimsg.extiIRQn, 2U, 0U); /* 设置优先级 */
  313. /* connect key EXTI line to key GPIO pin */
  314. gpio_exti_source_select(g_extimsg.outputPort,g_extimsg.extiPinSource); /* 设置EXTI的触发源 */
  315. exti_deinit();
  316. exti_init(g_extimsg.extiLine, EXTI_INTERRUPT, EXTI_TRIG_FALLING); /*触发方式:上升沿 下降沿触发*/
  317. exti_interrupt_flag_clear(g_extimsg.extiLine); /* 清除中断 */
  318. exti_interrupt_enable(g_extimsg.extiLine);
  319. #endif
  320. }
  321. /*------------------------------------------------------------------
  322. * 所有的片选置高或是低
  323. * ------------------------------------------------------------------*/
  324. void set_all_cs_port_status(FlagStatus status)
  325. {
  326. uint8_t i = 0;
  327. CSPortMsg *csMsg = NULL;
  328. if(status == SET){
  329. for(i=0;i<CS_GROUP_NUM;i++){
  330. csMsg = &g_csPortMsg[i];
  331. gpio_bit_set(csMsg->csPort,csMsg->csPin);
  332. csMsg = &g_csPortMsg[i+12];
  333. gpio_bit_set(csMsg->csPort,csMsg->csPin);
  334. }
  335. }
  336. else {
  337. for(i=0;i<CS_GROUP_NUM;i++){
  338. csMsg = &g_csPortMsg[i];
  339. gpio_bit_reset(csMsg->csPort,csMsg->csPin);
  340. csMsg = &g_csPortMsg[i+12];
  341. gpio_bit_reset(csMsg->csPort,csMsg->csPin);
  342. }
  343. }
  344. }
  345. /*----------------------------------------------------------------
  346. * 抬枪信号的初始化
  347. * PC8
  348. * ----------------------------------------------------------------*/
  349. void gun_single_init(void)
  350. {
  351. //初始化抬枪信号
  352. rcu_periph_clock_enable(RCU_GPIOC);
  353. gpio_init(TQ_PORT, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ,TQ_PIN); //PC8 IN1 抬枪信号1
  354. rcu_periph_clock_enable(RCU_AF); /* AFIO时钟使能 */
  355. nvic_irq_enable(EXTI5_9_IRQn, 3U, 2U); /* 设置优先级 */
  356. gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOC,GPIO_PIN_SOURCE_8); /* 设置EXTI的触发源 */
  357. exti_init(EXTI_8, EXTI_INTERRUPT, EXTI_TRIG_BOTH); /*触发方式:上升沿 下降沿触发*/
  358. exti_interrupt_flag_clear(EXTI_8); /* 清除中断 */
  359. exti_interrupt_enable(EXTI_8);
  360. }
  361. /*----------------------------------------------------------------
  362. * 初始化板级控制管脚
  363. * PD14 : led_green PD15:leg_red
  364. * PE2: cs_en_all 所有片选使能
  365. * ---------------------------------------------------------------*/
  366. void board_gpio_init(void)
  367. {
  368. rcu_periph_clock_enable(RCU_GPIOC);
  369. rcu_periph_clock_enable(RCU_GPIOD);
  370. rcu_periph_clock_enable(RCU_GPIOE);
  371. gpio_bit_set(GPIOD, GPIO_PIN_15|GPIO_PIN_14);
  372. gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ,GPIO_PIN_14|GPIO_PIN_15); //初始化LED管脚 PC13
  373. gpio_bit_reset(GPIOE, GPIO_PIN_2);
  374. gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ,GPIO_PIN_2); //cs_all 使能
  375. // 初始化抬枪信号
  376. gpio_init(TQ_PORT, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ,TQ_PIN); //PC8 IN1 抬枪信号1
  377. gpio_init(BM_PORT, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ,BM_PIN); //PC9 编码器
  378. }
  379. void init_fwdgt_timer(void)
  380. {
  381. // fwdgt_counter_reload();
  382. }
  383. void fwdgt_feed(uint32_t tickt)
  384. {
  385. if((tickt%2000)==0)
  386. fwdgt_counter_reload();
  387. }
  388. void board_init(void)
  389. {
  390. board_gpio_init();
  391. i2c_init();
  392. rct_init();
  393. init_flash();
  394. usart0_config();
  395. exti_msg_init();
  396. exti_gpio_init();
  397. init_gun_status();
  398. timer4_init();
  399. timer5_init();
  400. key_init();
  401. g_iDentity = IDENTITY_SLAVE; // 从
  402. g_devMsg.bHave4G = B4G_NOHAVE; // 无4G模块
  403. }
  404. /*--------------------------------------------------------------------------------
  405. * 上电时读取复位类型
  406. * -------------------------------------------------------------------------------*/
  407. uint32_t power_up_system_resettype(void)
  408. {
  409. uint32_t RestFlag = 0;
  410. if(RESET != rcu_flag_get(RCU_FLAG_EPRST)){ // 复位引脚复位 external PIN reset flag
  411. RestFlag |= RESET_PINRST;
  412. }
  413. if(RESET != rcu_flag_get(RCU_FLAG_PORRST)){ // 掉电复位 : power reset flag
  414. RestFlag |= RESET_PORRSTF;
  415. }
  416. if(RESET != rcu_flag_get(RCU_FLAG_SWRST)) { // 软件复位 : software reset flag
  417. RestFlag |= RESET_SFTRSTF;
  418. }
  419. if(RESET != rcu_flag_get(RCU_FLAG_FWDGTRST)){// 独立看门狗复位 : free watchdog timer reset flag
  420. RestFlag |= RESET_IWDGRSTF;//
  421. }
  422. if(RESET != rcu_flag_get(RCU_FLAG_WWDGTRST)) { //窗口看门狗复位 : window watchdog timer reset flag
  423. RestFlag |= RESET_IWDGRSTF;//
  424. }
  425. if(RESET != rcu_flag_get(RCU_FLAG_LPRST)){ // 低功耗复位: low-power reset flag
  426. RestFlag |= RESET_LPWRRSTF;//
  427. }
  428. rcu_all_reset_flag_clear();
  429. printf("复位类型 : %x\r\n",RestFlag);
  430. //存储复位 类型
  431. return RestFlag;
  432. }
  433. void uart_init(void)
  434. {
  435. dam_init_uart_485();
  436. usart_485_dma_init();
  437. }