📄 ad9954.lst
字号:
C51 COMPILER V8.02 AD9954 04/01/2008 17:39:41 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE AD9954
OBJECT MODULE PLACED IN AD9954.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE AD9954.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include "AD9954.h"
3
4 unsigned long CFR1 =0;
5 unsigned long CFR1SLAVE = 0x00800000;
6 unsigned long CFR2 = 0;
7 unsigned long ASF;
8 unsigned long ARR;
9 unsigned long FTW0;
10 unsigned long POW0;
11 unsigned long FTW1;
12 unsigned long NLSCW=0xFF000053E2;
13 unsigned long PLSCW=0xFF000053E2;
14 unsigned long multfreq = 0xFFFFFFFF; //计算频率控制字的系数
15
16
17 /***********************************************************************
18 ** 函数名称: 端口操作
19 ** 功能描述: AD9954端口基本操作
20 ** 输 入: 无
21 ** 输 出: 无
22 ** 全局变量: 无
23 ** 调用模块: 无
24 ***********************************************************************/
25 void SCLK_0(void)
26 {
27 1 SCLK = 0;
28 1 }
29
30
31 void SCLK_1(void)
32 {
33 1 SCLK = 1;
34 1 }
35
36
37 void SDIO_0(void)
38 {
39 1 SDIO = 0;
40 1 }
41
42
43 void SDIO_1(void)
44 {
45 1 SDIO = 1;
46 1 }
47
48
49 void CS_Enable(void)
50 {
51 1 CS = 0;
52 1 }
53
54
55 void CS_Disable(void)
C51 COMPILER V8.02 AD9954 04/01/2008 17:39:41 PAGE 2
56 {
57 1 CS = 1;
58 1 }
59
60 void CS2_Enable(void)
61 {
62 1 CS2 = 0;
63 1 }
64
65 void CS2_Disable(void)
66 {
67 1 CS2 = 1;
68 1 }
69
70 void IO_UPDATE_0(void)
71 {
72 1 IO_UPDATE = 0;
73 1 }
74
75 void IO_UPDATE_1(void)
76 {
77 1 IO_UPDATE = 1;
78 1 }
79
80 void IO_SYNC_1(void)
81 {
82 1 IO_SYNC = 1;
83 1 }
84
85 void IO_SYNC_0(void)
86 {
87 1 IO_SYNC = 0;
88 1 }
89
90 void PS0_Set_High(void)
91 {
92 1 PS0 = 1;
93 1 }
94
95 void PS0_Set_Low(void)
96 {
97 1 PS0 = 0;
98 1 }
99
100 void PS1_Set_High(void)
101 {
102 1 PS1 = 1;
103 1 }
104
105 void PS1_Set_Low(void)
106 {
107 1 PS1 = 0;
108 1 }
109
110
111 /***********************************************************************
112 ** 函数名称: IO9954_Init
113 ** 功能描述: IO_Init
114 ** 输 入: 无
115 ** 输 出: 无
116 ** 全局变量: 无
117 ** 调用模块: 无
C51 COMPILER V8.02 AD9954 04/01/2008 17:39:41 PAGE 3
118 ***********************************************************************/
119 void IO9954_Init()
120 {
121 1
122 1 PWR=0;
123 1 RET=0;
124 1 CS2 = 0;
125 1 CLKMS=0;
126 1
127 1 IO_UPDATE = 0;
128 1 IO_SYNC = 0;
129 1 SDIO = 0;
130 1 SCLK = 0;
131 1 CS = 0;
132 1 SDO = 0;
133 1 }
134
135 /***********************************************************************
136 ** 函数名称: nNop
137 ** 功能描述: US级软件延时(不精确)
138 ** 输 入: 延时参数,值越大时延时越久
139 ** 输 出: 无
140 ** 全局变量: 无
141 ** 调用模块: 无
142 ***********************************************************************/
143 void nNop(unsigned long nValue)
144 {
145 1 unsigned long i;
146 1 for(i=nValue;i>0;i--);
147 1 }
148
149 /***********************************************************************
150 ** 函数名称: WriteByte
151 ** 功能描述: 向AD9954发送一字节数据 MSB FIRST
152 ** 输 入: unsigned char data 发送的数据
153 ** 输 出: 无
154 ** 全局变量: 无
155 ** 调用模块: 端口操作 nNop
156 ***********************************************************************/
157 void WriteByte(unsigned char Data)
158 {
159 1 unsigned char k;
160 1 for(k=0;k<8;k++)
161 1 {
162 2 SCLK_0();
163 2 nNop(4); //延时很重要
164 2 if((Data&0x80) == 0x80)
165 2 SDIO_1();
166 2 else
167 2 SDIO_0();
168 2 Data = Data << 1;
169 2 nNop(2); //延时很重要
170 2 SCLK_1();
171 2 nNop(4); //延时很重要
172 2 }
173 1 }
174
175
176 /***********************************************************************
177 ** 函数名称: ReadByte
178 ** 功能描述: 从AD9954读取一字节数据 MSB FIRST
179 ** 输 入: 无
C51 COMPILER V8.02 AD9954 04/01/2008 17:39:41 PAGE 4
180 ** 输 出: unsigned char 读回的数据
181 ** 全局变量: 无
182 ** 调用模块: 端口操作
183 ***********************************************************************/
184 unsigned char ReadByte(void)
185 {
186 1 unsigned char Data=0;
187 1 unsigned char k;
188 1 SDIO = 0;
189 1 for(k=0;k<8;k++)
190 1 {
191 2 SCLK_0();
192 2 nNop(1);
193 2 nNop(1);
194 2 SCLK_1();
195 2 nNop(1);
196 2 nNop(1);
197 2 Data = Data << 1;
198 2 if(SDIO)
199 2 {
200 3 Data |= 0x01;
201 3 }
202 2 }
203 1 SDIO = 1;
204 1 return Data;
205 1 }
206
207
208
209 /***********************************************************************
210 ** 函数名称: RW_Reg
211 ** 功能描述: AD9954读写寄存器操作
212 ** 输 入: unsigned char addr 寄存器地址
213 ** unsigned char *buf 写寄存器: 指向发送数据的指针
214 ** 读寄存器: 指向读回数据的指针
215 ** unsigned char num 发送或读回的数据长度 num Byte
216 ** unsigned char rw 读写选择 1 读 0 写
217 ** 输 出: 无
218 ** 全局变量: 无
219 ** 调用模块: ReadByte WriteByte
220 ***********************************************************************/
221 void RW_Reg(unsigned char addr,unsigned char *buf,unsigned char num,
222 unsigned char rw)
223 {
224 1 unsigned char ins;
225 1 if(rw == 1)
226 1 {
227 2 ins = addr | 0x80;
228 2 WriteByte(ins);
229 2 do{
230 3 buf[num-1] = ReadByte();
231 3 num--;
232 3 nNop(5);
233 3 }
234 2 while(num);
235 2 }
236 1 else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -