#include "pt_timer.h" #include "task.h" uint32_t get_system_ms(void); //启动定时器 void timer_set(struct timer *t, unsigned long interval) { t->interval = interval; // 存储需要延时的us数 t->start = get_system_ms(); //获取当前的us值 } // 定时器超时判断 unsigned char timer_expired(struct timer *t) { unsigned long now = get_system_ms() ; unsigned long err = now - t->start; // clock_time()会获取当前的tick值, 如果当前值-开始值超过了延时的tick数, 那么就是超时了 unsigned char overTime = err>= t->interval; _nop_(); return overTime; // 思考:溢出会如何呢? //没问题,负数-正数仍然是一个正数 } //延时,必须是开中断状态下 void delay_ms(unsigned long t_ms) { struct timer input_timer; timer_set(&input_timer,t_ms); while(!timer_expired(&input_timer)); _nop_(); } void Delay10us(void) { _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); } void delay_us(unsigned int t) { t/=10; t=t>0?t:10; while(t--) { Delay10us(); Delay10us(); Delay10us(); } }