5,7 → 5,7 |
#include "timers.h" |
#include "pwm.h" |
|
unsigned char timer1_counter; |
unsigned char overflow_counter; |
|
void timers_init() { |
/*--------------------Timer Delay Formulas-------------------- */ |
16,7 → 16,11 |
// Sleep timer |
OpenTimer0(TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_256); |
T0CONbits.TMR0ON = 0; // Timer 0 initially off |
|
|
#ifdef _BASE_STATION |
OpenTimer2(TIMER_INT_ON & T2_PS_1_16 & T2_POST_1_16); |
T2CONbits.TMR2ON = 0; // Timer 2 initially off |
#endif |
#ifdef _REMOTE |
// Data polling timer |
OpenTimer1(TIMER_INT_ON & T1_16BIT_RW & |
24,7 → 28,7 |
T1_OSC1EN_OFF & T1_SYNC_EXT_OFF, |
TIMER_GATE_OFF & TIMER_GATE_INT_OFF); |
T1CONbits.TMR1ON = 0; // Timer 1 initially off |
timer1_counter = 0; |
overflow_counter = 0; |
|
// Open timer 2 for ECCP1 (PWM) |
OpenTimer2(TIMER_INT_OFF & T2_PS_1_4 & T2_POST_1_1); |
54,8 → 58,8 |
// Interrupt handler for timer 1 |
void timer1_interrupt_handler() { |
#ifdef _REMOTE |
timer1_counter++; |
if (timer1_counter % 3 == 0) { |
overflow_counter++; |
if (overflow_counter % 3 == 0) { |
MQ_sendmsg_ToMainFromLow(0, MSGTYPE_TIMER1, (void *) 0); |
} |
#endif |
70,6 → 74,25 |
T1CONbits.TMR1ON = 0; |
} |
|
// Interrupt handler for timer 2 |
void timer2_interrupt_handler() { |
overflow_counter++; |
if (overflow_counter == 50) { |
overflow_counter = 0; |
timer2_disable(); |
MQ_sendmsg_ToMainFromLow(0, MSGTYPE_TIMER2, (void *) 0); |
} |
} |
|
void timer2_enable() { |
WriteTimer2(0); |
T2CONbits.TMR2ON = 1; |
} |
|
void timer2_disable() { |
T2CONbits.TMR2ON = 0; |
} |
|
void timer3_interrupt_handler() { |
#ifdef _REMOTE |
if (!PWM_IR_STATE) { |
81,10 → 104,10 |
// Turn off PWM |
pwm_IR_stop(); |
PWM_IR_STATE = 0; |
WriteTimer3(0xEA00); // Send low for 0.6ms |
// WriteTimer3(0xEA00); // Send low for 0.6ms |
// WriteTimer3(0xD800); // Send low for 1ms |
// WriteTimer3(0xB000); // Send low for 2ms |
// WriteTimer3(0x1000); // Send low for 6ms |
WriteTimer3(0x1000); // Send low for 6ms |
} |
#endif |
} |