Subversion Repositories shark

Rev

Rev 1655 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1655 giacomo 1
/*****************************************************************************
2
* Filename:       ADC.C                                                      *      
3
* Author:         Ghiro Andrea,Franchino Gianluca                            *
4
* Date:           06/06/2001                                                 *
5
* Description:    Analog 2 digital conversion functions                      *
6
*----------------------------------------------------------------------------*
7
* Notes:                Funcion for one sample from Ch0                      *
8
*****************************************************************************/
9
 
10
/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
11
 *
12
 * Copyright (C) 2003 Ghiro Andrea,Franchino Gianluca
13
 *
14
 * This program is free software; you can redistribute it and/or modify
15
 * it under the terms of the GNU General Public License as published by
16
 * the Free Software Foundation; either version 2 of the License, or
17
 * (at your option) any later version.
18
 *
19
 * This program is distributed in the hope that it will be useful,
20
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22
 * GNU General Public License for more details.
23
 *
24
 * You should have received a copy of the GNU General Public License
25
 * along with this program; if not, write to the Free Software
26
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
27
 *
28
 */
29
 
30
#include "adc.h"
31
 
32
/*
33
* Call this function to configure board options.
34
*/
35
 
36
void Configure_Board(BYTE numch)
37
{
38
WORD memhi;
39
  /*
40
  * Writing to register Write_Strobe_0_Register with address 82.
41
  *    Write_Strobe_0 <= 1
42
  * New pattern = 0x0001
43
  */
44
  DAQ_STC_Windowed_Mode_Write(WRITE_STROBE_0,0x0001);
45
 
46
  /*
47
  * Writing to register Write_Strobe_1_Register with address 83.
48
  *    Write_Strobe_1 <= 1
49
  * New pattern = 0x0001
50
  */
51
  DAQ_STC_Windowed_Mode_Write(WRITE_STROBE_1,0x0001);
52
 
53
  /*
54
  * Writing to register Config_Memory_High_Register with address 18.
55
  *    CM_Channel_Number <= channel_number (0)
56
  *    CM_Channel_Bank <= channel_bank (0)
57
  *    CM_Channel_Type <= channel_type_for_rev_b (3)
58
  * New pattern = 0x3000
59
  */
60
  memhi = 0x3000 | numch;
61
  Immediate_Writew(ADC_CONFIG_HI,memhi);
62
 
63
  /*
64
  * Writing to register Config_Memory_Low_Register with address 16.
65
  *    CM_Last_Channel <= last_channel (1)
66
  *    CM_Trigger <= trigger (0)
67
  *    CM_AI_Gain <= ai_gain (1)
68
  *    CM_AI_Polarity <= ai_polarity (0)
69
  *    CM_AI_Dither_Enable <= ai_dither_enable (0)
70
  * New pattern = 0x8001
71
  */
72
  Immediate_Writew(ADC_CONFIG_LO,0x8100);
73
  return;
74
 }
75
 
76
/*
77
* program the ADC_STC
78
*/
79
 
80
void ADC_Init()
81
{
82
/*
83
* configure the timebase options.
84
*/
85
  /*
86
  * Writing to register Clock_and_FOUT_Register with address 56.
87
  *    Slow_Internal_Timebase <= p->msc_slow_int_tb_enable (1)
88
  *    Slow_Internal_Time_Divide_By_2 <= p->msc_slow_int_tb_divide_by_2 (1)
89
  *    Clock_To_Board <= p->msc_clock_to_board_enable (1)
90
  *    Clock_To_Board_Divide_By_2 <= p->msc_clock_to_board_divide_by_2 (1)
91
  * New pattern = 0x1B00
92
  */
93
  DAQ_STC_Windowed_Mode_Write(CLOCK_AND_FOUT,0x1B00);
94
 
95
/*
96
* clear the AI FIFO.
97
*/
98
  /*
99
  * Writing to register Write_Strobe_1_Register with address 83.
100
  *    Write_Strobe_1 <= 1
101
  * New pattern = 0x0001
102
  */
103
  DAQ_STC_Windowed_Mode_Write(WRITE_STROBE_1,0x0001);
104
 
105
/*
106
* stop any activities in progress.
107
*/
108
  /*
109
  * Writing to register Joint_Reset_Register with address 72.
110
  *    AI_Reset <= 1
111
  * New pattern = 0x0001
112
  */
113
  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0001);
114
 
115
  /*
116
  * Writing to register Joint_Reset_Register with address 72.
117
  *    AI_Configuration_Start <= 1
118
  * New pattern = 0x0010
119
  */
120
  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0010);
121
 
122
  /*
123
  * Writing to register Interrupt_A_Ack_Register with address 2.
124
  *    AI_SC_TC_Error_Confirm <= 1
125
  *    AI_SC_TC_Interrupt_Ack <= 1
126
  *    AI_START1_Interrupt_Ack <= 1
127
  *    AI_START2_Interrupt_Ack <= 1
128
  *    AI_START_Interrupt_Ack <= 1
129
  *    AI_STOP_Interrupt_Ack <= 1
130
  *    AI_Error_Interrupt_Ack <= 1
131
  * New pattern = 0x3F80
132
  */
133
  DAQ_STC_Windowed_Mode_Write(INTERRUPT_A_ACK,0x3F80);
134
 
135
  /*
136
  * Writing to register AI_Command_1_Register with address 8.
137
  *    AI_Command_1_Register <= 0
138
  * New pattern = 0x0000
139
  */
140
  DAQ_STC_Windowed_Mode_Write(AI_COMMAND_1,0x0000);
141
 
142
  /*
143
  * Writing to register AI_Mode_1_Register with address 12.
144
  *    Reserved_One <= 1
145
  *    AI_Start_Stop <= 1
146
  * New pattern = 0x000C
147
  */
148
  DAQ_STC_Windowed_Mode_Write(AI_MODE_1,0x000C);
149
 
150
  /*
151
  * Writing to register Joint_Reset_Register with address 72.
152
  *    AI_Configuration_Start <= 0
153
  *    AI_Configuration_End <= 1
154
  * New pattern = 0x0100
155
  */
156
  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0100);
157
 
158
/*
159
* setup the board.
160
*/
161
  /*
162
  * Writing to register Joint_Reset_Register with address 72.
163
  *    AI_Configuration_Start <= 1
164
  * New pattern = 0x0010
165
  */
166
  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0010);
167
 
168
  /*
169
  * Writing to register Clock_and_FOUT_Register with address 56.
170
  *    AI_Source_Divide_By_2 <= p->ai_source_divide_by_2 (0)
171
  *    AI_Output_Divide_By_2 <= p->ai_output_divide_by_2 (1)
172
  * New pattern = 0x1B80
173
  */
174
  DAQ_STC_Windowed_Mode_Write(CLOCK_AND_FOUT,0x1B80);
175
 
176
  /*
177
  * Writing to register AI_Personal_Register with address 77.
178
  *    AI_CONVERT_Pulse_Timebase <= p->ai_convert_pulse_timebase (0)
179
  *    AI_CONVERT_Pulse_Width <= p->ai_convert_pulse_width (1)
180
  *    AI_FIFO_Flags_Polarity <= p->ai_fifo_flags_polarity (0)
181
  *    AI_LOCALMUX_CLK_Pulse_Width <= p->ai_localmux_clk_pulse_width (1)
182
  *    AI_AIFREQ_Polarity <= p->ai_aifreq_polarity (0)
183
  *    AI_SHIFTIN_Polarity <= p->ai_shiftin_polarity (0)
184
  *    AI_SHIFTIN_Pulse_Width <= p->ai_shiftin_pulse_width (1)
185
  *    AI_EOC_Polarity <= p->ai_eoc_polarity (0)
186
  *    AI_SOC_Polarity <= p->ai_soc_polarity (1)
187
  *    AI_Overrun_Mode <= p->ai_overrun_mode (1)
188
  * New pattern = 0xA4A0
189
  */
190
  DAQ_STC_Windowed_Mode_Write(AI_PERSONAL,0xA4A0);
191
 
192
  /*
193
  * Writing to register AI_Output_Control_Register with address 60.
194
  *    AI_CONVERT_Output_Select <= p->ai_convert_output_select (2)
195
  *    AI_SC_TC_Output_Select <= p->ai_sc_tc_output_select (3)
196
  *    AI_SCAN_IN_PROG_Output_Select <= p->ai_scan_in_prog_output_select (3)
197
  *    AI_LOCALMUX_CLK_Output_Select <= p->ai_localmux_clk_output_select (2)
198
  * New pattern = 0x032E
199
  */
200
  DAQ_STC_Windowed_Mode_Write(AI_OUTPUT_CONTROL,0x032E);
201
 
202
  /*
203
  * Writing to register Joint_Reset_Register with address 72.
204
  *    AI_Configuration_Start <= 0
205
  *    AI_Configuration_End <= 1
206
  * New pattern = 0x0100
207
  */
208
  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0100);
209
 
210
/*
211
* access the first value in the configuration
212
* FIFO.
213
*/
214
  /*
215
  * Writing to register AI_Command_1_Register with address 8.
216
  *    AI_CONVERT_Pulse <= 1
217
  * New pattern = 0x0001
218
  */
219
  DAQ_STC_Windowed_Mode_Write(AI_COMMAND_1,0x0001);
220
 
221
/*
222
* setup for external hardware.
223
*/
224
  /*
225
  * Writing to register Joint_Reset_Register with address 72.
226
  *    AI_Configuration_Start <= 1
227
  * New pattern = 0x0010
228
  */
229
  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0010);
230
 
231
  /*
232
  * Writing to register AI_Mode_2_Register with address 13.
233
  *    AI_External_MUX_Present <= 0
234
  * New pattern = 0x0000
235
  */
236
  DAQ_STC_Windowed_Mode_Write(AI_MODE_2,0x0000);
237
 
238
  /*
239
  * Writing to register AI_Output_Control_Register with address 60.
240
  *    AI_EXTMUX_CLK_Output_Select <= p->ai_extmux_clk_output_select (0)
241
  * New pattern = 0x032E
242
  */
243
  DAQ_STC_Windowed_Mode_Write(AI_OUTPUT_CONTROL,0x032E);
244
 
245
  /*
246
  * Writing to register Joint_Reset_Register with address 72.
247
  *    AI_Configuration_Start <= 0
248
  *    AI_Configuration_End <= 1
249
  * New pattern = 0x0100
250
  */
251
  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0100);
252
 
253
/*
254
* enable or disable retriggering.
255
*/
256
  /*
257
  * Writing to register Joint_Reset_Register with address 72.
258
  *    AI_Configuration_Start <= 1
259
  * New pattern = 0x0010
260
  */
261
  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0010);
262
 
263
  /*
264
  * Writing to register AI_Mode_1_Register with address 12.
265
  *    AI_Trigger_Once <= 1
266
  * New pattern = 0x000D
267
  */
268
  DAQ_STC_Windowed_Mode_Write(AI_MODE_1,0x000D);
269
 
270
  /*
271
  * Writing to register AI_Trigger_Select_Register with address 63.
272
  *    AI_START1_Select <= 0
273
  *    AI_START1_Polarity <= 0
274
  *    AI_START1_Edge <= 1
275
  *    AI_START1_Sync <= 1
276
  * New pattern = 0x0060
277
  */
278
  DAQ_STC_Windowed_Mode_Write(AI_TRIGGER_SELECT,0x0060);
279
 
280
  /*
281
  * Writing to register Joint_Reset_Register with address 72.
282
  *    AI_Configuration_Start <= 0
283
  *    AI_Configuration_End <= 1
284
  * New pattern = 0x0100
285
  */
286
  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0100);
287
 
288
/*
289
* select the number of scans.
290
*/
291
/*
292
  * Writing to register Joint_Reset_Register with address 72.
293
  *    AI_Configuration_Start <= 1
294
  * New pattern = 0x0010
295
  */
296
  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0010);
297
 
298
  DAQ_STC_Windowed_Mode_Write(AI_MODE_1,0x000F);
299
 
300
  /*
301
  * Writing to register Joint_Reset_Register with address 72.
302
  *    AI_Configuration_Start <= 0
303
  *    AI_Configuration_End <= 1
304
  * New pattern = 0x0100
305
  */
306
  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0100);
307
 
308
/*
309
* select the scan start event.
310
*/
311
  /*
312
  * Writing to register Joint_Reset_Register with address 72.
313
  *    AI_Configuration_Start <= 1
314
  * New pattern = 0x0010
315
  */
316
  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0010);
317
 
318
  /*
319
  * Writing to register AI_START_STOP_Select_Register with address 62.
320
  *    AI_START_Select <= 0
321
  *    AI_START_Edge <= 1
322
  *    AI_START_Sync <= 1
323
  *    AI_START_Polarity <= 0
324
  * New pattern = 0x0060
325
  */
326
  DAQ_STC_Windowed_Mode_Write(AI_START_STOP_SELECT,0x0060);
327
 
328
 
329
  /*
330
  * Writing to register Joint_Reset_Register with address 72.
331
  *    AI_Configuration_Start <= 0
332
  *    AI_Configuration_End <= 1
333
  * New pattern = 0x0100
334
  */
335
  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0100);
336
 
337
/*
338
* select the end of scan event.
339
*/
340
  /*
341
  * Writing to register Joint_Reset_Register with address 72.
342
  *    AI_Configuration_Start <= 1
343
  * New pattern = 0x0010
344
  */
345
  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0010);
346
 
347
  /*
348
  * Writing to register AI_START_STOP_Select_Register with address 62.
349
  *    AI_STOP_Select <= p->ai_stop_select (19)
350
  *    AI_STOP_Edge <= 0
351
  *    AI_STOP_Polarity <= p->ai_stop_polarity (0)
352
  *    AI_STOP_Sync <= 1
353
  * New pattern = 0x29E0
354
  */
355
  DAQ_STC_Windowed_Mode_Write(AI_START_STOP_SELECT,0x29E0);
356
 
357
  /*
358
  * Writing to register Joint_Reset_Register with address 72.
359
  *    AI_Configuration_Start <= 0
360
  *    AI_Configuration_End <= 1
361
  * New pattern = 0x0100
362
  */
363
  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0100);
364
 
365
/*
366
* clear the AI FIFO.
367
*/
368
  /*
369
  * Writing to register Write_Strobe_1_Register with address 83.
370
  *    Write_Strobe_1 <= 1
371
  * New pattern = 0x0001
372
  */
373
  DAQ_STC_Windowed_Mode_Write(WRITE_STROBE_1,0x0001);
374
return;
375
}
376
 
377
/*
378
* Call this function to start the acquistion.
379
*/
380
 
381
void AI_Start_The_Acquisition()
382
{
383
  /*
384
  * Writing to register AI_Command_1_Register with address 8.
385
  *    AI_CONVERT_Pulse <= 1
386
  * New pattern = 0x0001
387
  */
388
  DAQ_STC_Windowed_Mode_Write(AI_COMMAND_1,0x0001);
389
  return;
390
 }
391
 
392
/*End of file:    adc.c*/
393
 
394
 
395
 
396
 
397
 
398
 
399
 
400