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