Subversion Repositories shark

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*****************************************************************************
* Filename:       ADC.C                                                      *      
* Author:         Ghiro Andrea,Franchino Gianluca                            *
* Date:           06/06/2001                                                 *
* Description:    Analog 2 digital conversion functions                      *
*----------------------------------------------------------------------------*
* Notes:                Funcion for one sample from Ch0                      *
*****************************************************************************/


/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
 *
 * Copyright (C) 2003 Ghiro Andrea,Franchino Gianluca
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */


#include "adc.h"

/*
* Call this function to configure board options.
*/


void Configure_Board(BYTE numch)
{
WORD memhi;
  /*
  * Writing to register Write_Strobe_0_Register with address 82.
  *    Write_Strobe_0 <= 1
  * New pattern = 0x0001
  */

  DAQ_STC_Windowed_Mode_Write(WRITE_STROBE_0,0x0001);
 
  /*
  * Writing to register Write_Strobe_1_Register with address 83.
  *    Write_Strobe_1 <= 1
  * New pattern = 0x0001
  */

  DAQ_STC_Windowed_Mode_Write(WRITE_STROBE_1,0x0001);

  /*
  * Writing to register Config_Memory_High_Register with address 18.
  *    CM_Channel_Number <= channel_number (0)
  *    CM_Channel_Bank <= channel_bank (0)
  *    CM_Channel_Type <= channel_type_for_rev_b (3)
  * New pattern = 0x3000
  */

  memhi = 0x3000 | numch;
  Immediate_Writew(ADC_CONFIG_HI,memhi);

  /*
  * Writing to register Config_Memory_Low_Register with address 16.
  *    CM_Last_Channel <= last_channel (1)
  *    CM_Trigger <= trigger (0)
  *    CM_AI_Gain <= ai_gain (1)
  *    CM_AI_Polarity <= ai_polarity (0)
  *    CM_AI_Dither_Enable <= ai_dither_enable (0)
  * New pattern = 0x8001
  */

  Immediate_Writew(ADC_CONFIG_LO,0x8100);
  return;
 }

/*
* program the ADC_STC
*/

 
void ADC_Init()
{
/*
* configure the timebase options.
*/

  /*
  * Writing to register Clock_and_FOUT_Register with address 56.
  *    Slow_Internal_Timebase <= p->msc_slow_int_tb_enable (1)
  *    Slow_Internal_Time_Divide_By_2 <= p->msc_slow_int_tb_divide_by_2 (1)
  *    Clock_To_Board <= p->msc_clock_to_board_enable (1)
  *    Clock_To_Board_Divide_By_2 <= p->msc_clock_to_board_divide_by_2 (1)
  * New pattern = 0x1B00
  */

  DAQ_STC_Windowed_Mode_Write(CLOCK_AND_FOUT,0x1B00);

/*
* clear the AI FIFO.
*/

  /*
  * Writing to register Write_Strobe_1_Register with address 83.
  *    Write_Strobe_1 <= 1
  * New pattern = 0x0001
  */

  DAQ_STC_Windowed_Mode_Write(WRITE_STROBE_1,0x0001);

/*
* stop any activities in progress.
*/

  /*
  * Writing to register Joint_Reset_Register with address 72.
  *    AI_Reset <= 1
  * New pattern = 0x0001
  */

  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0001);

  /*
  * Writing to register Joint_Reset_Register with address 72.
  *    AI_Configuration_Start <= 1
  * New pattern = 0x0010
  */

  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0010);

  /*
  * Writing to register Interrupt_A_Ack_Register with address 2.
  *    AI_SC_TC_Error_Confirm <= 1
  *    AI_SC_TC_Interrupt_Ack <= 1
  *    AI_START1_Interrupt_Ack <= 1
  *    AI_START2_Interrupt_Ack <= 1
  *    AI_START_Interrupt_Ack <= 1
  *    AI_STOP_Interrupt_Ack <= 1
  *    AI_Error_Interrupt_Ack <= 1
  * New pattern = 0x3F80
  */

  DAQ_STC_Windowed_Mode_Write(INTERRUPT_A_ACK,0x3F80);

  /*
  * Writing to register AI_Command_1_Register with address 8.
  *    AI_Command_1_Register <= 0
  * New pattern = 0x0000
  */

  DAQ_STC_Windowed_Mode_Write(AI_COMMAND_1,0x0000);

  /*
  * Writing to register AI_Mode_1_Register with address 12.
  *    Reserved_One <= 1
  *    AI_Start_Stop <= 1
  * New pattern = 0x000C
  */

  DAQ_STC_Windowed_Mode_Write(AI_MODE_1,0x000C);

  /*
  * Writing to register Joint_Reset_Register with address 72.
  *    AI_Configuration_Start <= 0
  *    AI_Configuration_End <= 1
  * New pattern = 0x0100
  */

  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0100);

/*
* setup the board.
*/

  /*
  * Writing to register Joint_Reset_Register with address 72.
  *    AI_Configuration_Start <= 1
  * New pattern = 0x0010
  */

  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0010);

  /*
  * Writing to register Clock_and_FOUT_Register with address 56.
  *    AI_Source_Divide_By_2 <= p->ai_source_divide_by_2 (0)
  *    AI_Output_Divide_By_2 <= p->ai_output_divide_by_2 (1)
  * New pattern = 0x1B80
  */

  DAQ_STC_Windowed_Mode_Write(CLOCK_AND_FOUT,0x1B80);

  /*
  * Writing to register AI_Personal_Register with address 77.
  *    AI_CONVERT_Pulse_Timebase <= p->ai_convert_pulse_timebase (0)
  *    AI_CONVERT_Pulse_Width <= p->ai_convert_pulse_width (1)
  *    AI_FIFO_Flags_Polarity <= p->ai_fifo_flags_polarity (0)
  *    AI_LOCALMUX_CLK_Pulse_Width <= p->ai_localmux_clk_pulse_width (1)
  *    AI_AIFREQ_Polarity <= p->ai_aifreq_polarity (0)
  *    AI_SHIFTIN_Polarity <= p->ai_shiftin_polarity (0)
  *    AI_SHIFTIN_Pulse_Width <= p->ai_shiftin_pulse_width (1)
  *    AI_EOC_Polarity <= p->ai_eoc_polarity (0)
  *    AI_SOC_Polarity <= p->ai_soc_polarity (1)
  *    AI_Overrun_Mode <= p->ai_overrun_mode (1)
  * New pattern = 0xA4A0
  */

  DAQ_STC_Windowed_Mode_Write(AI_PERSONAL,0xA4A0);

  /*
  * Writing to register AI_Output_Control_Register with address 60.
  *    AI_CONVERT_Output_Select <= p->ai_convert_output_select (2)
  *    AI_SC_TC_Output_Select <= p->ai_sc_tc_output_select (3)
  *    AI_SCAN_IN_PROG_Output_Select <= p->ai_scan_in_prog_output_select (3)
  *    AI_LOCALMUX_CLK_Output_Select <= p->ai_localmux_clk_output_select (2)
  * New pattern = 0x032E
  */

  DAQ_STC_Windowed_Mode_Write(AI_OUTPUT_CONTROL,0x032E);

  /*
  * Writing to register Joint_Reset_Register with address 72.
  *    AI_Configuration_Start <= 0
  *    AI_Configuration_End <= 1
  * New pattern = 0x0100
  */

  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0100);

/*
* access the first value in the configuration
* FIFO.
*/

  /*
  * Writing to register AI_Command_1_Register with address 8.
  *    AI_CONVERT_Pulse <= 1
  * New pattern = 0x0001
  */

  DAQ_STC_Windowed_Mode_Write(AI_COMMAND_1,0x0001);
 
/*
* setup for external hardware.
*/

  /*
  * Writing to register Joint_Reset_Register with address 72.
  *    AI_Configuration_Start <= 1
  * New pattern = 0x0010
  */

  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0010);

  /*
  * Writing to register AI_Mode_2_Register with address 13.
  *    AI_External_MUX_Present <= 0
  * New pattern = 0x0000
  */

  DAQ_STC_Windowed_Mode_Write(AI_MODE_2,0x0000);

  /*
  * Writing to register AI_Output_Control_Register with address 60.
  *    AI_EXTMUX_CLK_Output_Select <= p->ai_extmux_clk_output_select (0)
  * New pattern = 0x032E
  */

  DAQ_STC_Windowed_Mode_Write(AI_OUTPUT_CONTROL,0x032E);

  /*
  * Writing to register Joint_Reset_Register with address 72.
  *    AI_Configuration_Start <= 0
  *    AI_Configuration_End <= 1
  * New pattern = 0x0100
  */

  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0100);

/*
* enable or disable retriggering.
*/

  /*
  * Writing to register Joint_Reset_Register with address 72.
  *    AI_Configuration_Start <= 1
  * New pattern = 0x0010
  */

  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0010);

  /*
  * Writing to register AI_Mode_1_Register with address 12.
  *    AI_Trigger_Once <= 1
  * New pattern = 0x000D
  */

  DAQ_STC_Windowed_Mode_Write(AI_MODE_1,0x000D);

  /*
  * Writing to register AI_Trigger_Select_Register with address 63.
  *    AI_START1_Select <= 0
  *    AI_START1_Polarity <= 0
  *    AI_START1_Edge <= 1
  *    AI_START1_Sync <= 1
  * New pattern = 0x0060
  */

  DAQ_STC_Windowed_Mode_Write(AI_TRIGGER_SELECT,0x0060);

  /*
  * Writing to register Joint_Reset_Register with address 72.
  *    AI_Configuration_Start <= 0
  *    AI_Configuration_End <= 1
  * New pattern = 0x0100
  */

  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0100);
 
/*
* select the number of scans.
*/

/*
  * Writing to register Joint_Reset_Register with address 72.
  *    AI_Configuration_Start <= 1
  * New pattern = 0x0010
  */

  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0010);

  DAQ_STC_Windowed_Mode_Write(AI_MODE_1,0x000F);

  /*
  * Writing to register Joint_Reset_Register with address 72.
  *    AI_Configuration_Start <= 0
  *    AI_Configuration_End <= 1
  * New pattern = 0x0100
  */

  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0100);
 
/*
* select the scan start event.
*/

  /*
  * Writing to register Joint_Reset_Register with address 72.
  *    AI_Configuration_Start <= 1
  * New pattern = 0x0010
  */

  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0010);

  /*
  * Writing to register AI_START_STOP_Select_Register with address 62.
  *    AI_START_Select <= 0
  *    AI_START_Edge <= 1
  *    AI_START_Sync <= 1
  *    AI_START_Polarity <= 0
  * New pattern = 0x0060
  */

  DAQ_STC_Windowed_Mode_Write(AI_START_STOP_SELECT,0x0060);


  /*
  * Writing to register Joint_Reset_Register with address 72.
  *    AI_Configuration_Start <= 0
  *    AI_Configuration_End <= 1
  * New pattern = 0x0100
  */

  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0100);
 
/*
* select the end of scan event.
*/

  /*
  * Writing to register Joint_Reset_Register with address 72.
  *    AI_Configuration_Start <= 1
  * New pattern = 0x0010
  */

  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0010);

  /*
  * Writing to register AI_START_STOP_Select_Register with address 62.
  *    AI_STOP_Select <= p->ai_stop_select (19)
  *    AI_STOP_Edge <= 0
  *    AI_STOP_Polarity <= p->ai_stop_polarity (0)
  *    AI_STOP_Sync <= 1
  * New pattern = 0x29E0
  */

  DAQ_STC_Windowed_Mode_Write(AI_START_STOP_SELECT,0x29E0);

  /*
  * Writing to register Joint_Reset_Register with address 72.
  *    AI_Configuration_Start <= 0
  *    AI_Configuration_End <= 1
  * New pattern = 0x0100
  */

  DAQ_STC_Windowed_Mode_Write(JOINT_RESET,0x0100);
 
/*
* clear the AI FIFO.
*/

  /*
  * Writing to register Write_Strobe_1_Register with address 83.
  *    Write_Strobe_1 <= 1
  * New pattern = 0x0001
  */

  DAQ_STC_Windowed_Mode_Write(WRITE_STROBE_1,0x0001);
return;
}

/*
* Call this function to start the acquistion.
*/


void AI_Start_The_Acquisition()
{
  /*
  * Writing to register AI_Command_1_Register with address 8.
  *    AI_CONVERT_Pulse <= 1
  * New pattern = 0x0001
  */

  DAQ_STC_Windowed_Mode_Write(AI_COMMAND_1,0x0001);
  return;
 }
   
/*End of file:    adc.c*/