FreeCalypso > hg > freecalypso-tools
annotate target-utils/buzplayer/timer.c @ 516:8bdbae4c0e53
target-utils/helloapp: build boot-ROM-based and fixed-UART versions
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 29 May 2019 05:40:51 +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 } |