FreeCalypso > hg > freecalypso-tools
annotate target-utils/buzplayer/timer.c @ 298:734b38f634db
c1xx-calextr: output implemented
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sat, 18 Nov 2017 17:58:35 +0000 |
| parents | e3d40f49d8c4 |
| children |
| rev | line source |
|---|---|
|
77
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * FreeCalypso buzzer "melodies" have times measured in TDMA frames, |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * as that is the time unit in the main firmware which will ultimately |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * play them. In this standalone buzzer player we simulate TDMA frame |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * timing by programming Calypso TIMER1 with the period of 1875, and |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * we detect timer overflow (one virtual TDMA frame time having passed) |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 * by polling the read register to avoid the need for interrupt handling |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 * infrastructure. |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 */ |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include "types.h" |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include "timer.h" |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 |
|
78
e3d40f49d8c4
buzplayer timer implementation finished
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
14 void |
|
77
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 timer_init() |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 { |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 TIMER1_REGS.cntl = CNTL_CLOCK_ENABLE; |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 TIMER1_REGS.load = 1875; |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 TIMER1_REGS.cntl = CNTL_CLOCK_ENABLE | CNTL_AUTO_RELOAD | CNTL_START; |
|
0f11da299b7d
buzplayer: beginning of timer implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 } |
|
78
e3d40f49d8c4
buzplayer timer implementation finished
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
21 |
|
e3d40f49d8c4
buzplayer timer implementation finished
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
22 void |
|
e3d40f49d8c4
buzplayer timer implementation finished
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
23 wait_for_tdma_frame() |
|
e3d40f49d8c4
buzplayer timer implementation finished
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
24 { |
|
e3d40f49d8c4
buzplayer timer implementation finished
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
25 u16 read1, read2; |
|
e3d40f49d8c4
buzplayer timer implementation finished
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
26 |
|
e3d40f49d8c4
buzplayer timer implementation finished
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
27 read1 = TIMER1_REGS.read; |
|
e3d40f49d8c4
buzplayer timer implementation finished
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
28 for (;;) { |
|
e3d40f49d8c4
buzplayer timer implementation finished
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
29 read2 = TIMER1_REGS.read; |
|
e3d40f49d8c4
buzplayer timer implementation finished
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
30 if (read2 > read1) |
|
e3d40f49d8c4
buzplayer timer implementation finished
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
31 return; |
|
e3d40f49d8c4
buzplayer timer implementation finished
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
32 read1 = read2; |
|
e3d40f49d8c4
buzplayer timer implementation finished
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
33 } |
|
e3d40f49d8c4
buzplayer timer implementation finished
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
34 } |
