Subversion Repositories HomeAutomation

Rev

Rev 372 | Rev 415 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 372 Rev 408
Line 26... Line 26...
26
 
26
 
27
 
27
 
28
/*-----------------------------------------------------------------------------
28
/*-----------------------------------------------------------------------------
29
 * Interrupt Service Routines
29
 * Interrupt Service Routines
30
 *---------------------------------------------------------------------------*/
30
 *---------------------------------------------------------------------------*/
-
 
31
#if defined(TIMEBASE_NEW_IMPLEMENTATION)
-
 
32
 
-
 
33
#if defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__)
-
 
34
#if defined(TIMER2)
-
 
35
ISR(TIMER2_COMPA_vect) {
-
 
36
#else //!defined(TIMER2)
-
 
37
ISR(TIMER0_COMPA_vect) {
-
 
38
#endif //defined(TIMER2)
-
 
39
#else //!defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__)
-
 
40
ISR(TIMER2_COMP_vect) {
-
 
41
#endif //defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__)
-
 
42
    gMilliSecTick++;
-
 
43
}
-
 
44
 
-
 
45
#else //!defined(TIMEBASE_NEW_IMPLEMENTATION)
-
 
46
 
31
#if defined(TIMER2)
47
#if defined(TIMER2)
32
ISR(SIG_OVERFLOW2) {
48
ISR(SIG_OVERFLOW2) {
33
    TCNT2 = TIMEBASE_RELOAD;
49
    TCNT2 = TIMEBASE_RELOAD;
34
    gMilliSecTick++;
50
    gMilliSecTick++;
35
}
51
}
Line 37... Line 53...
37
ISR(SIG_OVERFLOW0) {
53
ISR(SIG_OVERFLOW0) {
38
    TCNT0 = TIMEBASE_RELOAD;
54
    TCNT0 = TIMEBASE_RELOAD;
39
    gMilliSecTick++;
55
    gMilliSecTick++;
40
}
56
}
41
#endif
57
#endif
-
 
58
 
-
 
59
#endif //defined(TIMEBASE_NEW_IMPLEMENTATION)
42
 
60
 
43
 
61
 
44
/*-----------------------------------------------------------------------------
62
/*-----------------------------------------------------------------------------
45
 * Public Functions
63
 * Public Functions
46
 *---------------------------------------------------------------------------*/
64
 *---------------------------------------------------------------------------*/
47
 
65
 
48
/**
66
/**
49
 * Initializes the timebase. The hardware timer interrupt source will be
67
 * Initializes the timebase. The hardware timer interrupt source will be
50
 * enabled, but global interrupts need to be enabled by the application.
68
 * enabled, but global interrupts need to be enabled by the application.
51
 */
69
 */
52
void Timebase_Init() {
70
void Timebase_Init() {
-
 
71
#if defined(TIMEBASE_NEW_IMPLEMENTATION)
-
 
72
 
-
 
73
#if defined(TIMER2)
-
 
74
    #if defined(__AVR_ATmega8__)
-
 
75
    TCCR2 = (1<<WGM21); // CTC mode
-
 
76
    #if TIMEBASE_PRESCALE == 64
-
 
77
    TCCR2 = (1<<CS22);  // prescaler: 64
-
 
78
    #elif TIMEBASE_PRESCALE == 256
-
 
79
    TCCR2 = (1<<CS22) | (1<<CS21); // prescaler: 256
-
 
80
    #endif
-
 
81
    OCR2 = TIMEBASE_HITS_PER_1MS; // set timer period
-
 
82
    TIFR  |= (1<<OCF2);  // clear ouput compare match flag
-
 
83
    TIMSK |= (1<<OCIE2); // enable output compare match interrupt
-
 
84
    #endif
-
 
85
   
-
 
86
    #if defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__)
-
 
87
    TCCR2A = (1<<WGM21); // CTC mode
-
 
88
    #if TIMEBASE_PRESCALE == 64
-
 
89
    TCCR2B = (1<<CS22); // prescaler: 64
-
 
90
    #elif TIMEBASE_PRESCALE == 256
-
 
91
    TCCR2B = (1<<CS22)|(1<<CS21);               // prescaler: 256
-
 
92
    #endif
-
 
93
    OCR2A = TIMEBASE_HITS_PER_1MS; // set timer period
-
 
94
    TIFR2  |= (1<<OCF2A);  // clear ouput compare match flag
-
 
95
    TIMSK2 |= (1<<OCIE2); // enable output compare match interrupt
-
 
96
    #endif
-
 
97
#else /* Use timer0 */
-
 
98
    #if defined(__AVR_ATmega8__)
-
 
99
    #error TIMER0 not supported in ATmega8 with TIMEBASE_NEW_IMPLEMENTATION set!
-
 
100
    #endif
-
 
101
   
-
 
102
    #if defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__)
-
 
103
    TCCR0A = (1<<WGM01); // CTC mode
-
 
104
    #if TIMEBASE_PRESCALE == 64
-
 
105
    TCCR0B = (1<<CS01) | (1<<CS00); // prescaler: 64
-
 
106
    #elif TIMEBASE_PRESCALE == 256
-
 
107
    TCCR0B = (1<<CS02);             // prescaler: 256
-
 
108
    #endif
-
 
109
    OCR0A = TIMEBASE_HITS_PER_1MS; // set timer period
-
 
110
    TIFR0  |= (1<<OCF0A);  // clear ouput compare match flag
-
 
111
    TIMSK0 |= (1<<OCIE0); // enable output compare match interrupt
-
 
112
    #endif
-
 
113
#endif
-
 
114
 
-
 
115
 
-
 
116
#else //!defined(TIMEBASE_NEW_IMPLEMENTATION)
-
 
117
 
53
#if defined(TIMER2)
118
#if defined(TIMER2)
54
    #if defined(__AVR_ATmega8__)
119
    #if defined(__AVR_ATmega8__)
55
    #if TIMEBASE_PRESCALE == 64
120
    #if TIMEBASE_PRESCALE == 64
56
    TCCR2 = (1<<CS22);  // prescaler: 64
121
    TCCR2 = (1<<CS22);  // prescaler: 64
57
    #elif TIMEBASE_PRESCALE == 256
122
    #elif TIMEBASE_PRESCALE == 256
58
    TCCR2 = (1<<CS22) | (1<<CS21); // prescaler: 256
123
    TCCR2 = (1<<CS22) | (1<<CS21); // prescaler: 256
59
    #endif
124
    #endif
60
    TCNT2 = TIMEBASE_RELOAD; // set initial reload-value
125
    TCNT2 = TIMEBASE_RELOAD; // set initial reload-value
61
    TIFR  |= (1<<TOV2);  // clear overflow int.
126
    TIFR  |= (1<<TOV2);  // clear overflow int.
62
    TIMSK |= (1<<TOIE2); // enable overflow-interrupt
127
    TIMSK |= (1<<TOIE2); // enable overflow-interrupt
63
    #endif
128
    #endif
64
   
129
   
65
    #if defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__)
130
    #if defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__)
66
    #if TIMEBASE_PRESCALE == 64
131
    #if TIMEBASE_PRESCALE == 64
67
    TCCR2B = (1<<CS22); // prescaler: 64
132
    TCCR2B = (1<<CS22); // prescaler: 64
68
    #elif TIMEBASE_PRESCALE == 256
133
    #elif TIMEBASE_PRESCALE == 256
69
    TCCR2B = (1<<CS22)|(1<<CS21);               // prescaler: 256
134
    TCCR2B = (1<<CS22)|(1<<CS21);               // prescaler: 256
Line 76... Line 141...
76
    #if defined(__AVR_ATmega8__)
141
    #if defined(__AVR_ATmega8__)
77
    #if TIMEBASE_PRESCALE == 64
142
    #if TIMEBASE_PRESCALE == 64
78
    TCCR0 = (1<<CS01) | (1<<CS00);  // prescaler: 64
143
    TCCR0 = (1<<CS01) | (1<<CS00);  // prescaler: 64
79
    #elif TIMEBASE_PRESCALE == 256
144
    #elif TIMEBASE_PRESCALE == 256
80
    TCCR0 = (1<<CS02);              // prescaler: 256
145
    TCCR0 = (1<<CS02);              // prescaler: 256
81
    #endif
146
    #endif
82
    TCNT0 = TIMEBASE_RELOAD; // set initial reload-value
147
    TCNT0 = TIMEBASE_RELOAD; // set initial reload-value
83
    TIFR  |= (1<<TOV0);  // clear overflow int.
148
    TIFR  |= (1<<TOV0);  // clear overflow int.
84
    TIMSK |= (1<<TOIE0); // enable overflow-interrupt
149
    TIMSK |= (1<<TOIE0); // enable overflow-interrupt
85
    #endif
150
    #endif
86
   
151
   
Line 93... Line 158...
93
    TCNT0 = TIMEBASE_RELOAD; // set initial reload-value
158
    TCNT0 = TIMEBASE_RELOAD; // set initial reload-value
94
    TIFR0  |= (1<<TOV0);  // clear overflow int.
159
    TIFR0  |= (1<<TOV0);  // clear overflow int.
95
    TIMSK0 |= (1<<TOIE0); // enable overflow-interrupt
160
    TIMSK0 |= (1<<TOIE0); // enable overflow-interrupt
96
    #endif
161
    #endif
97
#endif
162
#endif
-
 
163
 
-
 
164
#endif //defined(TIMEBASE_NEW_IMPLEMENTATION)
98
}
165
}
99
 
166
 
100
 
167
 
101
/**
168
/**
102
 * Reads the current time.
169
 * Reads the current time.