12,12 → 12,15 |
/* InitTMR0 = 256 - ( Delay * Frequency ) / ( 4* Prescaler) */ |
/* Delay = (256 - InitTMR0 * Prescaler) / (Frequency / 4) */ |
/* ----------------------------------------------------------- */ |
|
|
// Sleep timer |
OpenTimer0(TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_256); |
T0CONbits.TMR0ON = 0; // Timer 0 initially off |
|
|
#ifdef _REMOTE |
// Data polling timer |
OpenTimer1(TIMER_INT_ON & T1_16BIT_RW & |
T1_SOURCE_FOSC_4 & T1_PS_1_8 & |
T1_SOURCE_FOSC_4 & T1_PS_1_1 & |
T1_OSC1EN_OFF & T1_SYNC_EXT_OFF, |
TIMER_GATE_OFF & TIMER_GATE_INT_OFF); |
T1CONbits.TMR1ON = 0; // Timer 1 initially off |
30,6 → 33,7 |
OpenTimer3(TIMER_INT_ON & T3_16BIT_RW & T3_SOURCE_FOSC_4 & |
T3_OSC1EN_OFF & T3_PS_1_1 & T3_SYNC_EXT_OFF, TIMER_GATE_OFF); |
T3CONbits.TMR3ON = 0; // Timer 3 initially off |
#endif |
} |
|
// Interrupt handler for timer 0 |
49,10 → 53,12 |
|
// Interrupt handler for timer 1 |
void timer1_interrupt_handler() { |
#ifdef _REMOTE |
timer1_counter++; |
if (timer1_counter % 3 == 0) { |
MQ_sendmsg_ToMainFromLow(0, MSGTYPE_TIMER1, (void *) 0); |
} |
#endif |
} |
|
void timer1_enable() { |
65,20 → 71,22 |
} |
|
void timer3_interrupt_handler() { |
if (!pwm_on) { |
#ifdef _REMOTE |
if (!PWM_IR_STATE) { |
// Turn on PWM |
pwm_IR_start(); |
pwm_on = 1; |
PWM_IR_STATE = 1; |
WriteTimer3(0xEA00); // Send 38kHz pulses for 600us |
} else { |
// Turn off PWM |
pwm_IR_stop(); |
pwm_on = 0; |
PWM_IR_STATE = 0; |
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 |
} |
#endif |
} |
|
void timer3_enable() { |
85,7 → 93,7 |
// Enable timer and start PWM |
T3CONbits.TMR3ON = 1; |
pwm_IR_start(); |
pwm_on = 1; |
PWM_IR_STATE = 1; |
} |
|
void timer3_disable() { |
92,5 → 100,5 |
// Disable timer and stop PWM |
T3CONbits.TMR3ON = 0; |
pwm_IR_stop(); |
pwm_on = 0; |
PWM_IR_STATE = 0; |
} |