#ifndef __TIMER_H #define __TIMER_H #include "types.h" #define TIMER_PCLK 58982400 #define TIMER_PRESCALE 36863 #define TIMER0_PRESCALE 3 #define TIMER_SECOND (TIMER_PCLK/(TIMER_PRESCALE+1)) /* Since we're using awkward numbers, this gives better accuracy */ #define TIMER_MS(x) ((x) * TIMER_SECOND / 1000) #define TIMER_US(x) ((x) * TIMER_SECOND / 1000000) #define TIMER0_SECOND (TIMER_PCLK/(TIMER0_PRESCALE+1)) #define TIMER0_MS (TIMER0_SECOND/1000) #define TIMER0_US (TIMER0_SECOND/1000000) #define PWM_MAX 14745 #if 0 #define PWM_PERIOD 58980 #endif #define PWM_PERIOD ((4*PWM_MAX)+1) #define TIMER_INPUT_TIMEOUT (TIMER0_SECOND/10) #define TIMER_CPPM_SYNC 40000 #define TIMER_CH(x) (timer_map[x]) extern volatile unsigned int timer0_width[]; extern volatile unsigned int timer0_cppm[]; extern unsigned int timer_map[]; void init_timer(void); unsigned int timer_read(void); void timer_delay_clocks(unsigned int clocks); void timer_set_period(unsigned int period); void timer_set_pwm_value(int channel, int value); void timer_set_pwm_invalid(int channel); bool timer_valid(int channel); bool timer_allvalid(void); #define timer_delay_us(x) timer_delay_clocks((x)*TIMER0_US) #define timer_delay_ms(x) timer_delay_clocks((x)*TIMER0_MS) #ifdef TIMER_CPPM #define timer_input(ch) (timer0_cppm[TIMER_CH(ch)]) #else #define timer_input(ch) (timer0_width[TIMER_CH(ch)]) #endif #endif /* __TIMER_H */