annotate src/cs/drivers/drv_app/buzzer/pwt.c @ 292:0f688d07b068

block deep sleep on activity in new PWT and vibrator drivers
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 27 Mar 2022 00:29:19 +0000
parents a72feaed133a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
290
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This C module is a FreeCalypso addition: it implements hw driver functions
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * for Calypso buzzer output in PWT mode.
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 */
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 #include "main/sys_types.h"
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include "pwt.h"
291
a72feaed133a PWT buzzer driver: conditionalize on TARGET_HAS_BUZZER
Mychaela Falconia <falcon@freecalypso.org>
parents: 290
diff changeset
8 #include "fc-target.h"
290
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #define ASIC_CONF_REG (*(volatile SYS_UWORD16 *) 0xFFFEF008)
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #define PWT_MODE_MASK 0x0020
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 #define PWT_FRC_REG (*(volatile SYS_UWORD8 *) 0xFFFE8800)
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #define PWT_VCR_REG (*(volatile SYS_UWORD8 *) 0xFFFE8801)
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 #define PWT_GCR_REG (*(volatile SYS_UWORD8 *) 0xFFFE8802)
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 /* flag tells L1 to suppress deep sleep */
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 SYS_BOOL PWT_tone_is_on;
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 void PWT_block_on(void)
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 {
291
a72feaed133a PWT buzzer driver: conditionalize on TARGET_HAS_BUZZER
Mychaela Falconia <falcon@freecalypso.org>
parents: 290
diff changeset
22 #ifdef TARGET_HAS_BUZZER
290
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 ASIC_CONF_REG |= PWT_MODE_MASK;
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 PWT_GCR_REG = 0x01;
291
a72feaed133a PWT buzzer driver: conditionalize on TARGET_HAS_BUZZER
Mychaela Falconia <falcon@freecalypso.org>
parents: 290
diff changeset
25 #endif
290
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 }
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 void PWT_block_off(void)
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 {
291
a72feaed133a PWT buzzer driver: conditionalize on TARGET_HAS_BUZZER
Mychaela Falconia <falcon@freecalypso.org>
parents: 290
diff changeset
30 #ifdef TARGET_HAS_BUZZER
290
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 ASIC_CONF_REG &= ~PWT_MODE_MASK;
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 PWT_GCR_REG = 0;
291
a72feaed133a PWT buzzer driver: conditionalize on TARGET_HAS_BUZZER
Mychaela Falconia <falcon@freecalypso.org>
parents: 290
diff changeset
33 #endif
290
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 }
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 void PWT_play_tone(SYS_UWORD8 note, SYS_UWORD8 volume)
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 {
291
a72feaed133a PWT buzzer driver: conditionalize on TARGET_HAS_BUZZER
Mychaela Falconia <falcon@freecalypso.org>
parents: 290
diff changeset
38 #ifdef TARGET_HAS_BUZZER
290
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 PWT_FRC_REG = note;
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 PWT_VCR_REG = (volume << 1) | 1;
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 PWT_tone_is_on = 1;
291
a72feaed133a PWT buzzer driver: conditionalize on TARGET_HAS_BUZZER
Mychaela Falconia <falcon@freecalypso.org>
parents: 290
diff changeset
42 #endif
290
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 }
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 void PWT_stop_tone(void)
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 {
291
a72feaed133a PWT buzzer driver: conditionalize on TARGET_HAS_BUZZER
Mychaela Falconia <falcon@freecalypso.org>
parents: 290
diff changeset
47 #ifdef TARGET_HAS_BUZZER
290
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 PWT_VCR_REG = 0;
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 PWT_tone_is_on = 0;
291
a72feaed133a PWT buzzer driver: conditionalize on TARGET_HAS_BUZZER
Mychaela Falconia <falcon@freecalypso.org>
parents: 290
diff changeset
50 #endif
290
0e5ccb343284 implement PWT buzzer driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 }