-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTimerA.c
More file actions
61 lines (53 loc) · 1.33 KB
/
TimerA.c
File metadata and controls
61 lines (53 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "TimerA.h"
//global vars
#define ON 1
#define OFF 0
volatile uint16_t TimerA_codesToSend = 0, TimerA_waits = 0, TimerA_tvFrequency = 0, TimerA_usOnTime = 0, TimerA_usOffTime = 0;
volatile uint8_t TimerA_state = STATE_DONE, onOffState = ON;
//interrupts every 10us
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TimerA_isrCompare(void)
{
if (TimerA_state == STATE_EXECUTE_CODE)
{
if (onOffState == ON)
{
//decrement every ten us
--TimerA_usOnTime;
if (TimerA_usOnTime == 0)
{
IR_LED_DIR &= ~(1 << IR_LED);
onOffState = OFF;
CircularBuffer_getWord(&TimerA_usOffTime);
if (TimerA_usOffTime == 0)
{
TimerA_state = STATE_DONE;
onOffState = ON;
}
return;
}
}
else if (onOffState == OFF)
{
--TimerA_usOffTime;
if (TimerA_usOffTime == 0)
{
IR_LED_DIR |= (1 << IR_LED);
onOffState = ON;
CircularBuffer_getWord(&TimerA_usOnTime);
}
}
}
}
/*
--TimerA_codesToSend;
//another way to exit
if (TimerA_codesToSend == 0)
{
IR_LED_DIR &= ~(1 << IR_LED);
P1OUT |= (1 << RED_LED);
TA1CCR0 = 0;
TimerA_state = STATE_DONE;
onOffState = ON;
}
*/