| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 | 
							- /***************************************************************************//**
 
-  *   @file   AD7793.c
 
-  *   @brief  Implementation of AD7793 Driver.
 
-  *   @author Bancisor MIhai
 
- ********************************************************************************
 
-  * Copyright 2012(c) Analog Devices, Inc.
 
-  *
 
-  * All rights reserved.
 
-  *
 
-  * Redistribution and use in source and binary forms, with or without
 
-  * modification, are permitted provided that the following conditions are met:
 
-  *  - Redistributions of source code must retain the above copyright
 
-  *    notice, this list of conditions and the following disclaimer.
 
-  *  - Redistributions in binary form must reproduce the above copyright
 
-  *    notice, this list of conditions and the following disclaimer in
 
-  *    the documentation and/or other materials provided with the
 
-  *    distribution.
 
-  *  - Neither the name of Analog Devices, Inc. nor the names of its
 
-  *    contributors may be used to endorse or promote products derived
 
-  *    from this software without specific prior written permission.
 
-  *  - The use of this software may or may not infringe the patent rights
 
-  *    of one or more patent holders.  This license does not release you
 
-  *    from the requirement that you obtain separate licenses from these
 
-  *    patent holders to use this software.
 
-  *  - Use of the software either in source or binary form, must be run
 
-  *    on or directly connected to an Analog Devices Inc. component.
 
-  *
 
-  * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
 
-  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
 
-  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 
-  * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
 
-  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 
-  * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
 
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-  *
 
- ********************************************************************************
 
-  *   SVN Revision: 381
 
- *******************************************************************************/
 
- /******************************************************************************/
 
- /* Include Files                                                              */
 
- /******************************************************************************/
 
- #include "AD7793.h"				// AD7793 definitions.
 
- #include "Communication.h"		// Communication definitions.
 
- /***************************************************************************//**
 
-  * @brief Initializes the AD7793 and checks if the device is present.
 
-  *
 
-  * @param None.
 
-  *
 
-  * @return status - Result of the initialization procedure.
 
-  *                  Example: 1 - if initialization was successful (ID is 0x0B).
 
-  *                           0 - if initialization was unsuccessful.
 
- *******************************************************************************/
 
- unsigned char AD7793_Init(void)
 
- { 
 
- 	unsigned char status = 0x1;
 
- 	if((AD7793_GetRegisterValue(AD7793_REG_ID, 1) & 0x0F) != AD7793_ID)
 
- 	{
 
- 		status = 0x0;
 
- 	}
 
- 	
 
- 	return(status);
 
- }
 
- /***************************************************************************//**
 
-  * @brief Sends 32 consecutive 1's on SPI in order to reset the part.
 
-  *
 
-  * @param None.
 
-  *
 
-  * @return  None.    
 
- *******************************************************************************/
 
- void AD7793_Reset(void)
 
- {
 
- 	unsigned char dataToSend[5] = {0x03, 0xff, 0xff, 0xff, 0xff};
 
- 	AD7793_CS_LOW;	    
 
- 	SPI_Write(dataToSend,4);
 
- 	AD7793_CS_HIGH;	
 
- }
 
- /***************************************************************************//**
 
-  * @brief Reads the value of the selected register
 
-  *
 
-  * @param regAddress - The address of the register to read.
 
-  * @param size - The size of the register to read.
 
-  *
 
-  * @return data - The value of the selected register register.
 
- *******************************************************************************/
 
- unsigned long AD7793_GetRegisterValue(unsigned char regAddress, unsigned char size)
 
- {
 
- 	unsigned char data[5] = {0x03, 0x00, 0x00, 0x00, 0x00};
 
- 	unsigned long receivedData = 0x00;	
 
- 	data[1] = AD7793_COMM_READ |  AD7793_COMM_ADDR(regAddress);
 
- 	AD7793_CS_LOW;  
 
- 	SPI_Write(data,1);
 
- 	SPI_Read(data,size);
 
- 	AD7793_CS_HIGH;
 
- 	if(size == 1)
 
- 	{
 
- 		receivedData += (data[0] << 0);
 
- 	}
 
- 	if(size == 2)
 
- 	{
 
- 		receivedData += (data[0] << 8);
 
- 		receivedData += (data[1] << 0);
 
- 	}
 
- 	if(size == 3)
 
- 	{
 
- 		receivedData += (data[0] << 16);
 
- 		receivedData += (data[1] << 8);
 
- 		receivedData += (data[2] << 0);
 
- 	}
 
-     return receivedData;
 
- }
 
- /***************************************************************************//**
 
-  * @brief Writes the value to the register
 
-  *
 
-  * @param -  regAddress - The address of the register to write to.
 
-  * @param -  regValue - The value to write to the register.
 
-  * @param -  size - The size of the register to write.
 
-  *
 
-  * @return  None.    
 
- *******************************************************************************/
 
- void AD7793_SetRegisterValue(unsigned char regAddress,
 
-                              unsigned long regValue, 
 
-                              unsigned char size)
 
- {
 
- 	unsigned char data[5] = {0x03, 0x00, 0x00, 0x00, 0x00};	
 
- 	data[1] = AD7793_COMM_WRITE |  AD7793_COMM_ADDR(regAddress);
 
-     if(size == 1)
 
-     {
 
-         data[2] = (unsigned char)regValue;
 
-     }
 
-     if(size == 2)
 
-     {
 
- 		data[3] = (unsigned char)((regValue & 0x0000FF) >> 0);
 
-         data[2] = (unsigned char)((regValue & 0x00FF00) >> 8);
 
-     }
 
-     if(size == 3)
 
-     {
 
- 		data[4] = (unsigned char)((regValue & 0x0000FF) >> 0);
 
- 		data[3] = (unsigned char)((regValue & 0x00FF00) >> 8);
 
-         data[2] = (unsigned char)((regValue & 0xFF0000) >> 16);
 
-     }
 
- 	AD7793_CS_LOW;	    
 
- 	SPI_Write(data,(1 + size));
 
- 	AD7793_CS_HIGH;
 
- }
 
- /***************************************************************************//**
 
-  * @brief Reads /RDY bit of status reg.
 
-  *
 
-  * @param None.
 
-  *
 
-  * @return rdy	- 0 if RDY is 1.
 
-  *              - 1 if RDY is 0.
 
- *******************************************************************************/
 
- unsigned char AD7793_Ready(void)
 
- {
 
-     unsigned char rdy = 0;
 
-     rdy = (AD7793_GetRegisterValue( AD7793_REG_STAT,1) & 0x80);   
 
- 	
 
- 	return(!rdy);
 
- }
 
- /***************************************************************************//**
 
-  * @brief Sets the operating mode of AD7793.
 
-  *
 
-  * @param mode - Mode of operation.
 
-  *
 
-  * @return  None.    
 
- *******************************************************************************/
 
- void AD7793_SetMode(unsigned long mode)
 
- {
 
-     unsigned long command;
 
-     command = AD7793_GetRegisterValue(AD7793_REG_MODE,2);
 
-     command &= ~AD7793_MODE_SEL(0xFF);
 
-     command |= AD7793_MODE_SEL(mode);
 
-     AD7793_SetRegisterValue(
 
-             AD7793_REG_MODE,
 
-             command,
 
-             2
 
-     );
 
- }
 
- /***************************************************************************//**
 
-  * @brief Selects the channel of AD7793.
 
-  *
 
-  * @param  channel - ADC channel selection.
 
-  *
 
-  * @return  None.    
 
- *******************************************************************************/
 
- void AD7793_SetChannel(unsigned long channel)
 
- {
 
-     unsigned long command;
 
-     command = AD7793_GetRegisterValue(AD7793_REG_CONF,2);
 
-     command &= ~AD7793_CONF_CHAN(0xFF);
 
-     command |= AD7793_CONF_CHAN(channel);
 
-     AD7793_SetRegisterValue(
 
-             AD7793_REG_CONF,
 
-             command,
 
-             2
 
-     );
 
- }
 
- /***************************************************************************//**
 
-  * @brief  Sets the gain of the In-Amp.
 
-  *
 
-  * @param  gain - Gain.
 
-  *
 
-  * @return  None.    
 
- *******************************************************************************/
 
- void AD7793_SetGain(unsigned long gain)
 
- {
 
-     unsigned long command;
 
-     command = AD7793_GetRegisterValue(AD7793_REG_CONF,2);
 
-     command &= ~AD7793_CONF_GAIN(0xFF);
 
-     command |= AD7793_CONF_GAIN(gain);
 
-     AD7793_SetRegisterValue(
 
-             AD7793_REG_CONF,
 
-             command,
 
-             2
 
-     );
 
- }
 
- /***************************************************************************//**
 
-  * @brief Sets the reference source for the ADC.
 
-  *
 
-  * @param type - Type of the reference.
 
-  *               Example: AD7793_REFSEL_EXT	- External Reference Selected
 
-  *                        AD7793_REFSEL_INT	- Internal Reference Selected.
 
-  *
 
-  * @return None.    
 
- *******************************************************************************/
 
- void AD7793_SetReference(unsigned char type)
 
- {
 
-     unsigned long command = 0;
 
-     command = AD7793_GetRegisterValue(AD7793_REG_CONF,2);
 
-     command &= ~AD7793_CONF_REFSEL(AD7793_REFSEL_INT);
 
-     command |= AD7793_CONF_REFSEL(type);
 
-     AD7793_SetRegisterValue(AD7793_REG_CONF,
 
- 							command,
 
- 							2);
 
- }
 
 
  |