Subversion Repositories Code-Repo

Rev

Rev 114 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 114 Rev 115
Line 3... Line 3...
3
#include "msg_queues.h"
3
#include "msg_queues.h"
4
#include <timers.h>
4
#include <timers.h>
5
#include "timers.h"
5
#include "timers.h"
6
#include "pwm.h"
6
#include "pwm.h"
7
 
7
 
8
unsigned char timer1_counter;
8
unsigned char overflow_counter;
9
 
9
 
10
void timers_init() {
10
void timers_init() {
11
    /*--------------------Timer Delay Formulas-------------------- */
11
    /*--------------------Timer Delay Formulas-------------------- */
12
    /* InitTMR0 = 256 - ( Delay * Frequency ) / ( 4* Prescaler)    */
12
    /* InitTMR0 = 256 - ( Delay * Frequency ) / ( 4* Prescaler)    */
13
    /* Delay = (256 - InitTMR0 * Prescaler) / (Frequency / 4)      */
13
    /* Delay = (256 - InitTMR0 * Prescaler) / (Frequency / 4)      */
14
    /* ----------------------------------------------------------- */
14
    /* ----------------------------------------------------------- */
15
 
15
 
16
    // Sleep timer
16
    // Sleep timer
17
    OpenTimer0(TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_256);
17
    OpenTimer0(TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_256);
18
    T0CONbits.TMR0ON = 0;   // Timer 0 initially off
18
    T0CONbits.TMR0ON = 0;   // Timer 0 initially off
-
 
19
 
-
 
20
#ifdef _BASE_STATION
-
 
21
    OpenTimer2(TIMER_INT_ON & T2_PS_1_16 & T2_POST_1_16);
-
 
22
    T2CONbits.TMR2ON = 0;   // Timer 2 initially off
19
    
23
#endif
20
#ifdef _REMOTE
24
#ifdef _REMOTE
21
    // Data polling timer
25
    // Data polling timer
22
    OpenTimer1(TIMER_INT_ON & T1_16BIT_RW &
26
    OpenTimer1(TIMER_INT_ON & T1_16BIT_RW &
23
                T1_SOURCE_FOSC_4 & T1_PS_1_1 &
27
                T1_SOURCE_FOSC_4 & T1_PS_1_1 &
24
                T1_OSC1EN_OFF & T1_SYNC_EXT_OFF,
28
                T1_OSC1EN_OFF & T1_SYNC_EXT_OFF,
25
                TIMER_GATE_OFF & TIMER_GATE_INT_OFF);
29
                TIMER_GATE_OFF & TIMER_GATE_INT_OFF);
26
    T1CONbits.TMR1ON = 0;   // Timer 1 initially off
30
    T1CONbits.TMR1ON = 0;   // Timer 1 initially off
27
    timer1_counter = 0;
31
    overflow_counter = 0;
28
 
32
 
29
    // Open timer 2 for ECCP1 (PWM)
33
    // Open timer 2 for ECCP1 (PWM)
30
    OpenTimer2(TIMER_INT_OFF & T2_PS_1_4 & T2_POST_1_1);
34
    OpenTimer2(TIMER_INT_OFF & T2_PS_1_4 & T2_POST_1_1);
31
 
35
 
32
    // Open timer 3 for PWM IR signaling
36
    // Open timer 3 for PWM IR signaling
Line 52... Line 56...
52
}
56
}
53
 
57
 
54
// Interrupt handler for timer 1
58
// Interrupt handler for timer 1
55
void timer1_interrupt_handler() {
59
void timer1_interrupt_handler() {
56
#ifdef _REMOTE
60
#ifdef _REMOTE
57
    timer1_counter++;
61
    overflow_counter++;
58
    if (timer1_counter % 3 == 0) {
62
    if (overflow_counter % 3 == 0) {
59
        MQ_sendmsg_ToMainFromLow(0, MSGTYPE_TIMER1, (void *) 0);
63
        MQ_sendmsg_ToMainFromLow(0, MSGTYPE_TIMER1, (void *) 0);
60
    }
64
    }
61
#endif
65
#endif
62
}
66
}
63
 
67
 
Line 68... Line 72...
68
 
72
 
69
void timer1_disable() {
73
void timer1_disable() {
70
    T1CONbits.TMR1ON = 0;
74
    T1CONbits.TMR1ON = 0;
71
}
75
}
72
 
76
 
-
 
77
// Interrupt handler for timer 2
-
 
78
void timer2_interrupt_handler() {
-
 
79
    overflow_counter++;
-
 
80
    if (overflow_counter ==  50) {
-
 
81
        overflow_counter = 0;
-
 
82
        timer2_disable();
-
 
83
        MQ_sendmsg_ToMainFromLow(0, MSGTYPE_TIMER2, (void *) 0);
-
 
84
    }
-
 
85
}
-
 
86
 
-
 
87
void timer2_enable() {
-
 
88
    WriteTimer2(0);
-
 
89
    T2CONbits.TMR2ON = 1;
-
 
90
}
-
 
91
 
-
 
92
void timer2_disable() {
-
 
93
    T2CONbits.TMR2ON = 0;
-
 
94
}
-
 
95
 
73
void timer3_interrupt_handler() {
96
void timer3_interrupt_handler() {
74
#ifdef _REMOTE
97
#ifdef _REMOTE
75
    if (!PWM_IR_STATE) {
98
    if (!PWM_IR_STATE) {
76
        // Turn on PWM
99
        // Turn on PWM
77
        pwm_IR_start();
100
        pwm_IR_start();
Line 79... Line 102...
79
        WriteTimer3(0xEA00);    // Send 38kHz pulses for 600us
102
        WriteTimer3(0xEA00);    // Send 38kHz pulses for 600us
80
    } else {
103
    } else {
81
        // Turn off PWM
104
        // Turn off PWM
82
        pwm_IR_stop();
105
        pwm_IR_stop();
83
        PWM_IR_STATE = 0;
106
        PWM_IR_STATE = 0;
84
        WriteTimer3(0xEA00);    // Send low for 0.6ms
107
//        WriteTimer3(0xEA00);    // Send low for 0.6ms
85
//        WriteTimer3(0xD800);    // Send low for 1ms
108
//        WriteTimer3(0xD800);    // Send low for 1ms
86
//        WriteTimer3(0xB000);    // Send low for 2ms
109
//        WriteTimer3(0xB000);    // Send low for 2ms
87
//        WriteTimer3(0x1000);    // Send low for 6ms
110
        WriteTimer3(0x1000);    // Send low for 6ms
88
    }
111
    }
89
#endif
112
#endif
90
}
113
}
91
 
114
 
92
void timer3_enable() {
115
void timer3_enable() {