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

📄 ad9854_8c-source.html

📁 方便飞利浦arm7tdmi 处理器lpc2100开发的C函数库 Procyon ARMlib-LPC2100 C-Language Function Library for Philips LPC21
💻 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&nbsp;Page</a> | <a class="qindex" href="files.html">File&nbsp;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 &amp;= ~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&gt;&gt;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&gt;&gt;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&gt;&gt;8);00089     membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ12, freq&gt;&gt;16);00090     membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ13, freq&gt;&gt;24);00091     membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ14, freq&gt;&gt;32);00092     membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ15, freq&gt;&gt;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&gt;&gt;8);00099     membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ22, freq&gt;&gt;16);00100     membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ23, freq&gt;&gt;24);00101     membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ24, freq&gt;&gt;32);00102     membusWrite(AD9854_REG_BASE+AD9854_REG_FREQ25, freq&gt;&gt;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&gt;&gt;8);00109     membusWrite(AD9854_REG_BASE+AD9854_REG_DELTA2, freq&gt;&gt;16);00110     membusWrite(AD9854_REG_BASE+AD9854_REG_DELTA3, freq&gt;&gt;24);00111     membusWrite(AD9854_REG_BASE+AD9854_REG_DELTA4, freq&gt;&gt;32);00112     membusWrite(AD9854_REG_BASE+AD9854_REG_DELTA5, freq&gt;&gt;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&gt;&gt;8);00119     membusWrite(AD9854_REG_BASE+AD9854_REG_UPDCLOCK2, updclock&gt;&gt;16);00120     membusWrite(AD9854_REG_BASE+AD9854_REG_UPDCLOCK3, updclock&gt;&gt;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&gt;&gt;8);00127     membusWrite(AD9854_REG_BASE+AD9854_REG_RAMPCLOCK2, rampclock&gt;&gt;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&gt;&gt;8);00134     membusWrite(AD9854_REG_BASE+AD9854_REG_CTRL2, cr&gt;&gt;16);00135     membusWrite(AD9854_REG_BASE+AD9854_REG_CTRL3, cr&gt;&gt;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&gt;&gt;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&gt;&gt;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&gt;&gt;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) &amp; 0x000000FF);00165     cr |= (membusRead(AD9854_REG_BASE+AD9854_REG_CTRL1) &amp; 0x000000FF)&lt;&lt;8;00166     cr |= (membusRead(AD9854_REG_BASE+AD9854_REG_CTRL2) &amp; 0x000000FF)&lt;&lt;16;00167     cr |= (membusRead(AD9854_REG_BASE+AD9854_REG_CTRL3) &amp; 0x000000FF)&lt;&lt;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 &amp;= ~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 &amp;= ~AD9854_MODE_MASK;00200     cr |= (mode&lt;&lt;9) &amp; 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 &amp;= ~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 &amp;= ~AD9854_PLL_MULT_MASK;00225     cr |= (mult&lt;&lt;16) &amp; 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 + -