📄 cc1000.lst
字号:
1 .file "cc1000.c"
2 .arch atmega128
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
83 .global CC1000ControlM_FSepTbl
84 .data
87 CC1000ControlM_FSepTbl:
88 0000 AA01 .word 426
89 0002 F101 .word 497
90 0004 3802 .word 568
91 0006 8002 .word 640
92 0008 C702 .word 711
93 000a 0E03 .word 782
94 000c 5503 .word 853
95 000e 9C03 .word 924
96 0010 E303 .word 995
97 .global CC1000ControlM_CorTbl
100 CC1000ControlM_CorTbl:
101 0012 BD04 .word 1213
102 0014 8805 .word 1416
103 0016 5206 .word 1618
104 0018 1C07 .word 1820
105 001a E607 .word 2022
106 001c B008 .word 2224
107 001e 7B09 .word 2427
108 0020 450A .word 2629
109 0022 0F0B .word 2831
110 .global CC1000ControlM_FRefTbl
113 CC1000ControlM_FRefTbl:
114 0024 0080 2500 .long 2457600
115 0028 9224 2000 .long 2106514
116 002c 0020 1C00 .long 1843200
117 0030 0000 1900 .long 1638400
118 0034 0080 1600 .long 1474560
119 0038 5D74 1400 .long 1340509
120 003c 00C0 1200 .long 1228800
121 0040 C54E 1100 .long 1134277
122 0044 4912 1000 .long 1053257
123 .text
125 .global CC1000ControlGetLOStatus
127 CC1000ControlGetLOStatus:
1:cc1000.c **** /*
2:cc1000.c **** ****************************************************************************
3:cc1000.c **** * 宁波中科集成电路设计中心 版权所有 Copyright 2005
4:cc1000.c **** * http:\\www.nbicc.com
5:cc1000.c **** *文件名: cc1000.c
6:cc1000.c **** *程序员: 夏鹏 xpsonny@nbicc.com
7:cc1000.c **** *主要内容:cc1000驱动相关
8:cc1000.c **** *
9:cc1000.c **** *如有问题或BUG,请登录www.wsn.net.cn 提问或用邮件和作者联系
10:cc1000.c **** ****************************************************************************
11:cc1000.c **** */
12:cc1000.c ****
13:cc1000.c **** #include "cc1000.h"
14:cc1000.c **** #include "fun.h"
15:cc1000.c **** #include "os.h"
16:cc1000.c **** #include "global.h"
17:cc1000.c ****
18:cc1000.c ****
19:cc1000.c **** uint32_t CC1000ControlM_gCurrentChannel;
20:cc1000.c **** uint8_t CC1000ControlM_gCurrentParameters[31];
21:cc1000.c ****
22:cc1000.c **** enum {
23:cc1000.c **** CC1000ControlM_IF = 150000,
24:cc1000.c **** CC1000ControlM_FREQ_MIN = 4194304,
25:cc1000.c **** CC1000ControlM_FREQ_MAX = 16751615
26:cc1000.c **** };
27:cc1000.c ****
28:cc1000.c **** const uint32_t CC1000ControlM_FRefTbl[9] = { 2457600,
29:cc1000.c **** 2106514,
30:cc1000.c **** 1843200,
31:cc1000.c **** 1638400,
32:cc1000.c **** 1474560,
33:cc1000.c **** 1340509,
34:cc1000.c **** 1228800,
35:cc1000.c **** 1134277,
36:cc1000.c **** 1053257 };
37:cc1000.c ****
38:cc1000.c **** const uint16_t CC1000ControlM_CorTbl[9] = { 1213,
39:cc1000.c **** 1416,
40:cc1000.c **** 1618,
41:cc1000.c **** 1820,
42:cc1000.c **** 2022,
43:cc1000.c **** 2224,
44:cc1000.c **** 2427,
45:cc1000.c **** 2629,
46:cc1000.c **** 2831 };
47:cc1000.c ****
48:cc1000.c **** const uint16_t CC1000ControlM_FSepTbl[9] = { 0x1AA,
49:cc1000.c **** 0x1F1,
50:cc1000.c **** 0x238,
51:cc1000.c **** 0x280,
52:cc1000.c **** 0x2C7,
53:cc1000.c **** 0x30E,
54:cc1000.c **** 0x355,
55:cc1000.c **** 0x39C,
56:cc1000.c **** 0x3E3 };
57:cc1000.c ****
58:cc1000.c ****
59:cc1000.c **** bool CC1000ControlGetLOStatus(void) // 得到CC1000的LO状态
60:cc1000.c **** {
129 .LM1:
130 /* prologue: frame size=0 */
131 /* prologue end (size=0) */
61:cc1000.c **** return CC1000ControlM_gCurrentParameters[0x1e];
133 .LM2:
134 0000 8091 0000 lds r24,CC1000ControlM_gCurrentParameters+30
62:cc1000.c **** }
136 .LM3:
137 0004 9927 clr r25
138 /* epilogue: frame size=0 */
139 0006 0895 ret
140 /* epilogue end (size=1) */
141 /* function CC1000ControlGetLOStatus size 4 (3) */
145 .global CC1000ControlComputeFreq
147 CC1000ControlComputeFreq:
63:cc1000.c ****
64:cc1000.c **** result_t CC1000ControlSelectLock(uint8_t Value) // 设置CC1000的PLL
65:cc1000.c **** {
66:cc1000.c **** CC1000ControlM_gCurrentParameters[0xd] = Value << 4;
67:cc1000.c **** return CC1000HPLWrite(0x0D, Value << 4);
68:cc1000.c **** }
69:cc1000.c ****
70:cc1000.c **** result_t CC1000ControlChipconCal(void)
71:cc1000.c **** {
72:cc1000.c **** CC1000HPLWrite(0x0B, 0x00);
73:cc1000.c **** CC1000HPLWrite(0x42, 0x3f);
74:cc1000.c ****
75:cc1000.c **** CC1000HPLWrite(0x00, (
76:cc1000.c **** 1 << 4) | (1 << 0));
77:cc1000.c ****
78:cc1000.c **** CC1000HPLWrite(0x0E, ((
79:cc1000.c **** 1 << 7) | (
80:cc1000.c **** 1 << 5)) | (6 << 0));
81:cc1000.c ****
82:cc1000.c **** while ((CC1000HPLRead(0x0E) & (1 << 3)) == 0) ;
83:cc1000.c ****
84:cc1000.c **** CC1000HPLWrite(0x0E, (
85:cc1000.c **** 1 << 5) | (6 << 0));
86:cc1000.c ****
87:cc1000.c **** CC1000HPLWrite(0x00, (((
88:cc1000.c **** 1 << 7) | (1 << 6)) | (1 << 5)) | (
89:cc1000.c **** 1 << 0));
90:cc1000.c ****
91:cc1000.c **** CC1000HPLWrite(0x09, CC1000ControlM_gCurrentParameters[29]);
92:cc1000.c **** CC1000HPLWrite(0x0B, 0x00);
93:cc1000.c ****
94:cc1000.c **** CC1000HPLWrite(0x0E, ((
95:cc1000.c **** 1 << 7) | (
96:cc1000.c **** 1 << 5)) | (6 << 0));
97:cc1000.c ****
98:cc1000.c **** while ((CC1000HPLRead(0x0E) & (1 << 3)) == 0) ;
99:cc1000.c ****
100:cc1000.c **** CC1000HPLWrite(0x0E, (
101:cc1000.c **** 1 << 5) | (6 << 0));
102:cc1000.c ****
103:cc1000.c **** return SUCCESS;
104:cc1000.c **** }
105:cc1000.c ****
106:cc1000.c **** void CC1000ControlCC1000SetFreq(void)
107:cc1000.c **** {
108:cc1000.c **** uint8_t i;
109:cc1000.c ****
110:cc1000.c **** for (i = 1; i < 0x0d; i++) {
111:cc1000.c **** CC1000HPLWrite(i, CC1000ControlM_gCurrentParameters[i]);
112:cc1000.c **** }
113:cc1000.c ****
114:cc1000.c ****
115:cc1000.c **** CC1000HPLWrite(0x12, CC1000ControlM_gCurrentParameters[0x12]);
116:cc1000.c ****
117:cc1000.c **** CC1000ControlChipconCal();
118:cc1000.c ****
119:cc1000.c **** return;
120:cc1000.c **** }
121:cc1000.c ****
122:cc1000.c **** uint32_t CC1000ControlComputeFreq(uint32_t desiredFreq)
123:cc1000.c **** {
149 .LM4:
150 /* prologue: frame size=30 */
151 0008 2F92 push r2
152 000a 3F92 push r3
153 000c 4F92 push r4
154 000e 5F92 push r5
155 0010 6F92 push r6
156 0012 7F92 push r7
157 0014 8F92 push r8
158 0016 9F92 push r9
159 0018 AF92 push r10
160 001a BF92 push r11
161 001c CF92 push r12
162 001e DF92 push r13
163 0020 EF92 push r14
164 0022 FF92 push r15
165 0024 0F93 push r16
166 0026 1F93 push r17
167 0028 CF93 push r28
168 002a DF93 push r29
169 002c CDB7 in r28,__SP_L__
170 002e DEB7 in r29,__SP_H__
171 0030 6E97 sbiw r28,30
172 0032 0FB6 in __tmp_reg__,__SREG__
173 0034 F894 cli
174 0036 DEBF out __SP_H__,r29
175 0038 0FBE out __SREG__,__tmp_reg__
176 003a CDBF out __SP_L__,r28
177 /* prologue end (size=26) */
178 003c 6983 std Y+1,r22
179 003e 7A83 std Y+2,r23
180 0040 8B83 std Y+3,r24
181 0042 9C83 std Y+4,r25
124:cc1000.c **** uint32_t ActualChannel = 0;
183 .LM5:
184 0044 1D82 std Y+5,__zero_reg__
185 0046 1E82 std Y+6,__zero_reg__
186 0048 1F82 std Y+7,__zero_reg__
187 004a 1886 std Y+8,__zero_reg__
125:cc1000.c **** uint32_t RXFreq = 0;
189 .LM6:
190 004c 20E0 ldi r18,lo8(0)
191 004e 30E0 ldi r19,hi8(0)
192 0050 40E0 ldi r20,hlo8(0)
193 0052 50E0 ldi r21,hhi8(0)
194 0054 2987 std Y+9,r18
195 0056 3A87 std Y+10,r19
196 0058 4B87 std Y+11,r20
197 005a 5C87 std Y+12,r21
126:cc1000.c **** uint32_t TXFreq = 0;
199 .LM7:
200 005c 2D87 std Y+13,r18
201 005e 3E87 std Y+14,r19
202 0060 4F87 std Y+15,r20
203 0062 588B std Y+16,r21
127:cc1000.c **** int32_t Offset = 0x7fffffff;
205 .LM8:
206 0064 2FEF ldi r18,lo8(2147483647)
207 0066 3FEF ldi r19,hi8(2147483647)
208 0068 4FEF ldi r20,hlo8(2147483647)
209 006a 5FE7 ldi r21,hhi8(2147483647)
210 006c 298B std Y+17,r18
211 006e 3A8B std Y+18,r19
212 0070 4B8B std Y+19,r20
213 0072 5C8B std Y+20,r21
128:cc1000.c **** uint16_t FSep = 0;
215 .LM9:
216 0074 1D8E std Y+29,__zero_reg__
217 0076 1E8E std Y+30,__zero_reg__
129:cc1000.c **** uint8_t RefDiv = 0;
219 .LM10:
220 0078 1D8A std Y+21,__zero_reg__
130:cc1000.c **** uint8_t i;
131:cc1000.c ****
132:cc1000.c **** for (i = 0; i < 9; i++) {
222 .LM11:
223 007a 3D89 ldd r19,Y+21
224 007c 3E8B std Y+22,r19
225 007e 40E0 ldi r20,lo8(CC1000ControlM_FRefTbl)
226 0080 50E0 ldi r21,hi8(CC1000ControlM_FRefTbl)
227 0082 4F8B std Y+23,r20
228 0084 588F std Y+24,r21
229 0086 80E0 ldi r24,lo8(CC1000ControlM_CorTbl)
230 0088 90E0 ldi r25,hi8(CC1000ControlM_CorTbl)
231 008a 898F std Y+25,r24
232 008c 9A8F std Y+26,r25
233 008e A0E0 ldi r26,lo8(0)
234 0090 B0E0 ldi r27,hi8(0)
235 0092 AB8F std Y+27,r26
236 0094 BC8F std Y+28,r27
237 .L12:
238 .LBB2:
133:cc1000.c ****
134:cc1000.c **** uint32_t NRef = desiredFreq + CC1000ControlM_IF;
240 .LM12:
241 0096 2981 ldd r18,Y+1
242 0098 3A81 ldd r19,Y+2
243 009a 4B81 ldd r20,Y+3
244 009c 5C81 ldd r21,Y+4
245 009e 2051 subi r18,lo8(-(150000))
246 00a0 364B sbci r19,hi8(-(150000))
247 00a2 4D4F sbci r20,hlo8(-(150000))
248 00a4 5F4F sbci r21,hhi8(-(150000))
135:cc1000.c **** uint32_t FRef = CC1000ControlM_FRefTbl[i];
250 .LM13:
251 00a6 EF89 ldd r30,Y+23
252 00a8 F88D ldd r31,Y+24
253 00aa A190 ld r10,Z+
254 00ac B190 ld r11,Z+
255 00ae C190 ld r12,Z+
256 00b0 D190 ld r13,Z+
257 00b2 EF8B std Y+23,r30
258 00b4 F88F std Y+24,r31
136:cc1000.c **** uint32_t Channel = 0;
260 .LM14:
261 00b6 EE24 clr r14
262 00b8 FF24 clr r15
263 00ba 8701 movw r16,r14
137:cc1000.c **** uint32_t RXCalc = 0;
265 .LM15:
266 00bc 1701 movw r2,r14
267 00be 2801 movw r4,r16
138:cc1000.c **** uint32_t TXCalc = 0;
139:cc1000.c **** int32_t diff;
140:cc1000.c ****
141:cc1000.c **** NRef = ((desiredFreq + CC1000ControlM_IF) << 2) / FRef;
269 .LM16:
270 00c0 72E0 ldi r23,2
271 00c2 220F 1: lsl r18
272 00c4 331F rol r19
273 00c6 441F rol r20
274 00c8 551F rol r21
275 00ca 7A95 dec r23
276 00cc D1F7 brne 1b
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -