blob: 9c0c2e450299d3410908731c977eae8f70ac9d53 (
plain)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
/*---------------------------------------------------------------------------------
ARM7 audio control
Copyright (C) 2005
Michael Noland (joat)
Jason Rogers (dovoto)
Dave Murphy (WinterMute)
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any
damages arising from the use of this software.
Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it and
redistribute it freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you
must not claim that you wrote the original software. If you use
this software in a product, an acknowledgment in the product
documentation would be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and
must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
---------------------------------------------------------------------------------*/
#ifndef AUDIO_ARM7_INCLUDE
#define AUDIO_ARM7_INCLUDE
//---------------------------------------------------------------------------------
// Sound (ARM7 only)
//---------------------------------------------------------------------------------
#ifndef ARM7
#error Audio is only available on the ARM7
#endif
#ifdef __cplusplus
extern "C" {
#endif
#include <nds/arm7/serial.h>
#define SOUND_VOL(n) (n)
#define SOUND_FREQ(n) ((-0x1000000 / (n)))
#define SOUND_ENABLE BIT(15)
#define SOUND_REPEAT BIT(27)
#define SOUND_ONE_SHOT BIT(28)
#define SOUND_FORMAT_16BIT (1<<29)
#define SOUND_FORMAT_8BIT (0<<29)
#define SOUND_FORMAT_PSG (3<<29)
#define SOUND_FORMAT_ADPCM (2<<29)
#define SOUND_16BIT (1<<29)
#define SOUND_8BIT (0)
#define SOUND_PAN(n) ((n) << 16)
#define SCHANNEL_ENABLE BIT(31)
//---------------------------------------------------------------------------------
// registers
//---------------------------------------------------------------------------------
#define SCHANNEL_CR(n) (*(vuint32*)(0x04000400 + ((n)<<4)))
#define SCHANNEL_VOL(n) (*(vuint8*)(0x04000400 + ((n)<<4)))
#define SCHANNEL_PAN(n) (*(vuint8*)(0x04000402 + ((n)<<4)))
#define SCHANNEL_SOURCE(n) (*(vuint32*)(0x04000404 + ((n)<<4)))
#define SCHANNEL_TIMER(n) (*(vint16*)(0x04000408 + ((n)<<4)))
#define SCHANNEL_REPEAT_POINT(n) (*(vuint16*)(0x0400040A + ((n)<<4)))
#define SCHANNEL_LENGTH(n) (*(vuint32*)(0x0400040C + ((n)<<4)))
#define SOUND_CR (*(vuint16*)0x04000500)
#define SOUND_MASTER_VOL (*(vuint8*)0x04000500)
//---------------------------------------------------------------------------------
// not sure on the following
//---------------------------------------------------------------------------------
#define SOUND_BIAS (*(vuint16*)0x04000504)
#define SOUND508 (*(vuint16*)0x04000508)
#define SOUND510 (*(vuint16*)0x04000510)
#define SOUND514 (*(vuint16*)0x04000514)
#define SOUND518 (*(vuint16*)0x04000518)
#define SOUND51C (*(vuint16*)0x0400051C)
/*---------------------------------------------------------------------------------
microphone code based on neimod's microphone example.
See: http://neimod.com/dstek/
Chris Double (chris.double@double.co.nz)
http://www.double.co.nz/nintendo_ds
---------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------
Read a byte from the microphone
---------------------------------------------------------------------------------*/
u8 MIC_ReadData(void);
/*---------------------------------------------------------------------------------
Fill the buffer with data from the microphone. The buffer will be
signed sound data at 16kHz. Once the length of the buffer is
reached, no more data will be stored. Uses ARM7 timer 0.
---------------------------------------------------------------------------------*/
void StartRecording(u8* buffer, int length);
/*---------------------------------------------------------------------------------
Stop recording data, and return the length of data recorded.
---------------------------------------------------------------------------------*/
int StopRecording(void);
/* This must be called during IRQ_TIMER0 */
void ProcessMicrophoneTimerIRQ(void);
void PM_SetAmp(u8 control);
//---------------------------------------------------------------------------------
// Turn the microphone on
//---------------------------------------------------------------------------------
static inline void MIC_On(void) {
//---------------------------------------------------------------------------------
PM_SetAmp(PM_AMP_ON);
}
//---------------------------------------------------------------------------------
// Turn the microphone off
//---------------------------------------------------------------------------------
static inline void MIC_Off(void) {
//---------------------------------------------------------------------------------
PM_SetAmp(PM_AMP_OFF);
}
#ifdef __cplusplus
}
#endif
#endif
|