⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad7020.c

📁 ADI公司射频芯片AD7020-1驱动源程序
💻 C
字号:
/****************************************************************************************
*																						*
*   Project:    ADF7020 & ADF70XXMB2 Controller Board - Device Drivers					*
*   File:       dd_adf7020.c															*
*																						*
*               device driver routines for ADF7020 specific functions					*
*																						*
*	No responsibility is assumed by Analog Devices for use of this code, nor for any	*
*	infringements of patents or other rights of third parties that may result from 		*
*	its use.  No license is granted by implication or otherwise under any patent or		*
*	patent rights of Analog Devices. Trademarks and registered trademarks are the 		*
*	property of their respective owners. 												*
*																						*
*	Analog Devices																		*
*	One Technology Way, P.O. Box 9106, Norwood, MA 02062-9106, U.S.A.					*
*	Tel: 781.329.4700	www.analog.com													*
*	Fax: 781.326.8703	?2005 Analog Devices, Inc. All rights reserved.				*
****************************************************************************************/
#include "sfr_r8c2425.h"									/* Definition of the R8C/24,25 SFR for Sango */
//#include "r8c2425_s002_main.h"
#include "ad7020.h"
void dd_write_7020_reg(unsigned char *reg_bytes);
union ADF7020_REG_T dd_read_7020_reg(unsigned char readback_config);
union ADF7020_REG_T
    {
        unsigned long  whole_reg;
        unsigned char   byte[4];    // Warning: Be endian-specific when accessing bytes

    };
void dd_set_RX_mode(void);
void dd_set_TX_mode(void);
void dd_read_ADF7020_version(void);
void dd_adf7020_chip_on(void);
void dd_short_delay(unsigned char count);
void dd_adf7020_chip_off(void);
/****************************************************************************
 *                    ADF7020 Control Functions                             *
 ****************************************************************************/



/*****************************************************************************
 * Function:    dd_read_7020_reg
 * Parameters:  4 bit readback register address
 * Returns:     ADF7020_REG_T readback value
 * ===========================================================================
 * Description:
 *      Bit-bashed read from ADF7020 register file
 *      Register address is 4 bits: RB2 RB1 AD2 AD1
 ****************************************************************************/

union ADF7020_REG_T  dd_read_7020_reg(unsigned char readback_config)
{
    union ADF7020_REG_T register_value;
//	unsigned long whole_reg_1;
//   unsigned char   byte_1[4]'
    unsigned char i, j;
    unsigned char byte;



    /* Write readback and ADC control value */
    register_value.whole_reg = (readback_config & 0x1F) << 4;
    register_value.whole_reg |= 7; // Address the readback setup register
    
    dd_write_7020_reg((unsigned char *)&register_value);
  

    register_value.whole_reg = 0;


    /* Read back value */

    ADF7020_SDATA = 0;
    ADF7020_SCLK = 0;
    ADF7020_SLE = 1;

    /* Clock in first bit and discard */
    ADF7020_SCLK = 1;
    byte = 0; // Slight pulse extend
    ADF7020_SCLK = 0;


    /* Clock in data MSbit first */

//#ifdef _BIG_ENDIAN_
    for (i=2; i<=3; i++)
//#else
//    for (i=1; i>=0; i--)
//#endif
    {
        for (j=8; j>0; j--)
        {
            ADF7020_SCLK = 1;
            byte += byte; // left shift 1
            ADF7020_SCLK = 0;

            if (ADF7020_SREAD) byte |= 1;
        }

        register_value.byte[i] = byte;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");	
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");	
    }

    ADF7020_SLE = 0;
    return register_value;
    /* All port lines left low */

    
}

void dd_read_ADF7020_version(void)
{
	union ADF7020_REG_T uartlog;
dd_adf7020_chip_off();
dd_short_delay(100);
	dd_adf7020_chip_on();
	uartlog = dd_read_7020_reg(0x1C);
   asm("NOP");	
	//dd_uart_port_tx(&uartlog.byte[2], 2);
}

void dd_short_delay(unsigned char count)
{
    while (count-- >0)
	{
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");

	
	}		
	
}

/*****************************************************************************
 * Function:    dd_write_7020_reg
 * Parameters:  pUINT8 -> ADF7020_REG_T register value (inc register address)
 * Returns:     Nothing
 * ===========================================================================
 * Description:
 *      Bit-bashed write to ADF7020 register file
 *      Input ptr -> a 4 byte array representing a UINT32
 *          E.g. dd_write_7020_reg( & register_value.byte[0] )
 *
 *      Register address is contained in the 4 LSbits of the register value
 *      (see 7020 datasheet)
 ****************************************************************************/

void dd_write_7020_reg(unsigned char *reg_bytes)
{
    signed char i, j;
    unsigned char byte;

    ADF7020_SLE = 0;
    ADF7020_SCLK = 0;


    /* Clock data out MSbit first */
//#ifdef _BIG_ENDIAN_
//    for (i=0; i<=3; i++)
//#else
    for (i=3; i>=0; i--)
//#endif
    {
        byte = reg_bytes[i];

        for (j=8; j>0; j--)
        {
            ADF7020_SCLK = 0;
            if (byte & 0x80) ADF7020_SDATA = 1;
            else ADF7020_SDATA = 0;
            ADF7020_SCLK = 1;
            byte += byte; // left shift 1
        }
        ADF7020_SCLK = 0;
    }


    /* Strobe the latch */

    ADF7020_SLE = 1;
    ADF7020_SLE = 1; // Slight pulse extend
    ADF7020_SDATA = 0;
    ADF7020_SLE = 0;

    /* All port lines left low */
}




/*****************************************************************************
 * Function:    dd_adf7020_chip_sel
 * Parameters:  TRUE to select, FALSE to de-select
 * Returns:     Nothing
 * ===========================================================================
 * Description:
 *      Controls ADF7020_CE I/O line
 ****************************************************************************/


void dd_adf7020_chip_on(void)
{
    ADF7020_CE = 1;
    dd_short_delay(20);
}
void dd_adf7020_chip_off(void)
{
    ADF7020_CE = 0;
	dd_short_delay(20);

    
}

void dd_set_RX_mode(void){


     union ADF7020_REG_T register_value;

     //write R0,
     register_value.whole_reg = 0x79391420;
	 dd_write_7020_reg(&register_value.byte[0]);


     //write R1,
     register_value.whole_reg = 0x00439011;
	 dd_write_7020_reg(&register_value.byte[0]);

     
	 //write R3,
     register_value.whole_reg = 0x00702053;
	 dd_write_7020_reg(&register_value.byte[0]);


     //write R4,
     register_value.whole_reg = 0x00000054;
	 dd_write_7020_reg(&register_value.byte[0]);


	 //write R5,
     register_value.whole_reg = 0x12345635;
	 dd_write_7020_reg(&register_value.byte[0]);

	 //write R6,
     register_value.whole_reg = 0x2dd024561;
	 dd_write_7020_reg(&register_value.byte[0]);






}


/*****************************************************************************
 * $History: dd_adf7020.c $
 *
 * Date: 4/04/05   
 * Version 1.0 First Release
 ****************************************************************************/
void dd_set_TX_mode(void){


     union ADF7020_REG_T register_value;

     //write R0,
     register_value.whole_reg = 0x71393930;
	 dd_write_7020_reg(&register_value.byte[0]);


     //write R1,
     register_value.whole_reg = 0x00439011;
	 dd_write_7020_reg(&register_value.byte[0]);

     dd_short_delay(80);
	 //write R2,
     register_value.whole_reg = 0x8003e012;
	 dd_write_7020_reg(&register_value.byte[0]);


     



}


/* EOF */


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -