#include "Timer.h" #include "boardinit.h" #include "../App/public.h" #include "../App/xspDataOpt.h" uint32_t g_iDelayfinish; volatile uint32_t gTimer_tickt = 0; TimerInfo g_timeInfo; void TIMER5_IRQHandler(void) { if(timer_flag_get(TIMER5,TIMER_FLAG_UP) != RESET){ g_iDelayfinish = 1; timer_disable(TIMER5); timer_flag_clear(TIMER5,TIMER_FLAG_UP);/* 定时器更新中断的标识位需要手动清除 */ } } void timer5_init(void) { timer_parameter_struct timer_initpara; rcu_periph_clock_enable(RCU_TIMER5);/* 使能TIMER5时钟 */ /* TIMER5 初始化配置 */ timer_deinit(TIMER5); timer_initpara.prescaler = 7200-1;/* 时钟预分频系数 10KHz*/ timer_initpara.period = 1000-1;/* 自动重装载值 500-500us 1000-1ms */ timer_initpara.counterdirection = TIMER_COUNTER_UP; /* 向上计数模式 */ timer_init(TIMER5,&timer_initpara); timer_single_pulse_mode_config(TIMER5,TIMER_SP_MODE_SINGLE); //timer_enable(TIMER5); nvic_irq_enable(TIMER5_IRQn, 3, 3);/* TIMER5中断设置,抢占优先级3,子优先级3 */ //timer_interrupt_enable(TIMER5,TIMER_INT_UP);/* 使能更新中断 */ timer_flag_clear(TIMER5,TIMER_FLAG_UP);/* 定时器更新中断的标识位需要手动清除 */ timer_interrupt_disable(TIMER5,TIMER_INT_UP); timer_counter_value_config(TIMER5,0); timer_disable(TIMER5); } void start_delay_ms(uint32_t delayms) { g_iDelayfinish = 0; //timer_prescaler_config(TIMER5,10800-1); timer_autoreload_value_config(TIMER5,delayms*10-1); timer_counter_value_config(TIMER5,0); timer_enable(TIMER5); timer_interrupt_enable(TIMER5,TIMER_INT_UP);/* 使能更新中断 */ } void stop_delay_ms(void) { timer_disable(TIMER5); timer_flag_clear(TIMER5,TIMER_FLAG_UP);/* 定时器更新中断的标识位需要手动清除 */ } static void display_led_status(uint32_t tickt) { static volatile uint8_t ledgreen = 0, ledred=0; static volatile uint8_t num = 0; if(0 == g_devMsg.ledgreen) { // 绿灯状态不亮 LED_GREEN_SET();// gpio_bit_set(GPIOC, GPIO_PIN_13); } else if(1 == g_devMsg.ledgreen){ // 绿灯慢闪 if(tickt%50000==0) { if(ledgreen==0) LED_GREEN_SET();//gpio_bit_set(GPIOC, GPIO_PIN_13); else LED_GREEN_RESET();//gpio_bit_reset(GPIOC, GPIO_PIN_13); ledgreen = !ledgreen; } } else if(2 == g_devMsg.ledgreen) { // 绿灯快闪 if(tickt%20000==0) { if(ledgreen==0) LED_GREEN_SET();//gpio_bit_set(GPIOC, GPIO_PIN_13); else LED_GREEN_RESET();//gpio_bit_reset(GPIOC, GPIO_PIN_13); ledgreen = !ledgreen; } } else if(3 == g_devMsg.ledgreen) { // 绿灯常亮 LED_GREEN_RESET();//gpio_bit_reset(GPIOC, GPIO_PIN_13); } else if((4 == g_devMsg.ledgreen) ||(5 == g_devMsg.ledgreen)){ if( g_devMsg.ledgreen == 5){ if((tickt%30002) == 0){ g_devMsg.ledgreen = 6; return; } } if(tickt%20000==0) { if(ledgreen==0) { LED_GREEN_SET();//gpio_bit_set(GPIOC, GPIO_PIN_13); LED_RED_SET();//gpio_bit_set(GPIOA, GPIO_PIN_0); } else { LED_GREEN_RESET();//gpio_bit_reset(GPIOC, GPIO_PIN_13); LED_RED_RESET();//gpio_bit_reset(GPIOA, GPIO_PIN_0); num++; if(num>g_devMsg.ledred){ g_devMsg.ledgreen = 5;// 上电显示灯已经结束 LED_GREEN_SET();//gpio_bit_set(GPIOC, GPIO_PIN_13); LED_RED_SET();//gpio_bit_set(GPIOA, GPIO_PIN_0); ledgreen = 1; } } ledgreen = !ledgreen; } return; } if(0 == g_devMsg.ledred) { // 红灯状态不亮 LED_RED_SET();//gpio_bit_set(GPIOA, GPIO_PIN_0); } else if(1 == g_devMsg.ledred){ // 红灯慢闪 if(tickt%50000==0) { if(ledred==0) LED_RED_SET();//gpio_bit_set(GPIOA, GPIO_PIN_0); else LED_RED_RESET();//gpio_bit_reset(GPIOA, GPIO_PIN_0); ledred = !ledred; } } else if(2 == g_devMsg.ledred) { // 红灯快闪 if(tickt%20000==0) { if(ledred==0) LED_RED_SET();//gpio_bit_set(GPIOA, GPIO_PIN_0); else LED_RED_RESET();//gpio_bit_reset(GPIOA, GPIO_PIN_0); ledred = !ledred; } } else if(3 == g_devMsg.ledred) { // 红灯常亮 LED_RED_RESET();//gpio_bit_reset(GPIOA, GPIO_PIN_0); } } void TIMER4_IRQHandler(void) { volatile uint8_t status = 0,i = 0,j=0; volatile uint16_t status1 = 0,daUp = 0,daDn = 0; volatile uint8_t count = 0,flag = 0; volatile static uint32_t lasttick = 0; if(RESET != timer_flag_get(TIMER4,TIMER_FLAG_UP)){ gTimer_tickt++; display_led_status(gTimer_tickt); deal_gun_status(gTimer_tickt); #if (0) //(SEL_74CH165) // if((g_timeInfo.bExit == 1) &&((gTimer_tickt-g_timeInfo.exitTick)>=g_timeInfo.delay) ){ // if((0 == g_timeInfo.bRead) && (RESET == gpio_input_bit_get(g_extimsg.csGroup,g_extimsg.extiPin))){ // //exti_interrupt_disable(g_extimsg.extiLine); // 关闭外部中断 // reset_port_pin(PLNALL,USE_PORT_ID); // delay_ms(3);//延时 // set_port_pin(PLNALL,USE_PORT_ID); // g_timeInfo.bExit = 0; // g_timeInfo.bRead = 1; // } // } #else #if(NO_INIT_COLLECT) // if(g_testCollDa.bTestCollDa == 0){ // if((g_timeInfo.bExit == 1) &&((gTimer_tickt-g_timeInfo.exitTick)>=g_timeInfo.delay) ){ // exti_interrupt_disable(g_extimsg.extiLine); // 关闭外部中断 // for(count = 0;count>8)&0xFF; // g_timeInfo.testsrcDa[count][i+CS_GROUP_NUM] = daUp&0xFF; // //g_timeInfo.srcDa[i] = (daDn>>8)&0xFF; // //g_timeInfo.srcDa[i+CS_GROUP_NUM] = daUp&0xFF; // gpio_bit_set(g_csPortMsg[i].csPort,g_csPortMsg[i].csPin); // gpio_bit_set(g_csPortMsg[i+12].csPort,g_csPortMsg[i+12].csPin); // for(j=0;j<20;j++); // } // } // else { // if((flag++) >3) // break; // } // } // g_timeInfo.count = count -flag; // //if(count >=COLLECT_NUM) { // g_timeInfo.bExit = 0; // g_timeInfo.bRead = 1; // // count = 0; // //} // } // } // else if((g_testCollDa.bTestCollDa == 1)&&(g_testCollDa.bdealDa == 0)){ // 测试采集数据的电平 if(((gTimer_tickt%g_testCollDa.collTime) == 0) && (gTimer_tickt != lasttick)) { set_all_cs_port_status(SET); // 所有的片选置高 for(j=0;j<20;j++); if(g_devMsg.bHYdev == 0x00){ for(i=0;i>8)&0xFF; daUp = (gpio_input_port_get(GPIOD)); g_testCollDa.collDa[g_testCollDa.collNum][i+CS_GROUP_NUM] = daUp&0xFF; gpio_bit_set(g_csPortMsg[i].csPort,g_csPortMsg[i].csPin); gpio_bit_set(g_csPortMsg[i+12].csPort,g_csPortMsg[i+12].csPin); for(j=0;j<20;j++); } } else { for(i=0;i>8)&0xFF; daUp = (gpio_input_port_get(GPIOD)); g_testCollDa.collDa[g_testCollDa.collNum][i+CS_GROUP_NUM] = daUp&0xFF; gpio_bit_set(g_csPortMsg[i].csPort,g_csPortMsg[i].csPin); gpio_bit_set(g_csPortMsg[i+12].csPort,g_csPortMsg[i+12].csPin); for(j=0;j<5;j++); } } //g_testCollDa.timer[g_testCollDa.collNum] = gTimer_tickt; g_testCollDa.collNum = (g_testCollDa.collNum+1)%TEST_COLL_DA_MAX_NUM; if(g_testCollDa.collNum == 0) g_testCollDa.bdealDa = 1; lasttick = gTimer_tickt; } } #endif #endif timer_flag_clear(TIMER4,TIMER_FLAG_UP);/* 定时器更新中断的标识位需要手动清除 */ } } /*------------------------------------------------------------------------- * 初始化定时器4 * 10us中断一次 * ------------------------------------------------------------------------*/ void timer4_init(void) { timer_parameter_struct timer_initpara; rcu_periph_clock_enable(RCU_TIMER4);/* 使能TIMER5时钟 */ /* TIMER5 初始化配置 */ timer_deinit(TIMER4); timer_initpara.prescaler = 71;/* 时钟预分频系数 */ timer_initpara.period = 9;/* 自动重装载值 500-500us 1000-1ms */ timer_init(TIMER4,&timer_initpara); timer_enable(TIMER4); nvic_irq_enable(TIMER4_IRQn, 3, 2);/* TIMER5中断设置,抢占优先级3,子优先级3 */ timer_interrupt_enable(TIMER4,TIMER_INT_UP);/* 使能更新中断 */ }