qipp
2025-11-07 744722688187eb4991c72464e2bb5e06b244fee7
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
#ifndef _SANECORE_ADSP_DRV_AD_H__
#define _SANECORE_ADSP_DRV_AD_H__
 
 
 
#ifdef _LANGUAGE_C
typedef struct{
    unsigned char rwaddr;
    unsigned char regaddr;
    unsigned char regdata;
} ad1939_reg;
#endif
 
//-------------------------------------------------------------------------------
 
// AD1939 Register address definitions
#define CLKCTRL0    (0)       // PLL and Clock Control register 0
#define CLKCTRL1    (1)       // PLL and Clock Control register 1
#define DACCTRL0    (2)       // DAC control register 0    (R/W)
#define DACCTRL1    (3)       // DAC control register 1    (R/W)
#define DACCTRL2    (4)       // DAC control register 2    (R/W)
#define DACMUTE     (5)       // DAC Individual Channel Mutes
#define DACVOL_L1   (6)       // DAC volume - left 1       (R/W)
#define DACVOL_R1   (7)       // DAC volume - right 1      (R/W)
#define DACVOL_L2   (8)       // DAC volume - left 2       (R/W)
#define DACVOL_R2   (9)       // DAC volume - right 2      (R/W)
#define DACVOL_L3   (10)      // DAC volume - left 3       (R/W)
#define DACVOL_R3   (11)      // DAC volume - right 3      (R/W)
#define DACVOL_L4   (12)      // DAC volume - left 4       (R/W)
#define DACVOL_R4   (13)      // DAC volume - right 4      (R/W)
#define ADCCTRL0    (14)      // ADC control 0             (R/W)
#define ADCCTRL1    (15)      // ADC control 1             (R/W)
#define ADCCTRL2    (16)      // ADC control 2             (R/W)
 
//-------------------------------------------------------------------------------
// Global register bit definitions
#define RD(address)     ((address<<1)|1)
#define WR(address)     (address<<1)       // Write to register
 
#define AD1939_ADDR (4)    // Global Address of any ad1939
 
//-------------------------------------------------------------------------------
// PLL and Clock Control 0 Register
#define DIS_ADC_DAC         (0x00)
#define ENA_ADC_DAC         (0x80)
 
#define PLL_IN_MCLK         (0x00)
#define PLL_IN_DLRCLK       (0x20)
#define PLL_IN_ALRCLK       (0x40)
 
#define MCLK_OUT_XTAL       (0x00)
#define MCLK_OUT_256FS      (0x08)
#define MCLK_OUT_512FS      (0x10)
#define MCLK_OUT_OFF        (0x18)
 
#define INPUT256            (0x00)
#define INPUT384            (0x02)
#define INPUT512            (0x04)
#define INPUT768            (0x06)
 
#define PLL_PWR_UP          (0x00)
#define PLL_PWR_DWN         (0x01)
 
//-------------------------------------------------------------------------------
// PLL and Clock Control 1 Register
#define AD1938_PLL_LOCK     (0x08)
 
#define DIS_VREF            (0x00)
#define ENA_VREF            (0x40)
 
#define ADC_CLK_PLL         (0x00)
#define ADC_CLK_MCLK        (0x20)
 
#define DAC_CLK_PLL         (0x00)
#define DAC_CLK_MCLK        (0x01)
 
//-------------------------------------------------------------------------------
// DAC Control Register 0 
#define DAC_FMT_I2S         (0x00)
#define DAC_FMT_TDM         (0x40)
#define DAC_FMT_AUX         (0x80)
#define DAC_FMT_DUALTDM     (0xc0)
 
 
#define DAC_BCLK_DLY_1      (0x00)
#define DAC_BCLK_DLY_0      (0x08)
#define DAC_BCLK_DLY_8      (0x01)
#define DAC_BCLK_DLY_12     (0x18)
#define DAC_BCLK_DLY_16     (0x20)
 
#define DAC_SR_48K          (0x00)
#define DAC_SR_96K          (0x02)
#define DAC_SR_192K         (0x04)
 
#define DAC_PWR_UP          (0x00)
#define DAC_PWR_DWN         (0x01)
 
//-------------------------------------------------------------------------------
// DAC Control Register 1 
#define DAC_BCLK_POL_NORM       (0x00)
#define DAC_BCLK_POL_INV        (0x80)
 
#define DAC_BCLK_SRC_PIN        (0x00)
#define DAC_BCLK_SRC_INTERNAL   (0x40)
 
#define DAC_BCLK_SLAVE          (0x00)
#define DAC_BCLK_MASTER         (0x20)
 
#define DAC_LRCLK_SLAVE         (0x00)
#define DAC_LRCLK_MASTER        (0x10)
 
#define DAC_LRCLK_POL_NORM      (0x00)
#define DAC_LRCLK_POL_INV       (0x08)
 
#define DAC_CHANNELS_2          (0x00)
#define DAC_CHANNELS_4          (0x02)
#define DAC_CHANNELS_8          (0x04)
#define DAC_CHANNELS_16         (0x06)
 
#define DAC_LATCH_MID           (0x00)
#define DAC_LATCH_END           (0x01)
 
//-------------------------------------------------------------------------------
// DAC Control Register 2
#define DAC_OUT_POL_NORM    (0x00)
#define DAC_OUT_POL_INV     (0x20)
 
#define DAC_WIDTH_24        (0x00)
#define DAC_WIDTH_20        (0x08)
#define DAC_WIDTH_16        (0x18)
 
#define DAC_DEEMPH_FLAT     (0x00)
#define DAC_DEEMPH_48K      (0x02)
#define DAC_DEEMPH_44_1K    (0x04)
#define DAC_DEEMPH_32K      (0x06)
 
#define DAC_UNMUTE_ALL      (0x00)
#define DAC_MUTE_ALL        (0x01)
 
//-------------------------------------------------------------------------------
// DAC Individual Channel Mute Register
#define DACMUTE_R4    (0x80)
#define DACMUTE_L4    (0x40)
#define DACMUTE_R3    (0x20)
#define DACMUTE_L3    (0x10)
#define DACMUTE_R2    (0x08)
#define DACMUTE_L2    (0x04)
#define DACMUTE_R1    (0x02)
#define DACMUTE_L1    (0x01)
 
//-------------------------------------------------------------------------------
//DAC Volume Control Register - 8-bit granularity (256 levels)
#define DACVOL_MIN      (0xFF)
#define DACVOL_LOW      (0xC0)
#define DACVOL_MED      (0x80)
#define DACVOL_HI       (0x40)
#define DACVOL_MAX      (0x00)
#define DACVOL_MASK     (0xFF)  // Volume in dB
 
 
//-------------------------------------------------------------------------------
//  ADC Control 0 Register
#define ADC_SR_48K          (0x00)
#define ADC_SR_96K          (0x40)
#define ADC_SR_192K         (0x80)
 
#define ADC_R2_UNMUTE       (0x00)
#define ADC_R2_MUTE         (0x20)
 
#define ADC_L2_UNMUTE       (0x00)
#define ADC_L2_MUTE         (0x10)
 
#define ADC_R1_UNMUTE       (0x00)
#define ADC_R1_MUTE         (0x08)
 
#define ADC_L1_UNMUTE       (0x00)
#define ADC_L1_MUTE         (0x04)
 
#define ADC_HP_FILT_OFF     (0x00)
#define ADC_HP_FILT_ON      (0x02)
 
#define ADC_PWR_UP          (0x00)
#define ADC_PWN_DWN         (0x01)
 
//-------------------------------------------------------------------------------
//  ADC Control 1 Register
#define ADC_LATCH_MID       (0x00)
#define ADC_LATCH_END       (0x80)
 
#define ADC_FMT_I2S         (0x00)
#define ADC_FMT_TDM         (0x20)
#define ADC_FMT_AUX         (0x40)
 
#define ADC_BCLK_DLY_1      (0x00)
#define ADC_BCLK_DLY_0      (0x04)
#define ADC_BCLK_DLY_8      (0x08)
#define ADC_BCLK_DLY_12     (0x0c)
#define ADC_BCLK_DLY_16     (0x10)
 
#define ADC_WIDTH_24        (0x00)
#define ADC_WIDTH_20        (0x01)
#define ADC_WIDTH_16        (0x03)
 
//-------------------------------------------------------------------------------
//  ADC Control 2 Register
#define ADC_BCLK_SRC_PIN        (0x00)
#define ADC_BCLK_SRC_INTERNAL   (0x80)
 
#define ADC_BCLK_SLAVE          (0x00)
#define ADC_BCLK_MASTER         (0x40)
 
#define ADC_CHANNELS_2          (0x00)
#define ADC_CHANNELS_4          (0x10)
#define ADC_CHANNELS_8          (0x20)
#define ADC_CHANNELS_16         (0x30)
 
#define ADC_LRCLK_SLAVE         (0x00)
#define ADC_LRCLK_MASTER        (0x08)
 
#define ADC_LRCLK_POL_NORM      (0x00)
#define ADC_LRCLK_POL_INV       (0x04)
 
#define ADC_BCLK_POL_NORM       (0x00)
#define ADC_BCLK_POL_INV        (0x02)
 
#define ADC_LRCLK_FMT_50_50     (0x00)
#define ADC_LRCLK_FMT_PULSE     (0x01)
 
 
 
 
#define AD1939_CS DS0EN
 
 
 
void Init1939viaSPI1(void);
void Init1939viaSPI(void);
 
 
#endif