| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341 |
- #include "boardinit.h"
- #include "../App/public.h"
- #include "../App/xspDataOpt.h"
- TestInitConut testcount;
- extiMsg_t g_extimsg; // 中断信息
- Identity g_iDentity; // 身份信息 主或从
- DevResetMsg g_devResetMsg;
- DevPtMsg g_devPtMsg;
- PortMsg g_portMsg[4] = {
- {GPIOD,GPIO_PIN_5, GPIO_PIN_1, GPIO_PIN_3, GPIO_PIN_2},
- {GPIOE,GPIO_PIN_5, GPIO_PIN_1, GPIO_PIN_3, GPIO_PIN_2},
- {GPIOD,GPIO_PIN_13,GPIO_PIN_9, GPIO_PIN_11,GPIO_PIN_10},
- {GPIOE,GPIO_PIN_14,GPIO_PIN_10,GPIO_PIN_12,GPIO_PIN_11},
- };
- void EXTI5_9_IRQHandler(void)
- {
- volatile uint8_t status = 0;
- if(RESET != exti_interrupt_flag_get(g_extimsg.extiLine)){ //
- #if (0)
- if(testcount.btestStart==1){
- status = gpio_input_bit_get(GPIOE,g_extimsg.extiPin);
- testcount.exittest[testcount.count].tick = gTimer_tickt;
- testcount.exittest[testcount.count].status = status;
- testcount.count++;
- if(testcount.count >=22) testcount.count = 0;
- }
- else {
- g_timeInfo.bExit = 1;
- g_timeInfo.exitTick = gTimer_tickt;
- }
- #else
- if((0==g_timeInfo.bRead) &&(RESET==gpio_input_bit_get(g_extimsg.csGroup,g_extimsg.csPin))){
- delay_ms(1);
- reset_port_all_pin(PLN,PORT_ALL);
- //reset_port_pin(PLN,3);
- delay_ms(1);//延时
- if(RESET==gpio_input_bit_get(g_extimsg.csGroup,g_extimsg.csPin)){
- set_port_all_pin(PLN,PORT_ALL);
- //set_port_pin(PLN,3);
- g_timeInfo.bRead = 1;
- }
- }
- #endif
- exti_interrupt_flag_clear(g_extimsg.extiLine);
- }
- }
- void set_port_pin(uint8_t cmd,uint8_t index)
- {
- switch(cmd){
- case CEN:
- gpio_bit_set(g_portMsg[index].group, g_portMsg[index].cePin);
- break;
- case CLK:
- gpio_bit_set(g_portMsg[index].group, g_portMsg[index].cpPin);
- break;
- case PLN:
- gpio_bit_set(g_portMsg[index].group, g_portMsg[index].plPin);
- break;
- }
- }
- void set_port_all_pin(uint8_t cmd,uint8_t index)//0x01 02 04 08
- {
- uint8_t i=0;
- for(i=0;i<4;i++){
- if(0x00 ==((index>>i)&0x01)) continue;
- set_port_pin(cmd,i);
- }
- }
- void reset_port_pin(uint8_t cmd,uint8_t index)
- {
- switch(cmd){
- case CEN:
- gpio_bit_reset(g_portMsg[index].group, g_portMsg[index].cePin);
- break;
- case CLK:
- gpio_bit_reset(g_portMsg[index].group, g_portMsg[index].cpPin);
- break;
- case PLN:
- gpio_bit_reset(g_portMsg[index].group, g_portMsg[index].plPin);
- break;
- }
- }
- void reset_port_all_pin(uint8_t cmd,uint8_t index)//0x01 02 04 08
- {
- uint8_t i=0;
- for(i=0;i<4;i++){
- if(0x00 ==((index>>i)&0x01)) continue;
- reset_port_pin(cmd,i);
- }
- }
- uint8_t read_daout_pin(uint8_t index)
- {
- uint8_t ret;
- ret = gpio_input_bit_get(g_portMsg[index].group, g_portMsg[index].doutPin);
- return ret;
- }
- /*------------------------------------------------------------------
- * 根据配置表,初始化片选 以及外部中断
- * Port1: CS0-PD0, CS6-PD6
- * Port2: AD0-PE0, AD6-PE6
- * Port3: CS15-PD8 CS9-PD14
- * Port4: AD9-PE9 AD15-PE15
- * -----------------------------------------------------------------*/
- void exti_msg_init(void)
- {
- // uint8_t port = 0;
- epprom_read_com_config();
- return;
- // switch (port){
- // case 0: // CS6
- // g_extimsg.csGroup = GPIOD;
- // g_extimsg.csPin = GPIO_PIN_6;
- // g_extimsg.extiIRQn = EXTI5_9_IRQn;
- // g_extimsg.extiLine = EXTI_6;
- // g_extimsg.extiPinSource = GPIO_PIN_SOURCE_6;
- // g_extimsg.extiPin = GPIO_PIN_6;
- // g_extimsg.outputPort = 3;
- // break;
- // case 1:
- // break;
- // case 2: // AD6
- // g_extimsg.csGroup = GPIOE;
- // g_extimsg.csPin = GPIO_PIN_6;
- // g_extimsg.extiIRQn = EXTI5_9_IRQn;
- // g_extimsg.extiLine = EXTI_6;
- // g_extimsg.extiPinSource = GPIO_PIN_SOURCE_6;
- // g_extimsg.extiPin = GPIO_PIN_6;
- // g_extimsg.outputPort = 4;
- // break;
- // case 3: // CS15--PD8
- // g_extimsg.csGroup = GPIOD;
- // g_extimsg.csPin = GPIO_PIN_8;
- // g_extimsg.extiIRQn = EXTI5_9_IRQn;
- // g_extimsg.extiLine = EXTI_8;
- // g_extimsg.extiPinSource = GPIO_PIN_SOURCE_8;
- // g_extimsg.extiPin = GPIO_PIN_8;
- // g_extimsg.outputPort = 3;
- // break;
- // default:
- // break;
- // }
- }
- /*-----------------------------------------------------------------
- * 初始化GPIO管脚
- * 版选模式:
- * PD0~PD15,PC0~PC9 PB3~PB5:CS片选,设置为输出;
- * PE0~PE15:DATA信号,输出为输入
- * PE8:设置为外部中断, 上升沿下降沿中断 ,在片选CS8(PD15)上
- * 串转并模式:
- * PD0 PD1 PD6 PD8 PD9 PD14 设置为输入 (PD1 PD9为DOUT,其它为COM端) 0x4343
- * PE0 PE1 PE6 PE9 PE10 PE15 设置为输入 (PE1 PE10为DOUT,其它为COM端)0x8643
- * 其它的PE、PD端口都设置为输出 PD:0xBCBC PE:0x79BC
- * ----------------------------------------------------------------*/
- void exti_gpio_init(void)
- {
- #if SEL_74CH165
- rcu_periph_clock_enable(RCU_GPIOD);// PD
- rcu_periph_clock_enable(RCU_GPIOE); // PE
- gpio_bit_set(GPIOD, 0xBCBC);
- gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,0xBCBC); // 设置输出
- gpio_bit_set(GPIOE, 0x79BC);
- gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,0x79BC); // PE 设置输出
- gpio_init(GPIOD, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_2MHZ,0x4343);
- gpio_init(GPIOE, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_2MHZ,0x8643);
- rcu_periph_clock_enable(RCU_AF); /* AFIO时钟使能 */
- nvic_irq_enable(g_extimsg.extiIRQn, 2U, 0U); /* 设置优先级 */
- /* connect key EXTI line to key GPIO pin */
- gpio_exti_source_select(g_extimsg.outputPort,g_extimsg.extiPinSource); /* 设置EXTI的触发源 */
- exti_deinit();
- exti_init(g_extimsg.extiLine, EXTI_INTERRUPT, EXTI_TRIG_FALLING); /*触发方式:上升沿 下降沿触发*/
- exti_interrupt_flag_clear(g_extimsg.extiLine); /* 清除中断 */
- exti_interrupt_enable(g_extimsg.extiLine);
- #else
- rcu_periph_clock_enable(RCU_GPIOD);// PD设置为输出
- gpio_bit_set(GPIOD, GPIO_PIN_ALL);
- gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_ALL);
- rcu_periph_clock_enable(RCU_GPIOC);// PC设置为输出 PC0~PC9
- gpio_bit_set(GPIOC, 0x3FF);
- gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,0x3FF);
- rcu_periph_clock_enable(RCU_GPIOB);// PB设置为输出 PB3~PB5
- gpio_bit_set(GPIOB, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);
- gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);
- rcu_periph_clock_enable(RCU_GPIOE); // PE设置为输入
- gpio_init(GPIOE, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_2MHZ,GPIO_PIN_ALL);
- rcu_periph_clock_enable(RCU_AF); /* AFIO时钟使能 */
- /* enable and set key EXTI interrupt priority */
- nvic_irq_enable(g_extimsg.extiIRQn, 2U, 0U); /* 设置优先级 */
- /* connect key EXTI line to key GPIO pin */
- gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOE,g_extimsg.extiPinSource); /* 设置EXTI的触发源 */
- exti_init(g_extimsg.extiLine, EXTI_INTERRUPT, EXTI_TRIG_BOTH); /*触发方式:上升沿 下降沿触发*/
- exti_interrupt_flag_clear(g_extimsg.extiLine); /* 清除中断 */
- exti_interrupt_enable(g_extimsg.extiLine);
- #endif
- }
- /*----------------------------------------------------------------
- * 初始化板级控制管脚
- * PC13: led_green PA0:leg_red
- * PA8: cs_en_all 所有片选使能
- * PB8: LTE_DC 4G模块是否插入 配置为输入上拉
- * ---------------------------------------------------------------*/
- void board_gpio_init(void)
- {
- rcu_periph_clock_enable(RCU_GPIOC);
- rcu_periph_clock_enable(RCU_GPIOA);
- rcu_periph_clock_enable(RCU_GPIOB);
- gpio_bit_set(GPIOC, GPIO_PIN_13);
- gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_13); //初始化LED管脚 PC13
- gpio_bit_set(GPIOA, GPIO_PIN_0);
- gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_0); //初始化LED管脚 PA0
- gpio_bit_reset(GPIOA, GPIO_PIN_8);
- gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_8); //CS_EN_ALL PA8
- gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ,GPIO_PIN_8); //PB8 LTE_DC 配置上拉
- gpio_bit_reset(GPIOB, GPIO_PIN_9); // set :上电 reset:断电
- gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_9); //PB9 4G断电
- // 初始化抬枪信号
- gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ,GPIO_PIN_15); //PB15 IN1 抬枪信号1
- gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ,GPIO_PIN_14); //PB14 IN2 抬枪信号2
- gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ,GPIO_PIN_13); //PB13 IN3 抬枪信号3
- gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ,GPIO_PIN_12); //PB12 IN4 抬枪信号4
- }
- void init_fwdgt_timer(void)
- {
- // fwdgt_counter_reload();
- }
- void fwdgt_feed(uint32_t tickt)
- {
- if((tickt%2000)==0)
- fwdgt_counter_reload();
- }
- void board_init(void)
- {
- board_gpio_init();
- i2c_init();
- usart0_config();
- //exti_msg_init();
- //exti_gpio_init();
- // init_gun_status();
- timer4_init();
- timer5_init();
- key_init();
- g_iDentity = IDENTITY_MASTER; //
- if(!gpio_input_bit_get(GPIOB,GPIO_PIN_8))
- g_devMsg.bHave4G = B4G_HAVE;// 有4G模块
- else g_devMsg.bHave4G = B4G_NOHAVE; // 无4G模块
- printf(" dev have 4g :%d\r\n", g_devMsg.bHave4G);
- }
- /*--------------------------------------------------------------------------------
- * 上电时读取复位类型
- * -------------------------------------------------------------------------------*/
- uint32_t power_up_system_resettype(void)
- {
- uint32_t RestFlag = 0;
- if(RESET != rcu_flag_get(RCU_FLAG_EPRST)){ // 复位引脚复位 external PIN reset flag
- RestFlag |= RESET_PINRST;
- }
- if(RESET != rcu_flag_get(RCU_FLAG_PORRST)){ // 掉电复位 : power reset flag
- RestFlag |= RESET_PORRSTF;
- }
- if(RESET != rcu_flag_get(RCU_FLAG_SWRST)) { // 软件复位 : software reset flag
- RestFlag |= RESET_SFTRSTF;
- }
- if(RESET != rcu_flag_get(RCU_FLAG_FWDGTRST)){// 独立看门狗复位 : free watchdog timer reset flag
- RestFlag |= RESET_IWDGRSTF;//
- }
- if(RESET != rcu_flag_get(RCU_FLAG_WWDGTRST)) { //窗口看门狗复位 : window watchdog timer reset flag
- RestFlag |= RESET_IWDGRSTF;//
- }
- if(RESET != rcu_flag_get(RCU_FLAG_LPRST)){ // 低功耗复位: low-power reset flag
- RestFlag |= RESET_LPWRRSTF;//
- }
- rcu_all_reset_flag_clear();
- printf("复位类型 : %x\r\n",RestFlag);
- //存储复位 类型
- return RestFlag;
- }
- void uart_init(void)
- {
- dam_init_uart_485();
- usart_485_dma_init();
- if(B4G_HAVE == g_devMsg.bHave4G){ // 初始化4G串口
- dma_init_uart_4G();
- usart_4G_dma_init();
- gpio_bit_set(GPIOB, GPIO_PIN_9); // set :上电 reset:断电
- }
- }
- /*------------------------------------------------------
- * 4g 模块断电上电
- * -----------------------------------------------------*/
- void init_4g_power_up(void)
- {
- gpio_bit_reset(GPIOB, GPIO_PIN_9); // set :上电 reset:断电
- start_delay_ms(2000);
- while(!g_iDelayfinish);
- stop_delay_ms();
- gpio_bit_set(GPIOB, GPIO_PIN_9); // set :上电 reset:断电
- }
|