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

📄 cc1000.lst

📁 一个WSN的树状路由,对于那些学WSN路由方面的朋友应该有说帮助.
💻 LST
📖 第 1 页 / 共 5 页
字号:
   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 + -