/* ********************************************************************************************************* * 函 数 名: SysTick_ISR * 功能说明: SysTick中断服务程序,每隔1ms进入1次 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void SysTick_ISR(void) { static uint8_t s_count = 0; uint8_t i; for (i = 0; i < TMR_COUNT; i++) { bsp_SoftTimerDec(&g_Tmr[i]); } if (++s_count >= 10) { s_count = 0; g_iRunTime++; /* 全局运行时间每10ms增1 */ if (g_iRunTime == 0x7FFFFFFF) { g_iRunTime = 0; } /* 下面的代码实现所有按键的检测。按键检测每隔10ms一次就行了,一般做40ms的滤波处理就可以 有效过滤掉机械动作造成的按键抖动。 */ bsp_KeyPro(); /* 该函数在 bsp_button.c 中实现 */ } }
void SysTick_ISR(void) { static uint8_t s_count = 0; static uint16_t one_second = 0; uint8_t i; /* 每隔1ms进来1次 (仅用于 bsp_DelayMS) */ if (s_uiDelayCount > 0) { if (--s_uiDelayCount == 0) { s_ucTimeOutFlag = 1; } } /* 每隔1ms,对软件定时器的计数器进行减一操作 */ for (i = 0; i < TMR_COUNT; i++) { bsp_SoftTimerDec(&s_tTmr[i]); } /* 全局运行时间每1ms增1 */ g_iRunTime++; if (g_iRunTime == 0x7FFFFFFF) /* 这个变量是 int32_t 类型,最大数为 0x7FFFFFFF */ { g_iRunTime = 0; } bsp_RunPer1ms(); /* 每隔1ms调用一次此函数,此函数在 bsp.c */ if (++s_count >= 10) { s_count = 0; bsp_RunPer10ms(); /* 每隔10ms调用一次此函数,此函数在 bsp.c */ } if(++one_second >= 1000) { bsp_RunPer1s(); } }
//extern void bsp_RunPer1ms(void); //extern void bsp_RunPer10ms(void); void TIM3_IRQHandler(void) { static uint8_t s_count = 0; uint8_t i; if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET) { TIM_ClearITPendingBit(TIM3,TIM_IT_Update); /* 每隔1ms进来1次 (仅用于 bsp_DelayMS) */ if (s_uiDelayCount > 0) { if (--s_uiDelayCount == 0) { s_ucTimeOutFlag = 1; } } /* 每隔1ms,对软件定时器的计数器进行减一操作 */ for (i = 0; i < TMR_COUNT; i++) { bsp_SoftTimerDec(&s_tTmr[i]); } /* 全局运行时间每1ms增1 */ g_iRunTime++; if (g_iRunTime == 0x7FFFFFFF) /* 这个变量是 int32_t 类型,最大数为 0x7FFFFFFF */ { g_iRunTime = 0; } // bsp_RunPer1ms(); /* 每隔1ms调用一次此函数,此函数在 bsp.c */ /* 全局运行时间每10ms增1 */ if (++s_count >= 10) { s_count = 0; g_iRunTime10ms++; if (g_iRunTime10ms == 0x7FFFFFFF) /* 这个变量是 int32_t 类型,最大数为 0x7FFFFFFF */ { g_iRunTime10ms = 0; } //bsp_RunPer10ms(); /* 每隔10ms调用一次此函数,此函数在 bsp.c */ switch(beep_status) { case BEEP_STATUS_BEEP: { beep_cnt++; if(beep_cnt>=beep_comp) { beep_off(); beep_status=BEEP_STATUS_MUTE; } break; } case BEEP_STATUS_MUTE: { beep_cnt++; if(beep_cnt>=mute_comp) { beep_cnt=0; if(beep_time>1) { beep_time--; beep_status=BEEP_STATUS_BEEP; beep_on(); } else { beep_status=BEEP_STATUS_IDLE; } } break; } case BEEP_STATUS_IDLE: { break; } default: { beep_off(); beep_status=BEEP_STATUS_IDLE; break; } } } } }