2 * Copyright © 2010 Keith Packard <keithp@keithp.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License.
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
20 __xdata uint8_t ao_audio_dma;
21 __xdata uint8_t ao_audio_dma_done;
22 __xdata uint8_t ao_audio_mutex;
24 __code uint8_t ao_audio_sound[] = {
25 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 125, 125, 123, 123, 123,
26 125, 125, 123, 123, 123, 125, 125, 123, 123, 125, 125, 125, 125, 125, 126, 126,
27 128, 126, 126, 126, 126, 126, 126, 128, 128, 128, 128, 128, 128, 130, 130, 130,
28 130, 131, 131, 131, 130, 130, 130, 128, 130, 128, 128, 128, 128, 128, 130, 130,
29 130, 130, 131, 131, 130, 130, 128, 128, 130, 131, 130, 130, 130, 131, 133, 131,
30 128, 128, 128, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128,
31 130, 128, 126, 126, 126, 128, 128, 126, 128, 130, 128, 126, 126, 128, 128, 126,
32 125, 125, 128, 128, 128, 128, 125, 128, 130, 130, 130, 128, 128, 126, 128, 126,
33 126, 126, 125, 126, 128, 126, 126, 125, 125, 128, 130, 128, 123, 122, 123, 128,
34 126, 123, 125, 126, 128, 128, 125, 123, 122, 123, 125, 125, 125, 125, 125, 126,
35 126, 125, 123, 125, 128, 128, 126, 126, 125, 123, 123, 125, 126, 125, 125, 126,
36 126, 126, 128, 128, 126, 126, 128, 130, 128, 128, 126, 126, 128, 126, 126, 126,
37 126, 128, 130, 130, 128, 126, 125, 126, 130, 130, 128, 125, 126, 128, 130, 128,
38 126, 125, 126, 130, 133, 131, 128, 126, 130, 131, 131, 128, 128, 130, 133, 133,
39 133, 130, 130, 133, 134, 134, 133, 130, 131, 131, 131, 131, 130, 128, 128, 128,
40 130, 128, 125, 125, 126, 130, 128, 125, 125, 126, 126, 126, 126, 125, 126, 125,
41 130, 130, 128, 126, 126, 128, 128, 126, 126, 128, 126, 126, 128, 128, 130, 128,
42 126, 128, 128, 131, 130, 130, 128, 128, 128, 125, 126, 126, 125, 125, 125, 125,
43 125, 125, 126, 126, 126, 126, 125, 123, 123, 123, 125, 123, 123, 125, 125, 125,
44 125, 125, 126, 126, 125, 123, 123, 126, 126, 128, 128, 128, 128, 128, 128, 128,
45 131, 126, 126, 128, 130, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126, 128,
46 126, 126, 126, 126, 125, 125, 123, 125, 125, 125, 125, 125, 125, 125, 125, 126,
47 126, 126, 126, 126, 126, 126, 126, 128, 128, 126, 126, 128, 130, 130, 131, 133,
48 133, 131, 130, 130, 128, 128, 126, 128, 128, 128, 128, 130, 130, 131, 130, 131,
49 131, 128, 131, 128, 130, 130, 130, 130, 130, 130, 131, 133, 133, 131, 131, 130,
50 130, 131, 133, 131, 130, 130, 131, 134, 133, 130, 128, 126, 128, 130, 131, 131,
51 128, 126, 128, 130, 128, 126, 125, 125, 125, 125, 126, 126, 126, 125, 125, 126,
52 126, 125, 126, 126, 125, 125, 123, 125, 125, 125, 123, 123, 123, 123, 123, 123,
53 123, 123, 123, 123, 125, 125, 126, 126, 125, 123, 123, 125, 125, 123, 123, 122,
54 122, 122, 123, 126, 126, 125, 126, 126, 128, 126, 125, 126, 125, 126, 125, 126,
55 126, 126, 128, 128, 126, 125, 125, 125, 126, 126, 130, 130, 130, 128, 128, 130,
56 130, 126, 126, 125, 123, 123, 123, 125, 123, 122, 122, 120, 122, 125, 125, 125,
57 123, 125, 126, 128, 128, 126, 128, 125, 126, 128, 130, 131, 130, 131, 131, 133,
58 133, 130, 130, 131, 131, 131, 131, 133, 133, 134, 133, 133, 133, 131, 131, 130,
59 131, 131, 131, 130, 128, 130, 130, 131, 131, 133, 131, 133, 131, 133, 133, 133,
60 134, 134, 136, 134, 134, 134, 134, 133, 133, 133, 133, 131, 128, 128, 125, 120,
61 119, 116, 112, 111, 108, 106, 106, 108, 109, 109, 109, 108, 106, 106, 106, 109,
62 111, 114, 116, 120, 123, 125, 128, 131, 133, 136, 139, 139, 140, 139, 139, 137,
63 137, 139, 140, 139, 137, 140, 142, 144, 145, 144, 142, 142, 142, 142, 142, 140,
64 139, 139, 137, 137, 137, 136, 136, 136, 134, 133, 130, 128, 126, 125, 123, 120,
65 116, 112, 108, 103, 98, 95, 91, 86, 83, 80, 77, 70, 66, 61, 61, 67,
66 78, 95, 105, 117, 123, 130, 140, 145, 151, 161, 164, 161, 161, 159, 156, 156,
67 156, 159, 161, 158, 159, 162, 162, 165, 169, 167, 165, 159, 153, 148, 142, 136,
68 131, 125, 122, 120, 120, 122, 126, 130, 133, 137, 140, 144, 144, 140, 137, 130,
69 125, 123, 119, 116, 114, 108, 101, 94, 89, 87, 86, 81, 75, 70, 64, 61,
70 66, 83, 101, 126, 144, 153, 173, 184, 172, 162, 162, 151, 140, 134, 130, 128,
71 123, 119, 126, 133, 134, 144, 151, 153, 158, 159, 162, 164, 158, 151, 145, 133,
72 116, 105, 98, 95, 92, 95, 105, 109, 114, 122, 131, 142, 151, 155, 158, 159,
73 156, 151, 150, 145, 139, 136, 137, 140, 142, 145, 151, 159, 162, 165, 165, 161,
74 153, 139, 126, 114, 97, 81, 67, 55, 42, 31, 23, 19, 20, 25, 34, 50,
75 66, 86, 117, 147, 169, 186, 184, 176, 172, 159, 153, 151, 147, 144, 137, 131,
76 130, 128, 126, 136, 147, 158, 161, 159, 158, 156, 156, 156, 156, 151, 139, 128,
77 119, 109, 108, 111, 112, 119, 125, 125, 130, 133, 134, 142, 145, 147, 148, 144,
78 139, 134, 130, 123, 122, 119, 112, 105, 95, 89, 81, 77, 69, 55, 45, 44,
79 55, 86, 128, 164, 189, 189, 170, 158, 147, 137, 148, 158, 159, 156, 140, 123,
80 117, 116, 126, 145, 156, 159, 151, 137, 133, 136, 147, 161, 164, 156, 139, 117,
81 101, 94, 94, 105, 116, 122, 123, 120, 119, 123, 131, 147, 162, 169, 169, 158,
82 145, 136, 133, 137, 145, 144, 139, 131, 123, 123, 126, 134, 139, 136, 125, 114,
83 101, 91, 81, 70, 61, 47, 30, 14, 0, 8, 44, 86, 126, 158, 161, 155,
84 151, 144, 151, 172, 187, 198, 195, 175, 156, 140, 130, 137, 150, 158, 156, 140,
85 123, 114, 116, 131, 147, 156, 162, 151, 136, 122, 114, 120, 131, 137, 145, 142,
86 130, 122, 116, 119, 133, 144, 151, 147, 133, 120, 112, 117, 130, 142, 148, 145,
87 134, 120, 112, 108, 108, 108, 105, 91, 72, 50, 33, 27, 33, 56, 89, 119,
88 144, 156, 145, 139, 140, 139, 150, 165, 173, 178, 172, 158, 148, 140, 139, 147,
89 155, 158, 156, 147, 139, 136, 136, 145, 153, 158, 153, 140, 130, 116, 108, 112,
90 125, 134, 142, 140, 136, 133, 128, 133, 144, 153, 161, 162, 155, 145, 134, 133,
91 137, 139, 139, 134, 123, 112, 105, 101, 105, 105, 105, 100, 89, 72, 58, 44,
92 34, 34, 42, 58, 84, 111, 128, 134, 131, 131, 134, 131, 140, 155, 162, 172,
93 172, 165, 159, 148, 145, 150, 150, 150, 148, 140, 133, 125, 120, 125, 131, 133,
94 136, 130, 125, 117, 112, 117, 126, 133, 139, 142, 140, 137, 134, 136, 140, 147,
95 147, 148, 140, 133, 126, 126, 131, 134, 139, 140, 137, 133, 125, 119, 116, 111,
96 108, 101, 91, 75, 58, 41, 30, 28, 39, 66, 101, 131, 147, 145, 142, 140,
97 136, 142, 159, 172, 179, 181, 172, 162, 148, 139, 140, 147, 150, 153, 148, 139,
98 131, 125, 128, 136, 144, 150, 151, 144, 133, 122, 117, 123, 134, 142, 147, 147,
99 144, 136, 130, 134, 144, 155, 162, 162, 155, 145, 137, 137, 140, 144, 147, 145,
100 136, 123, 114, 106, 103, 100, 98, 94, 84, 66, 48, 31, 23, 30, 48, 84,
101 123, 150, 158, 151, 147, 142, 133, 142, 158, 167, 173, 172, 159, 145, 131, 123,
102 130, 136, 140, 145, 139, 126, 120, 117, 123, 133, 139, 145, 144, 131, 120, 111,
103 108, 117, 130, 142, 145, 144, 136, 130, 126, 133, 148, 158, 161, 158, 144, 133,
104 126, 126, 133, 140, 144, 142, 131, 122, 114, 109, 108, 105, 98, 91, 75, 56,
105 39, 25, 20, 28, 52, 87, 126, 155, 165, 161, 156, 151, 142, 147, 161, 167,
106 172, 169, 156, 142, 128, 122, 126, 136, 144, 148, 145, 136, 130, 131, 137, 144,
107 151, 156, 156, 139, 123, 114, 108, 116, 128, 139, 148, 147, 137, 134, 133, 139,
108 156, 165, 169, 165, 151, 136, 128, 125, 131, 139, 140, 137, 130, 122, 116, 109,
109 105, 101, 97, 86, 70, 50, 31, 19, 17, 33, 67, 114, 158, 186, 184, 173,
110 164, 144, 136, 148, 159, 165, 169, 156, 139, 123, 109, 114, 126, 139, 151, 153,
111 145, 134, 133, 137, 147, 151, 155, 155, 144, 120, 98, 95, 94, 106, 126, 139,
112 145, 142, 133, 134, 139, 148, 167, 175, 169, 155, 134, 119, 112, 114, 126, 137,
113 140, 137, 131, 126, 123, 122, 119, 116, 108, 91, 69, 44, 22, 11, 13, 27,
114 56, 98, 137, 170, 179, 169, 167, 161, 145, 151, 159, 158, 159, 153, 139, 131,
115 120, 116, 128, 137, 145, 156, 156, 148, 148, 148, 153, 155, 151, 148, 142, 130,
116 105, 95, 98, 105, 120, 136, 145, 150, 145, 142, 148, 156, 165, 175, 173, 159,
117 139, 123, 114, 112, 119, 131, 144, 144, 140, 137, 133, 126, 122, 117, 109, 97,
118 73, 50, 28, 13, 9, 20, 45, 91, 134, 173, 190, 179, 172, 169, 155, 147,
119 159, 159, 156, 155, 134, 119, 112, 108, 119, 134, 145, 155, 159, 150, 147, 151,
120 151, 158, 158, 150, 137, 122, 100, 89, 87, 95, 112, 131, 140, 144, 144, 139,
121 140, 150, 162, 173, 172, 161, 140, 120, 109, 111, 117, 128, 139, 145, 145, 142,
122 139, 136, 131, 126, 114, 98, 80, 58, 38, 20, 11, 11, 16, 33, 70, 109,
123 148, 184, 189, 183, 184, 165, 144, 148, 148, 142, 145, 131, 116, 112, 106, 106,
124 125, 140, 151, 167, 164, 153, 155, 155, 155, 156, 150, 137, 125, 101, 86, 89,
125 87, 95, 125, 140, 144, 150, 148, 145, 155, 164, 172, 176, 165, 148, 133, 117,
126 112, 122, 131, 142, 151, 155, 153, 151, 147, 142, 139, 126, 108, 91, 70, 48,
127 28, 17, 13, 17, 25, 47, 86, 126, 170, 198, 198, 194, 187, 164, 145, 147,
128 140, 136, 137, 123, 111, 111, 106, 114, 134, 150, 164, 173, 169, 161, 161, 156,
129 153, 150, 140, 130, 112, 87, 69, 72, 86, 98, 112, 137, 151, 153, 148, 150,
130 161, 170, 170, 173, 165, 142, 125, 116, 111, 117, 130, 140, 147, 151, 151, 153,
131 153, 145, 139, 130, 109, 86, 67, 48, 31, 22, 14, 11, 17, 28, 56, 95,
132 139, 184, 204, 197, 195, 181, 148, 139, 137, 134, 136, 134, 120, 112, 109, 105,
133 119, 137, 153, 170, 175, 161, 151, 148, 139, 137, 137, 131, 122, 105, 80, 66,
134 69, 86, 111, 125, 145, 164, 162, 155, 156, 164, 169, 169, 164, 156, 142, 122,
135 114, 117, 126, 139, 155, 162, 162, 165, 161, 150, 140, 130, 120, 109, 89, 67,
136 52, 36, 22, 14, 14, 22, 39, 70, 108, 153, 194, 208, 200, 198, 181, 151,
137 144, 144, 140, 147, 144, 130, 125, 117, 112, 126, 144, 158, 172, 175, 159, 153,
138 150, 142, 142, 142, 134, 123, 109, 84, 72, 72, 78, 100, 126, 142, 153, 164,
139 167, 162, 162, 165, 165, 161, 150, 137, 125, 116, 114, 122, 136, 150, 161, 165,
140 164, 162, 155, 147, 139, 128, 116, 100, 81, 61, 45, 28, 16, 11, 5, 9,
141 25, 55, 91, 137, 186, 206, 204, 204, 192, 164, 148, 147, 142, 145, 145, 133,
142 125, 117, 106, 108, 122, 134, 148, 158, 151, 148, 147, 139, 137, 140, 139, 133,
143 123, 105, 87, 80, 77, 86, 100, 120, 137, 150, 161, 167, 170, 169, 167, 165,
144 158, 147, 137, 133, 130, 133, 139, 145, 155, 159, 164, 165, 167, 161, 151, 140,
145 126, 114, 101, 84, 67, 53, 38, 22, 9, 2, 2, 17, 41, 80, 125, 172,
146 208, 215, 209, 204, 187, 165, 159, 158, 153, 153, 144, 130, 120, 111, 103, 111,
147 126, 139, 151, 155, 148, 148, 148, 147, 150, 153, 148, 142, 130, 108, 94, 86,
148 81, 86, 97, 111, 125, 134, 144, 161, 169, 169, 169, 169, 162, 151, 140, 136,
149 140, 140, 145, 153, 159, 164, 169, 167, 162, 161, 150, 137, 126, 114, 98, 80,
150 62, 44, 30, 17, 6, 0, 2, 9, 27, 58, 100, 144, 190, 212, 211, 206,
151 195, 167, 147, 144, 137, 137, 139, 128, 119, 109, 95, 92, 103, 116, 131, 148,
152 151, 153, 156, 150, 147, 148, 147, 142, 137, 120, 101, 87, 77, 72, 77, 89,
153 100, 109, 123, 134, 151, 169, 175, 179, 181, 175, 159, 150, 144, 142, 145, 153,
154 161, 167, 172, 169, 164, 161, 156, 150, 142, 134, 123, 111, 94, 75, 59, 45,
155 36, 28, 22, 20, 20, 27, 47, 80, 117, 159, 198, 214, 211, 208, 189, 162,
156 150, 144, 139, 148, 150, 144, 136, 123, 106, 101, 106, 117, 137, 151, 159, 164,
157 162, 150, 140, 134, 131, 130, 128, 120, 109, 100, 86, 81, 81, 87, 100, 111,
158 117, 130, 150, 162, 165, 173, 179, 181, 175, 165, 159, 156, 151, 148, 155, 162,
159 169, 172, 170, 165, 161, 153, 140, 130, 122, 112, 100, 84, 70, 56, 45, 31,
160 22, 19, 16, 17, 27, 44, 70, 105, 139, 175, 198, 203, 200, 192, 169, 151,
161 142, 137, 144, 153, 155, 148, 139, 119, 106, 103, 103, 120, 134, 144, 148, 148,
162 140, 130, 122, 117, 120, 123, 123, 119, 112, 101, 91, 84, 84, 87, 92, 98,
163 105, 114, 134, 158, 169, 181, 190, 189, 183, 173, 165, 162, 165, 164, 170, 178,
164 179, 173, 165, 158, 150, 147, 140, 133, 126, 119, 108, 95, 83, 72, 64, 55,
165 44, 34, 25, 22, 20, 28, 48, 75, 106, 140, 178, 197, 200, 204, 195, 181,
166 169, 164, 161, 165, 169, 162, 158, 144, 122, 106, 97, 98, 108, 120, 128, 140,
167 147, 142, 136, 130, 125, 126, 126, 126, 126, 123, 111, 100, 89, 83, 81, 83,
168 91, 101, 114, 125, 148, 170, 179, 187, 194, 192, 187, 179, 170, 169, 170, 169,
169 172, 175, 173, 167, 159, 151, 145, 142, 133, 125, 122, 114, 105, 92, 81, 67,
170 56, 45, 33, 28, 22, 19, 19, 27, 41, 64, 97, 126, 164, 195, 204, 208,
171 208, 192, 169, 159, 150, 150, 156, 151, 147, 140, 125, 106, 97, 91, 94, 108,
172 119, 131, 142, 144, 137, 131, 123, 116, 112, 112, 112, 114, 112, 106, 100, 94,
173 92, 91, 95, 106, 122, 136, 147, 155, 162, 169, 172, 178, 187, 195, 200, 200,
174 198, 190, 183, 175, 167, 164, 162, 161, 158, 156, 151, 142, 130, 116, 105, 94,
175 86, 81, 75, 73, 69, 64, 56, 48, 42, 36, 36, 42, 53, 70, 94, 117,
176 140, 167, 183, 187, 189, 187, 175, 164, 158, 153, 151, 153, 150, 148, 145, 133,
177 122, 111, 105, 101, 105, 109, 116, 122, 123, 120, 116, 109, 108, 105, 103, 105,
178 108, 109, 111, 111, 111, 114, 114, 116, 123, 131, 139, 148, 161, 172, 181, 189,
179 194, 197, 195, 189, 183, 178, 172, 167, 165, 164, 165, 164, 161, 158, 155, 148,
180 139, 131, 122, 112, 103, 92, 83, 70, 61, 53, 48, 45, 44, 42, 39, 39,
181 41, 44, 53, 66, 87, 111, 133, 156, 178, 183, 181, 178, 164, 148, 142, 136,
182 136, 144, 147, 147, 150, 142, 126, 119, 105, 97, 100, 100, 103, 111, 116, 114,
183 112, 108, 100, 101, 103, 106, 116, 125, 134, 140, 147, 147, 142, 140, 140, 142,
184 147, 150, 156, 162, 165, 164, 164, 167, 172, 179, 187, 197, 201, 203, 200, 190,
185 181, 170, 161, 156, 156, 155, 151, 145, 134, 120, 105, 89, 78, 70, 67, 67,
186 72, 75, 75, 73, 67, 61, 52, 48, 45, 52, 58, 70, 87, 103, 120, 134,
187 148, 155, 155, 159, 156, 148, 148, 147, 147, 151, 153, 151, 150, 144, 130, 120,
188 111, 103, 101, 103, 106, 111, 117, 119, 117, 117, 114, 112, 111, 114, 119, 125,
189 133, 137, 140, 144, 144, 140, 137, 139, 140, 147, 156, 162, 170, 175, 175, 175,
190 176, 178, 181, 187, 192, 194, 192, 187, 178, 170, 158, 150, 142, 139, 137, 134,
191 130, 122, 111, 100, 87, 77, 69, 62, 62, 61, 62, 61, 58, 52, 44, 38,
192 30, 27, 30, 39, 53, 72, 94, 114, 134, 151, 156, 158, 161, 156, 151, 151,
193 153, 156, 162, 164, 164, 162, 153, 139, 128, 117, 109, 108, 108, 111, 120, 123,
194 123, 123, 122, 117, 112, 112, 114, 122, 131, 140, 147, 153, 156, 155, 151, 148,
195 145, 147, 150, 159, 172, 179, 183, 190, 192, 189, 186, 184, 186, 187, 189, 190,
196 192, 187, 181, 172, 162, 153, 144, 136, 128, 122, 116, 106, 95, 84, 72, 59,
197 52, 42, 36, 36, 33, 34, 33, 34, 31, 30, 30, 33, 42, 56, 73, 95,
198 119, 139, 156, 167, 172, 172, 167, 159, 158, 155, 158, 164, 167, 170, 169, 164,
199 150, 142, 128, 116, 112, 109, 109, 114, 117, 119, 119, 116, 111, 106, 105, 103,
200 108, 117, 130, 140, 153, 161, 165, 167, 164, 161, 158, 159, 162, 167, 176, 181,
201 184, 187, 187, 186, 181, 178, 175, 176, 176, 176, 176, 173, 169, 159, 150, 139,
202 128, 119, 109, 101, 92, 83, 75, 66, 55, 45, 38, 31, 28, 28, 28, 31,
203 33, 34, 38, 41, 44, 50, 62, 73, 92, 112, 131, 153, 170, 179, 186, 186,
204 178, 172, 167, 164, 165, 170, 173, 176, 175, 167, 156, 142, 128, 116, 108, 105,
205 105, 111, 117, 122, 125, 123, 120, 119, 116, 116, 120, 128, 140, 155, 167, 176,
206 181, 181, 176, 172, 167, 164, 165, 170, 176, 183, 189, 192, 190, 187, 179, 173,
207 169, 165, 162, 162, 161, 159, 156, 148, 140, 128, 116, 101, 89, 80, 72, 66,
208 61, 56, 50, 45, 39, 31, 25, 23, 22, 23, 27, 33, 38, 45, 53, 61,
209 72, 86, 103, 120, 140, 159, 172, 183, 187, 183, 176, 170, 162, 159, 161, 161,
210 162, 167, 165, 161, 151, 137, 125, 114, 105, 100, 101, 106, 112, 120, 125, 125,
211 123, 120, 117, 117, 120, 128, 139, 153, 165, 175, 184, 184, 183, 179, 173, 169,
212 169, 172, 176, 183, 187, 189, 187, 184, 178, 169, 161, 155, 150, 148, 147, 147,
213 145, 144, 136, 125, 112, 97, 84, 72, 62, 56, 55, 52, 48, 47, 42, 38,
214 33, 30, 28, 28, 31, 34, 44, 53, 64, 75, 87, 101, 116, 130, 145, 158,
215 169, 178, 184, 186, 186, 184, 181, 181, 179, 176, 178, 176, 175, 167, 159, 148,
216 136, 126, 116, 109, 106, 106, 108, 112, 114, 117, 117, 119, 119, 123, 128, 134,
217 144, 155, 167, 175, 181, 184, 187, 186, 183, 181, 178, 176, 176, 178, 178, 178,
218 178, 175, 170, 165, 158, 150, 145, 140, 136, 134, 131, 128, 122, 114, 103, 91,
219 78, 67, 58, 50, 44, 39, 36, 34, 33, 30, 27, 25, 25, 23, 27, 30,
220 36, 45, 58, 72, 84, 101, 119, 136, 151, 164, 175, 184, 187, 189, 189, 187,
221 187, 186, 187, 184, 184, 181, 175, 167, 156, 142, 131, 120, 112, 106, 103, 101,
222 103, 106, 108, 109, 111, 111, 114, 117, 122, 131, 140, 153, 165, 176, 184, 190,
223 194, 194, 192, 189, 184, 183, 181, 179, 178, 178, 178, 175, 172, 165, 159, 151,
224 147, 137, 133, 130, 125, 122, 117, 111, 101, 92, 81, 70, 62, 55, 47, 42,
225 39, 39, 38, 39, 39, 39, 41, 41, 42, 45, 48, 56, 64, 73, 84, 98,
226 112, 126, 142, 156, 169, 179, 187, 190, 192, 192, 192, 192, 194, 195, 195, 195,
227 190, 186, 176, 164, 151, 139, 128, 117, 109, 105, 101, 101, 101, 103, 106, 106,
228 108, 108, 111, 114, 122, 131, 139, 151, 162, 173, 181, 187, 189, 189, 189, 187,
229 186, 184, 181, 179, 176, 175, 172, 169, 162, 156, 148, 140, 131, 122, 114, 106,
230 100, 95, 89, 83, 77, 70, 66, 59, 53, 48, 45, 44, 44, 45, 45, 50,
231 53, 58, 59, 64, 67, 72, 75, 80, 84, 91, 98, 106, 116, 126, 137, 147,
232 156, 162, 170, 172, 176, 178, 181, 183, 183, 186, 186, 187, 187, 184, 181, 176,
233 170, 162, 153, 145, 137, 130, 125, 120, 119, 117, 117, 117, 117, 117, 116, 117,
234 117, 122, 126, 131, 137, 142, 150, 155, 159, 164, 169, 172, 173, 173, 173, 173,
235 173, 170, 169, 164, 159, 155, 151, 147, 140, 134, 128, 120, 111, 103, 97, 91,
236 86, 81, 78, 75, 72, 69, 67, 64, 64, 62, 62, 66, 69, 72, 77, 83,
237 89, 94, 98, 101, 105, 108, 109, 111, 112, 116, 120, 123, 128, 130, 134, 137,
238 140, 144, 145, 147, 147, 148, 148, 148, 148, 150, 153, 155, 155, 155, 155, 155,
239 155, 153, 151, 150, 150, 150, 151, 151, 151, 150, 150, 148, 147, 145, 144, 142,
240 140, 139, 137, 134, 133, 131, 130, 128, 126, 126, 126, 126, 125, 125, 123, 123,
241 123, 123, 123, 122, 122, 123, 123, 123, 123, 122, 122, 122, 122, 120, 119, 119,
242 119, 117, 116, 114, 114, 112, 111, 109, 108, 106, 105, 105, 105, 103, 103, 101,
243 101, 101, 103, 103, 103, 105, 106, 109, 111, 112, 116, 119, 122, 125, 125, 128,
244 131, 133, 134, 137, 140, 144, 145, 147, 150, 151, 155, 155, 158, 159, 159, 161,
245 161, 161, 162, 161, 159, 159, 158, 156, 153, 151, 150, 148, 145, 142, 139, 136,
246 133, 130, 128, 126, 123, 122, 119, 117, 116, 114, 112, 112, 112, 112, 109, 111,
247 111, 111, 111, 112, 112, 114, 116, 117, 119, 119, 122, 123, 125, 125, 126, 126,
248 126, 128, 128, 128, 128, 126, 126, 125, 123, 122, 120, 119, 117, 116, 114, 114,
249 111, 112, 109, 109, 112, 111, 111, 111, 111, 112, 116, 116, 117, 117, 117, 119,
250 119, 120, 122, 123, 126, 128, 130, 131, 133, 136, 137, 137, 140, 140, 142, 144,
251 145, 147, 148, 148, 150, 150, 150, 150, 148, 148, 147, 145, 144, 140, 140, 139,
252 137, 136, 134, 131, 130, 126, 125, 122, 120, 120, 117, 117, 116, 116, 117, 117,
253 117, 117, 119, 122, 122, 123, 126, 126, 128, 128, 130, 131, 131, 131, 131, 131,
254 131, 131, 131, 131, 131, 131, 131, 130, 130, 128, 128, 126, 126, 125, 123, 123,
255 122, 122, 119, 119, 119, 117, 117, 117, 117, 116, 116, 116, 117, 117, 117, 119,
256 119, 119, 120, 122, 123, 125, 126, 128, 130, 131, 133, 134, 136, 137, 137, 140,
257 140, 142, 142, 142, 142, 144, 140, 140, 142, 140, 140, 139, 139, 137, 136, 134,
258 133, 131, 130, 128, 126, 125, 125, 122, 120, 119, 119, 117, 116, 116, 117, 119,
259 120, 120, 120, 122, 122, 125, 125, 125, 126, 128, 128, 128, 128, 128, 130, 131,
260 131, 130, 130, 128, 130, 130, 128, 128, 126, 126, 126, 123, 122, 120, 119, 119,
261 117, 117, 117, 117, 117, 117, 116, 116, 114, 116, 117, 117, 119, 119, 120, 120,
262 122, 123, 125, 125, 126, 126, 128, 128, 130, 131, 131, 133, 134, 136, 136, 137,
263 137, 139, 137, 139, 140, 140, 140, 140, 139, 139, 137, 137, 136, 136, 136, 136,
264 134, 133, 133, 133, 133, 131, 131, 130, 130, 130, 130, 128, 128, 128, 128, 128,
265 128, 128, 128, 128, 130, 130, 128, 130, 128, 131, 131, 131, 131, 130, 131, 131,
266 131, 131, 131, 131, 131, 131, 130, 128, 126, 125, 125, 122, 122, 122, 120, 120,
267 117, 117, 116, 116, 117, 116, 116, 117, 117, 117, 117, 117, 117, 119, 119, 119,
268 120, 120, 120, 122, 122, 122, 123, 123, 126, 126, 128, 130, 130, 130, 131, 133,
269 133, 133, 133, 133, 133, 133, 131, 131, 131, 133, 133, 133, 133, 131, 131, 130,
270 131, 130, 130, 130, 130, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126, 128,
271 126, 126, 126, 128, 128, 128, 128, 128, 130, 130, 128, 128, 128, 130, 130, 128,
272 128, 128, 128, 126, 126, 125, 125, 125, 126, 126, 126, 125, 125, 123, 125, 125,
273 125, 123, 123, 125, 123, 123, 122, 122, 123, 125, 125, 125, 125, 126, 128, 128,
274 130, 128, 131, 133, 131, 134, 133, 134, 136, 134, 134, 134, 134, 134, 134, 136,
275 133, 133, 133, 133, 133, 133, 133, 133, 131, 131, 131, 130, 130, 130, 131, 131,
276 131, 131, 131, 130, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125,
277 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 123, 123, 122, 123, 122, 122,
278 120, 122, 120, 120, 122, 122, 120, 122, 122, 122, 122, 122, 122, 122, 122, 123,
279 123, 123, 123, 125, 125, 125, 125, 126, 126, 126, 126, 126, 128, 128, 128, 130,
282 #define nop() _asm nop _endasm;
285 ao_audio_delay(uint8_t n) {
291 ao_audio_send(__xdata uint8_t *samples, uint16_t nsamples) __reentrant
293 ao_mutex_get(&ao_audio_mutex);
295 #if AUDIO_STANDBY_ON_P2_4
297 * Turn on the audio amp
302 * Turn on timer 4. Free running from 0 to 0xff, with P2_0
303 * 'on' interval controlled by the value in T4CC0. Run this
304 * timer as fast as possible, resulting in a frequency of
305 * 24e6/256 or 93750Hz.
307 T4CCTL0 = TxCCTLy_CMP_SET_UP_CLEAR_DOWN | TxCCTLy_CMP_MODE_ENABLE;
310 T4CTL = TxCTL_DIV_1|TxCTL_START|TxCTL_CLR|TxCTL_MODE_FREE;
311 P2SEL = (P2SEL & ~P2SEL_SELP2_0_MASK) | P2SEL_SELP2_0_PERIPHERAL;
314 * Turn on timer 3 to clock data to the PWM output. This
315 * runs at 24e6/(17 * 128) or 11029Hz, almost exactly the
316 * desired 11025Hz. Each cycle of the counter, a DMA transfer
317 * reads a sample and writes to the T4CC0 register, which
318 * controls the pulse width of the final audio signal
320 T3CCTL0 = TxCCTLy_CMP_SET_UP_CLEAR_DOWN|TxCCTLy_CMP_MODE_ENABLE;
322 T3CTL = TxCTL_DIV_128|TxCTL_START|TxCTL_CLR|TxCTL_MODE_MODULO;
324 uint16_t this_samples;
326 /* Sigh. The DMA engine has only 13 bits of length */
327 if ((this_samples = nsamples) > 0x1fff)
328 this_samples = 0x1fff;
330 * Set up DMA to write samples to T4CC0, triggered by T3 CH0
332 ao_dma_set_transfer(ao_audio_dma,
336 DMA_CFG0_WORDSIZE_8 |
337 DMA_CFG0_TMODE_SINGLE |
338 DMA_CFG0_TRIGGER_T3_CH0,
341 DMA_CFG1_PRIORITY_HIGH);
342 samples += this_samples;
343 nsamples -= this_samples;
344 ao_dma_start(ao_audio_dma);
346 __critical while (!ao_audio_dma_done)
347 ao_sleep(&ao_audio_dma_done);
350 /* Turn the timers back off */
354 /* And pull the GPIO to ground */
356 P2SEL = (P2SEL & ~P2SEL_SELP2_0_MASK) | P2SEL_SELP2_0_GPIO;
358 #if AUDIO_STANDBY_ON_P2_4
360 * Turn off the audio amp
364 ao_mutex_put(&ao_audio_mutex);
370 ao_audio_send(CODE_TO_XDATA(ao_audio_sound), sizeof (ao_audio_sound));
373 __code struct ao_cmds ao_audio_cmds[] = {
374 { 'A', ao_audio_test, "A Audio system test" },
375 { 0, ao_audio_test, NULL },
381 /* The audio amplifier is connected to P2_0, which can
382 * be hooked to timer 4 using configuration alternative 2
385 P2SEL = (P2SEL & ~P2SEL_SELP2_0_MASK) | P2SEL_SELP2_0_GPIO;
386 PERCFG = (PERCFG & ~PERCFG_T4CFG_ALT_MASK) | PERCFG_T4CFG_ALT_2;
388 #if AUDIO_STANDBY_ON_P2_4
390 P2SEL &= ~P2SEL_SELP2_4_PERIPHERAL;
394 /* Timer 3 is used to clock the DMA transfers from the audio data buffer
397 ao_audio_dma = ao_dma_alloc(&ao_audio_dma_done);
398 ao_cmd_register(&ao_audio_cmds[0]);