📄 ad9854_8c-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>Procyon ARMlib-LPC2100: ad9854.c Source File</title><link href="dox.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.6 --><div class="qindex"><a class="qindex" href="main.html">Main Page</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="globals.html">Globals</a></div><h1>ad9854.c</h1><a href="ad9854_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/*! \file ad9854.c \brief Analog Devices AD9854 Digital Synthesizer Driver. */</span>00002 <span class="comment">//*****************************************************************************</span>00003 <span class="comment">//</span>00004 <span class="comment">// File Name : 'ad9854.c'</span>00005 <span class="comment">// Title : Analog Devices AD9854 Digital Synthesizer Driver</span>00006 <span class="comment">// Author : Pascal Stang - Copyright (C) 2004</span>00007 <span class="comment">// Created : 2004.05.05</span>00008 <span class="comment">// Revised : 2004.07.12</span>00009 <span class="comment">// Version : 0.1</span>00010 <span class="comment">// Target MCU : ARM processors</span>00011 <span class="comment">// Editor Tabs : 4</span>00012 <span class="comment">//</span>00013 <span class="comment">// NOTE: This code is currently below version 1.0, and therefore is considered</span>00014 <span class="comment">// to be lacking in some functionality or documentation, or may not be fully</span>00015 <span class="comment">// tested. Nonetheless, you can expect most functions to work.</span>00016 <span class="comment">//</span>00017 <span class="comment">// This code is distributed under the GNU Public License</span>00018 <span class="comment">// which can be found at http://www.gnu.org/licenses/gpl.txt</span>00019 <span class="comment">//</span>00020 <span class="comment">//*****************************************************************************</span>00021 00022 <span class="preprocessor">#include "lpc210x.h"</span>00023 00024 <span class="preprocessor">#include "<a class="code" href="global_8h.html">global.h</a>"</span>00025 <span class="preprocessor">#include "<a class="code" href="timer_8h.html">timer.h</a>"</span>00026 <span class="preprocessor">#include "<a class="code" href="membus_8h.html">membus.h</a>"</span>00027 <span class="preprocessor">#include "<a class="code" href="rprintf_8h.html">rprintf.h</a>"</span>00028 <span class="preprocessor">#include "<a class="code" href="ad9854_8h.html">ad9854.h</a>"</span>00029 00030 <span class="comment">// global variables</span>00031 <span class="keywordtype">int</span> Ad9854RefClkMult;00032 00033 <span class="keywordtype">void</span> ad9854Init(<span class="keywordtype">void</span>)00034 {00035 membusInit();00036 00037 <span class="comment">// reset device</span>00038 IOSET = AD9854_RESET;00039 IODIR |= AD9854_RESET;00040 delay(10000);00041 IOCLR = AD9854_RESET;00042 00043 <span class="comment">// setup IO Update pin</span>00044 ad9854SetupIOUpdate(0);00045 00046 <span class="comment">// initialize variables</span>00047 Ad9854RefClkMult = 1;00048 }00049 00050 <span class="keywordtype">void</span> ad9854SetupIOUpdate(<span class="keywordtype">int</span> state)00051 {00052 <span class="comment">// clear IO Update pin</span>00053 IOCLR = AD9854_IO_UPDATE;00054 00055 <span class="keywordflow">if</span>(state)00056 <span class="comment">// set IO update line to output</span>00057 IODIR |= AD9854_IO_UPDATE;00058 <span class="keywordflow">else</span>00059 <span class="comment">// set IO update line to input</span>00060 IODIR &= ~AD9854_IO_UPDATE;00061 }00062 00063 <span class="keywordtype">void</span> ad9854ClockIOUpdate(<span class="keywordtype">void</span>)00064 {00065 <span class="comment">// assert IO Update line</span>00066 IOSET = AD9854_IO_UPDATE;00067 <span class="comment">// wait</span>00068 <span class="keyword">asm</span> <span class="keyword">volatile</span> (<span class="stringliteral">"nop\r\n nop\r\n"</span>);00069 <span class="comment">// clear IO Update line</span>00070 IOCLR = AD9854_IO_UPDATE;00071 }00072 00073 <span class="keywordtype">void</span> ad9854WritePhase1(u16 phase)00074 {00075 membusWrite(AD9854_REG_BASE+AD9854_REG_PHASE1L, phase);00076 membusWrite(AD9854_REG_BASE+AD9854_REG_PHASE1H, phase>>8);00077 }00078 00079 <span class="keywordtype">void</span> ad9854WritePhase2(u16 phase)00080 {00081 membusWrite(AD9854_REG_BASE+AD9854_REG_PHASE2L, phase);00082 membusWrite(AD9854_REG_BASE+AD9854_REG_PHASE2H, phase>>8);00083 }00084 00085 <span class="keywordtype">void</span> ad9854WriteFreq1(u64 freq)00086 {00087 membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ10, freq);00088 membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ11, freq>>8);00089 membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ12, freq>>16);00090 membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ13, freq>>24);00091 membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ14, freq>>32);00092 membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ15, freq>>40);00093 }00094 00095 <span class="keywordtype">void</span> ad9854WriteFreq2(u64 freq)00096 {00097 membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ20, freq);00098 membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ21, freq>>8);00099 membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ22, freq>>16);00100 membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ23, freq>>24);00101 membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ24, freq>>32);00102 membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ25, freq>>40);00103 }00104 00105 <span class="keywordtype">void</span> ad9854WriteDeltaFreq(u64 freq)00106 {00107 membusWrite(AD9854_REG_BASE+AD9854_REG_DELTA0, freq);00108 membusWrite(AD9854_REG_BASE+AD9854_REG_DELTA1, freq>>8);00109 membusWrite(AD9854_REG_BASE+AD9854_REG_DELTA2, freq>>16);00110 membusWrite(AD9854_REG_BASE+AD9854_REG_DELTA3, freq>>24);00111 membusWrite(AD9854_REG_BASE+AD9854_REG_DELTA4, freq>>32);00112 membusWrite(AD9854_REG_BASE+AD9854_REG_DELTA5, freq>>48);00113 }00114 00115 <span class="keywordtype">void</span> ad9854WriteUpdateClock(u32 updclock)00116 {00117 membusWrite(AD9854_REG_BASE+AD9854_REG_UPDCLOCK0, updclock);00118 membusWrite(AD9854_REG_BASE+AD9854_REG_UPDCLOCK1, updclock>>8);00119 membusWrite(AD9854_REG_BASE+AD9854_REG_UPDCLOCK2, updclock>>16);00120 membusWrite(AD9854_REG_BASE+AD9854_REG_UPDCLOCK3, updclock>>24);00121 }00122 00123 <span class="keywordtype">void</span> ad9854WriteRampRateClock(u32 rampclock)00124 {00125 membusWrite(AD9854_REG_BASE+AD9854_REG_RAMPCLOCK0, rampclock);00126 membusWrite(AD9854_REG_BASE+AD9854_REG_RAMPCLOCK1, rampclock>>8);00127 membusWrite(AD9854_REG_BASE+AD9854_REG_RAMPCLOCK2, rampclock>>16);00128 }00129 00130 <span class="keywordtype">void</span> ad9854WriteControlReg(u32 cr)00131 {00132 membusWrite(AD9854_REG_BASE+AD9854_REG_CTRL0, cr);00133 membusWrite(AD9854_REG_BASE+AD9854_REG_CTRL1, cr>>8);00134 membusWrite(AD9854_REG_BASE+AD9854_REG_CTRL2, cr>>16);00135 membusWrite(AD9854_REG_BASE+AD9854_REG_CTRL3, cr>>24);00136 }00137 00138 <span class="keywordtype">void</span> ad9854WriteAmplitudeI(u16 ampi)00139 {00140 membusWrite(AD9854_REG_BASE+AD9854_REG_AMPLIL, ampi);00141 membusWrite(AD9854_REG_BASE+AD9854_REG_AMPLIH, ampi>>8);00142 }00143 00144 <span class="keywordtype">void</span> ad9854WriteAmplitudeQ(u16 ampq)00145 {00146 membusWrite(AD9854_REG_BASE+AD9854_REG_AMPLQL, ampq);00147 membusWrite(AD9854_REG_BASE+AD9854_REG_AMPLQH, ampq>>8);00148 }00149 00150 <span class="keywordtype">void</span> ad9854WriteOSKeyRampRate(u16 ramprate)00151 {00152 membusWrite(AD9854_REG_BASE+AD9854_REG_OSKEYRAMP, ramprate);00153 }00154 00155 <span class="keywordtype">void</span> ad9854WriteQDAC(u16 qdac)00156 {00157 membusWrite(AD9854_REG_BASE+AD9854_REG_QDACL, qdac);00158 membusWrite(AD9854_REG_BASE+AD9854_REG_QDACH, qdac>>8);00159 }00160 00161 u32 ad9854ReadControlReg(<span class="keywordtype">void</span>)00162 {00163 u32 cr=0;00164 cr = (membusRead(AD9854_REG_BASE+AD9854_REG_CTRL0) & 0x000000FF);00165 cr |= (membusRead(AD9854_REG_BASE+AD9854_REG_CTRL1) & 0x000000FF)<<8;00166 cr |= (membusRead(AD9854_REG_BASE+AD9854_REG_CTRL2) & 0x000000FF)<<16;00167 cr |= (membusRead(AD9854_REG_BASE+AD9854_REG_CTRL3) & 0x000000FF)<<24;00168 <span class="keywordflow">return</span> cr;00169 }00170 00171 <span class="keywordtype">void</span> ad9854ControlClear(u32 cr_clear)00172 {00173 u32 cr;00174 <span class="comment">// read in control register</span>00175 cr = ad9854ReadControlReg();00176 <span class="comment">// clear bits</span>00177 cr &= ~cr_clear;00178 <span class="comment">// write control register</span>00179 ad9854WriteControlReg(cr);00180 }00181 00182 <span class="keywordtype">void</span> ad9854ControlSet(u32 cr_set)00183 {00184 u32 cr;00185 <span class="comment">// read in control register</span>00186 cr = ad9854ReadControlReg();00187 <span class="comment">// clear bits</span>00188 cr |= cr_set;00189 <span class="comment">// write control register</span>00190 ad9854WriteControlReg(cr);00191 }00192 00193 <span class="keywordtype">void</span> ad9854SetMode(<span class="keywordtype">int</span> mode)00194 {00195 u32 cr;00196 <span class="comment">// read in control register</span>00197 cr = ad9854ReadControlReg();00198 <span class="comment">// set mode bits</span>00199 cr &= ~AD9854_MODE_MASK;00200 cr |= (mode<<9) & AD9854_MODE_MASK;00201 <span class="comment">// write control register</span>00202 ad9854WriteControlReg(cr);00203 }00204 00205 <span class="keywordtype">void</span> ad9854SetPLL(<span class="keywordtype">int</span> enabled, <span class="keywordtype">int</span> mult)00206 {00207 u32 cr;00208 <span class="comment">// read in control register</span>00209 cr = ad9854ReadControlReg();00210 <span class="comment">// set PLL state</span>00211 <span class="keywordflow">if</span>(enabled)00212 {00213 cr &= ~AD9854_PLL_BYPASS;00214 <span class="comment">// set local state reference</span>00215 Ad9854RefClkMult = mult;00216 }00217 <span class="keywordflow">else</span>00218 {00219 cr |= AD9854_PLL_BYPASS;00220 <span class="comment">// set local state reference</span>00221 Ad9854RefClkMult = 1;00222 }00223 <span class="comment">// set PLL multiplication ratio</span>00224 cr &= ~AD9854_PLL_MULT_MASK;00225 cr |= (mult<<16) & AD9854_PLL_MULT_MASK;00226 <span class="comment">// write control register</span>00227 ad9854WriteControlReg(cr);00228 }00229 00230 <span class="keywordtype">void</span> ad9854SetFreq1(u32 freqHz)00231 {00232 u64 ftw;00233 <span class="comment">// FTW = (Desired Output Frequency
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -