?? cc1100_test.lst
字號:
__text_start:
__start:
00C1 EFCF LDI R28,0xFF
00C2 E0D4 LDI R29,4
00C3 BFCD OUT 0x3D,R28
00C4 BFDE OUT 0x3E,R29
00C5 51C8 SUBI R28,0x18
00C6 40D0 SBCI R29,0
00C7 EA0A LDI R16,0xAA
00C8 8308 STD Y+0,R16
00C9 2400 CLR R0
00CA EEE7 LDI R30,0xE7
00CB E0F1 LDI R31,1
00CC E012 LDI R17,2
00CD 3AE7 CPI R30,0xA7
00CE 07F1 CPC R31,R17
00CF F011 BEQ 0x00D2
00D0 9201 ST R0,Z+
00D1 CFFB RJMP 0x00CD
00D2 8300 STD Z+0,R16
00D3 E9EB LDI R30,0x9B
00D4 E0F0 LDI R31,0
00D5 E0A0 LDI R26,0
00D6 E0B1 LDI R27,1
00D7 E011 LDI R17,1
00D8 38E2 CPI R30,0x82
00D9 07F1 CPC R31,R17
00DA F021 BEQ 0x00DF
00DB 95C8 LPM
00DC 9631 ADIW R30,1
00DD 920D ST R0,X+
00DE CFF9 RJMP 0x00D8
00DF D09C RCALL _main
_exit:
00E0 CFFF RJMP _exit
_CC1100Rst:
i --> R20
00E1 D74D RCALL push_gset1
FILE: D:\WIRELE~1\CC1020~1\SoftWare\SoftWare\CC1100.c
(0001) /****************************************************/
(0002) /* Application note */
(0003) /* Reference design : CC1100 RF Test Board */
(0004) /* File: CC1100.c */
(0005) /* Revision: 1.0 */
(0006) /* Description: */
(0007) /* Microcontroller:ATmega48/48V */
(0008) /* Author: Zcg, Field Applications Engineer, SunRay*/
(0009) /****************************************************/
(0010)
(0011) #include "iom88v.h"
(0012) #include "macros.h"
(0013) #include "main.h"
(0014) #include "CC1100.h"
(0015)
(0016) /*
(0017) ************************************************************
(0018) *Description:復位CC1100
(0019) *Arguments :none
(0020) *Returns :none
(0021) *Notes :
(0022) ************************************************************
(0023) */
(0024) void CC1100Rst (void)
(0025) {
(0026) INT8U i;
(0027)
(0028) SCLK_H;
00E2 9A45 SBI 0x08,5
(0029) SI_L;
00E3 9844 CBI 0x08,4
(0030) CS_L;
00E4 9843 CBI 0x08,3
(0031) CS_H;
00E5 9A43 SBI 0x08,3
(0032) for (i = 0; i < 100; i++); //delay 50.63us
00E6 2744 CLR R20
00E7 C001 RJMP 0x00E9
00E8 9543 INC R20
00E9 3644 CPI R20,0x64
00EA F3E8 BCS 0x00E8
(0033) SCLK_L;
00EB 9845 CBI 0x08,5
(0034) CS_L;
00EC 9843 CBI 0x08,3
(0035) while (SO_STATE);
00ED 9932 SBIC 0x06,2
00EE CFFE RJMP 0x00ED
(0036)
(0037) ShiftOutByte(CC1100_SRES); //復位命令
00EF E300 LDI R16,0x30
00F0 D07A RCALL _ShiftOutByte
(0038)
(0039) while (SO_STATE);
00F1 9932 SBIC 0x06,2
00F2 CFFE RJMP 0x00F1
(0040) CS_H;
00F3 9A43 SBI 0x08,3
00F4 D73D RCALL pop_gset1
00F5 9508 RET
_CC1100Strobe:
strobe --> R20
00F6 D738 RCALL push_gset1
00F7 2F40 MOV R20,R16
(0041) }
(0042)
(0043) /*
(0044) ************************************************************
(0045) *Description:寫CC1100控制命令
(0046) *Arguments :strobe:控制命令
(0047) *Returns :none
(0048) *Notes :
(0049) ************************************************************
(0050) */
(0051) void CC1100Strobe (INT8U strobe)
(0052) {
(0053) SCLK_L; //寫控制命令
00F8 9845 CBI 0x08,5
(0054) //CS_L;
(0055) CS_H; //3V與5V系統相連,保證平時為低電平
00F9 9A43 SBI 0x08,3
(0056) CS_L;
00FA 9843 CBI 0x08,3
(0057) ShiftOutByte(strobe);
00FB 2F04 MOV R16,R20
00FC D06E RCALL _ShiftOutByte
(0058) //CS_H;
(0059) CS_H; //3V與5V系統相連,保證平時為低電平
00FD 9A43 SBI 0x08,3
(0060) CS_L;
00FE 9843 CBI 0x08,3
00FF D732 RCALL pop_gset1
0100 9508 RET
_CC1100ReadReg:
value --> R20
addr --> R20
0101 D72D RCALL push_gset1
0102 2F40 MOV R20,R16
(0061) }
(0062)
(0063) /*
(0064) ************************************************************
(0065) *Description:讀CC1100單個寄存器
(0066) *Arguments :addr:地址
(0067) *Returns :數據
(0068) *Notes :
(0069) ************************************************************
(0070) */
(0071) INT8U CC1100ReadReg (INT8U addr)
(0072) {
(0073) INT8U value;
(0074)
(0075) SCLK_L; //寫地址
0103 9845 CBI 0x08,5
(0076) //CS_L;
(0077) CS_H; //3V與5V系統相連,保證平時為低電平
0104 9A43 SBI 0x08,3
(0078) CS_L;
0105 9843 CBI 0x08,3
(0079) addr |= 0x80; //讀寄存器地址
0106 6840 ORI R20,0x80
(0080) ShiftOutByte(addr);
0107 2F04 MOV R16,R20
0108 D062 RCALL _ShiftOutByte
(0081)
(0082) value = ShiftInByte(); //讀數據
0109 D054 RCALL _ShiftInByte
010A 2F40 MOV R20,R16
(0083) //CS_H;
(0084) CS_H; //3V與5V系統相連,保證平時為低電平
010B 9A43 SBI 0x08,3
(0085) CS_L;
010C 9843 CBI 0x08,3
(0086)
(0087) return value;
010D D724 RCALL pop_gset1
010E 9508 RET
_CC1100WriteReg:
value --> R20
addr --> R22
010F D71D RCALL push_gset2
0110 2F42 MOV R20,R18
0111 2F60 MOV R22,R16
(0088) }
(0089)
(0090) /*
(0091) ************************************************************
(0092) *Description:寫CC1100單個寄存器
(0093) *Arguments :addr:地址; value:數據
(0094) *Returns :none
(0095) *Notes :
(0096) ************************************************************
(0097) */
(0098) void CC1100WriteReg (INT8U addr, INT8U value)
(0099) {
(0100) SCLK_L; //寫地址
0112 9845 CBI 0x08,5
(0101) //CS_L;
(0102) CS_H; //3V與5V系統相連,保證平時為低電平
0113 9A43 SBI 0x08,3
(0103) CS_L;
0114 9843 CBI 0x08,3
(0104) ShiftOutByte(addr);
0115 2F06 MOV R16,R22
0116 D054 RCALL _ShiftOutByte
(0105)
(0106) ShiftOutByte(value); //寫數據
0117 2F04 MOV R16,R20
0118 D052 RCALL _ShiftOutByte
(0107) //CS_H;
(0108) CS_H; //3V與5V系統相連,保證平時為低電平
0119 9A43 SBI 0x08,3
(0109) CS_L;
011A 9843 CBI 0x08,3
011B D703 RCALL pop_gset2
011C 9508 RET
_CC1100ReadStatus:
value --> R20
addr --> R20
011D D711 RCALL push_gset1
011E 2F40 MOV R20,R16
(0110) }
(0111)
(0112)
(0113) /*
(0114) ************************************************************
(0115) *Description:讀CC1100狀態寄存器
(0116) *Arguments :addr:地址
(0117) *Returns :狀態值
(0118) *Notes :
(0119) ************************************************************
(0120) */
(0121) INT8U CC1100ReadStatus (INT8U addr)
(0122) {
(0123) INT8U value;
(0124)
(0125) SCLK_L; //寫地址
011F 9845 CBI 0x08,5
(0126) //CS_L;
(0127) CS_H; //3V與5V系統相連,保證平時為低電平
0120 9A43 SBI 0x08,3
(0128) CS_L;
0121 9843 CBI 0x08,3
(0129) addr |= 0xC0; //讀狀態寄存器地址
0122 6C40 ORI R20,0xC0
(0130) ShiftOutByte(addr);
0123 2F04 MOV R16,R20
0124 D046 RCALL _ShiftOutByte
(0131)
(0132) value = ShiftInByte(); //讀狀態
0125 D038 RCALL _ShiftInByte
0126 2F40 MOV R20,R16
(0133) //CS_H;
(0134) CS_H; //3V與5V系統相連,保證平時為低電平
0127 9A43 SBI 0x08,3
(0135) CS_L;
0128 9843 CBI 0x08,3
(0136)
(0137) return value;
0129 D708 RCALL pop_gset1
012A 9508 RET
_CC1100ReadBurstReg:
i --> R20
cnt --> R22
buf --> R10
addr --> R20
012B D6FF RCALL push_gset3
012C 0159 MOVW R10,R18
012D 2F40 MOV R20,R16
012E 816E LDD R22,Y+6
(0138) }
(0139)
(0140)
(0141) /*
(0142) ************************************************************
(0143) *Description:連續讀CC1100狀態寄存器
(0144) *Arguments :addr:地址; *buf:讀取數據存放寄存器; cnt:所要讀取字節個數
(0145) *Returns :none
(0146) *Notes :
(0147) ************************************************************
(0148) */
(0149) void CC1100ReadBurstReg (INT8U addr, INT8U *buf, INT8U cnt)
(0150) {
(0151) INT8U i;
(0152)
(0153) SCLK_L; //寫地址
012F 9845 CBI 0x08,5
(0154) //CS_L;
(0155) CS_H; //3V與5V系統相連,保證平時為低電平
0130 9A43 SBI 0x08,3
(0156) CS_L;
0131 9843 CBI 0x08,3
(0157) addr |= 0xC0; //連續讀寄存器地址
0132 6C40 ORI R20,0xC0
(0158) ShiftOutByte(addr);
0133 2F04 MOV R16,R20
0134 D036 RCALL _ShiftOutByte
(0159)
(0160) for (i = 0; i < cnt; i++) //連續讀數據
0135 2744 CLR R20
0136 C007 RJMP 0x013E
(0161) {
(0162) *(buf + i) = ShiftInByte();
0137 D026 RCALL _ShiftInByte
0138 2FE4 MOV R30,R20
0139 27FF CLR R31
013A 0DEA ADD R30,R10
013B 1DFB ADC R31,R11
013C 8300 STD Z+0,R16
013D 9543 INC R20
013E 1746 CP R20,R22
013F F3B8 BCS 0x0137
(0163) }
(0164) //CS_H;
(0165) CS_H; //3V與5V系統相連,保證平時為低電平
0140 9A43 SBI 0x08,3
(0166) CS_L;
0141 9843 CBI 0x08,3
0142 D6DE RCALL pop_gset3
0143 9508 RET
_CC1100WriteBurstReg:
value --> R20
i --> R22
cnt --> R10
buf --> R12
addr --> R20
0144 D6E4 RCALL push_gset4
0145 0169 MOVW R12,R18
0146 2F40 MOV R20,R16
0147 84A8 LDD R10,Y+8
(0167) }
(0168)
(0169)
(0170) /*
(0171) ************************************************************
(0172) *Description:連續寫CC1100狀態寄存器
(0173) *Arguments :addr:地址; *buf:寫數據寄存器; cnt:所要寫字節個數
(0174) *Returns :none
(0175) *Notes :
(0176) ************************************************************
(0177) */
(0178) void CC1100WriteBurstReg (INT8U addr, INT8U *buf, INT8U cnt)
(0179) {
(0180) INT8U i;
(0181) INT8U value;
(0182)
(0183) SCLK_L; //寫地址
0148 9845 CBI 0x08,5
(0184) //CS_L;
(0185) CS_H; //3V與5V系統相連,保證平時為低電平
0149 9A43 SBI 0x08,3
(0186) CS_L;
014A 9843 CBI 0x08,3
(0187) addr |= 0x40; //連續寫寄存器地址
014B 6440 ORI R20,0x40
(0188) ShiftOutByte(addr);
014C 2F04 MOV R16,R20
014D D01D RCALL _ShiftOutByte
(0189)
(0190) for (i = 0; i < cnt; i++) //連續寫數據
014E 2766 CLR R22
014F C008 RJMP 0x0158
(0191) {
(0192) value = *(buf + i);
0150 2FE6 MOV R30,R22
0151 27FF CLR R31
0152 0DEC ADD R30,R12
0153 1DFD ADC R31,R13
0154 8140 LDD R20,Z+0
(0193) ShiftOutByte(value);
0155 2F04 MOV R16,R20
0156 D014 RCALL _ShiftOutByte
0157 9563 INC R22
0158 156A CP R22,R10
0159 F3B0 BCS 0x0150
(0194) }
(0195) //CS_H;
(0196) CS_H; //3V與5V系統相連,保證平時為低電平
015A 9A43 SBI 0x08,3
(0197) CS_L;
015B 9843 CBI 0x08,3
015C D6C6 RCALL pop_gset4
015D 9508 RET
(0198) }
(0199)
(0200)
(0201) /*
(0202) ************************************************************
(0203) *Description:利用SPI從CC1100讀一個字節
(0204) *Arguments :none
(0205) *Returns :返回所讀字節
(0206) *Notes :
(0207) ************************************************************
(0208) */
(0209) INT8U ShiftInByte (void)
(0210) {
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -