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

📄 ad6620.c

📁 方便飞利浦arm7tdmi 处理器lpc2100开发的C函数库 Procyon ARMlib-LPC2100 C-Language Function Library for Philips LPC21
💻 C
字号:
/*! \file ad6620.c \brief Analog Devices AD6620 Digital Receiver Driver. */
//*****************************************************************************
//
// File Name	: 'ad6620.c'
// Title		: Analog Devices AD6620 Digital Receiver Driver
// Author		: Pascal Stang - Copyright (C) 2004
// Created		: 2004.07.08
// Revised		: 2004.07.12
// Version		: 0.1
// Target MCU	: ARM processors
// Editor Tabs	: 4
//
// NOTE: This code is currently below version 1.0, and therefore is considered
// to be lacking in some functionality or documentation, or may not be fully
// tested.  Nonetheless, you can expect most functions to work.
//
// This code is distributed under the GNU Public License
//		which can be found at http://www.gnu.org/licenses/gpl.txt
//
//*****************************************************************************

#include "lpc210x.h"

#include "global.h"
#include "timer.h"
#include "membus.h"
#include "rprintf.h"
#include "ad6620.h"

// global variables

void ad6620Init(void)
{
	membusInit();

	// reset device
	//IOSET = AD9854_RESET;
	//IODIR |= AD9854_RESET;
	//delay(10000);
	//IOCLR = AD9854_RESET;

	// initialize registers

	// initialize receiver - set soft reset
	ad6620WriteReg(AD6620_REG_MODE_CTRL, 0x01);
	// set NCO
	ad6620WriteReg(AD6620_REG_NCO_SYNC, 0);
	ad6620WriteReg(AD6620_REG_NCO_PHASE, 0);
	ad6620WriteReg(AD6620_REG_NCO_FREQ, 0);
	// set CIC2 filter
	ad6620WriteReg(AD6620_REG_CIC2_SCALE, 1);
	ad6620WriteReg(AD6620_REG_CIC2_DECIM, 4-1);
	// set CIC5 filter
	ad6620WriteReg(AD6620_REG_CIC5_SCALE, 1);
	ad6620WriteReg(AD6620_REG_CIC5_DECIM, 10-1);
	// set RCF filter
	ad6620WriteReg(AD6620_REG_RCF_CTRL, 1);
	ad6620WriteReg(AD6620_REG_RCF_DECIM, 52-1);
	ad6620WriteReg(AD6620_REG_RCFADDR_OFS, 0);
	ad6620WriteReg(AD6620_REG_RCF_TAPS, 52-1);
	// set reserved register to zero
	ad6620WriteReg(AD6620_REG_RESERVED, 0x00);
	// initialize receiver - set operation mode
	ad6620WriteReg(AD6620_REG_MODE_CTRL, 0x08);

}

void ad6620WriteReg(u16 reg, u32 data)
{
	// write address
	membusWrite(AD6620_REG_BASE+AD6620_REG_AMR, reg>>8);
	membusRead(0);
	membusWrite(AD6620_REG_BASE+AD6620_REG_LAR, reg);
	membusRead(0);
	// write value
	membusWrite(AD6620_REG_BASE+AD6620_REG_DR3, data>>24);
	membusRead(0);
	membusWrite(AD6620_REG_BASE+AD6620_REG_DR2, data>>16);
	membusRead(0);
	membusWrite(AD6620_REG_BASE+AD6620_REG_DR1, data>>8);
	membusRead(0);
	membusWrite(AD6620_REG_BASE+AD6620_REG_DR0, data);
	membusRead(0);
}


u32 ad6620ReadReg(u16 reg)
{
	u32 data;
	// write address
	membusWrite(AD6620_REG_BASE+AD6620_REG_AMR, reg>>8);
	membusRead(0);
	membusWrite(AD6620_REG_BASE+AD6620_REG_LAR, reg);
	membusRead(0);
	// read value
	data  = (membusRead(AD6620_REG_BASE+AD6620_REG_DR0) & 0x000000FF);
	membusRead(0);
	data |= (membusRead(AD6620_REG_BASE+AD6620_REG_DR1) & 0x000000FF)<<8;
	membusRead(0);
	data |= (membusRead(AD6620_REG_BASE+AD6620_REG_DR2) & 0x000000FF)<<16;
	membusRead(0);
	data |= (membusRead(AD6620_REG_BASE+AD6620_REG_DR3) & 0x000000FF)<<24;
	membusRead(0);
	return data;
}

void ad6620ShowRegisters(void)
{
	// read and print all registers

	rprintfStr("Mode Control      :       ");
	rprintfu08(ad6620ReadReg(AD6620_REG_MODE_CTRL));
	rprintfCRLF();

	rprintfStr("NCO Control       :       ");
	rprintfu08(ad6620ReadReg(AD6620_REG_NCO_CTRL));
	rprintfCRLF();

	rprintfStr("NCO SYNC Control  : ");
	rprintfu32(ad6620ReadReg(AD6620_REG_NCO_SYNC));
	rprintfCRLF();

	rprintfStr("NCO Frequency     : ");
	rprintfu32(ad6620ReadReg(AD6620_REG_NCO_FREQ));
	rprintfCRLF();

	rprintfStr("NCO Phase Offset  :     ");
	rprintfu16(ad6620ReadReg(AD6620_REG_NCO_PHASE));
	rprintfCRLF();

	rprintfStr("INPUT/CIC2 Scale  :       ");
	rprintfu08(ad6620ReadReg(AD6620_REG_CIC2_SCALE));
	rprintfCRLF();

	rprintfStr("CIC2 Decimation   :       ");
	rprintfu08(ad6620ReadReg(AD6620_REG_CIC2_DECIM));
	rprintfCRLF();

	rprintfStr("CIC5 Scale        :       ");
	rprintfu08(ad6620ReadReg(AD6620_REG_CIC5_SCALE));
	rprintfCRLF();

	rprintfStr("CIC5 Decimation   :       ");
	rprintfu08(ad6620ReadReg(AD6620_REG_CIC5_DECIM));
	rprintfCRLF();

	rprintfStr("OUTPUT/RCF Control:       ");
	rprintfu08(ad6620ReadReg(AD6620_REG_RCF_CTRL));
	rprintfCRLF();

	rprintfStr("RCF Decimation    :       ");
	rprintfu08(ad6620ReadReg(AD6620_REG_RCF_DECIM));
	rprintfCRLF();

	rprintfStr("RCF Address Offset:       ");
	rprintfu08(ad6620ReadReg(AD6620_REG_RCFADDR_OFS));
	rprintfCRLF();

	rprintfStr("RCF Taps          :       ");
	rprintfu08(ad6620ReadReg(AD6620_REG_RCF_TAPS));
	rprintfCRLF();
}
	

⌨️ 快捷键说明

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