You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.4 KiB
51 lines
1.4 KiB
#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 */
|
|
|