📄 cc1100.s
字号:
.module CC1100.c
.area text(rom, con, rel)
.dbfile D:\WIRELE~1\CC1020~1\SoftWare\SoftWare\CC1100.c
.dbfunc e CC1100Rst _CC1100Rst fV
; i -> R20
.even
_CC1100Rst::
rcall push_gset1
.dbline -1
.dbline 25
; /****************************************************/
; /* Application note */
; /* Reference design : CC1100 RF Test Board */
; /* File: CC1100.c */
; /* Revision: 1.0 */
; /* Description: */
; /* Microcontroller:ATmega48/48V */
; /* Author: Zcg, Field Applications Engineer, SunRay*/
; /****************************************************/
;
; #include "iom88v.h"
; #include "macros.h"
; #include "main.h"
; #include "CC1100.h"
;
; /*
; ************************************************************
; *Description:复位CC1100
; *Arguments :none
; *Returns :none
; *Notes :
; ************************************************************
; */
; void CC1100Rst (void)
; {
.dbline 28
; INT8U i;
;
; SCLK_H;
sbi 0x8,5
.dbline 29
; SI_L;
cbi 0x8,4
.dbline 30
; CS_L;
cbi 0x8,3
.dbline 31
; CS_H;
sbi 0x8,3
.dbline 32
clr R20
rjmp L5
L2:
.dbline 32
L3:
.dbline 32
inc R20
L5:
.dbline 32
; for (i = 0; i < 100; i++); //delay 50.63us
cpi R20,100
brlo L2
.dbline 33
; SCLK_L;
cbi 0x8,5
.dbline 34
; CS_L;
cbi 0x8,3
L6:
.dbline 35
L7:
.dbline 35
; while (SO_STATE);
sbic 0x6,2
rjmp L6
.dbline 37
;
; ShiftOutByte(CC1100_SRES); //复位命令
ldi R16,48
rcall _ShiftOutByte
L9:
.dbline 39
L10:
.dbline 39
;
; while (SO_STATE);
sbic 0x6,2
rjmp L9
.dbline 40
; CS_H;
sbi 0x8,3
.dbline -2
L1:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e CC1100Strobe _CC1100Strobe fV
; strobe -> R20
.even
_CC1100Strobe::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 52
; }
;
; /*
; ************************************************************
; *Description:写CC1100控制命令
; *Arguments :strobe:控制命令
; *Returns :none
; *Notes :
; ************************************************************
; */
; void CC1100Strobe (INT8U strobe)
; {
.dbline 53
; SCLK_L; //写控制命令
cbi 0x8,5
.dbline 55
; //CS_L;
; CS_H; //3V与5V系统相连,保证平时为低电平
sbi 0x8,3
.dbline 56
; CS_L;
cbi 0x8,3
.dbline 57
; ShiftOutByte(strobe);
mov R16,R20
rcall _ShiftOutByte
.dbline 59
; //CS_H;
; CS_H; //3V与5V系统相连,保证平时为低电平
sbi 0x8,3
.dbline 60
; CS_L;
cbi 0x8,3
.dbline -2
L12:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r strobe 20 c
.dbend
.dbfunc e CC1100ReadReg _CC1100ReadReg fc
; value -> R20
; addr -> R20
.even
_CC1100ReadReg::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 72
; }
;
; /*
; ************************************************************
; *Description:读CC1100单个寄存器
; *Arguments :addr:地址
; *Returns :数据
; *Notes :
; ************************************************************
; */
; INT8U CC1100ReadReg (INT8U addr)
; {
.dbline 75
; INT8U value;
;
; SCLK_L; //写地址
cbi 0x8,5
.dbline 77
; //CS_L;
; CS_H; //3V与5V系统相连,保证平时为低电平
sbi 0x8,3
.dbline 78
; CS_L;
cbi 0x8,3
.dbline 79
; addr |= 0x80; //读寄存器地址
ori R20,128
.dbline 80
; ShiftOutByte(addr);
mov R16,R20
rcall _ShiftOutByte
.dbline 82
;
; value = ShiftInByte(); //读数据
rcall _ShiftInByte
mov R20,R16
.dbline 84
; //CS_H;
; CS_H; //3V与5V系统相连,保证平时为低电平
sbi 0x8,3
.dbline 85
; CS_L;
cbi 0x8,3
.dbline 87
;
; return value;
.dbline -2
L13:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r value 20 c
.dbsym r addr 20 c
.dbend
.dbfunc e CC1100WriteReg _CC1100WriteReg fV
; value -> R20
; addr -> R22
.even
_CC1100WriteReg::
rcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 99
; }
;
; /*
; ************************************************************
; *Description:写CC1100单个寄存器
; *Arguments :addr:地址; value:数据
; *Returns :none
; *Notes :
; ************************************************************
; */
; void CC1100WriteReg (INT8U addr, INT8U value)
; {
.dbline 100
; SCLK_L; //写地址
cbi 0x8,5
.dbline 102
; //CS_L;
; CS_H; //3V与5V系统相连,保证平时为低电平
sbi 0x8,3
.dbline 103
; CS_L;
cbi 0x8,3
.dbline 104
; ShiftOutByte(addr);
mov R16,R22
rcall _ShiftOutByte
.dbline 106
;
; ShiftOutByte(value); //写数据
mov R16,R20
rcall _ShiftOutByte
.dbline 108
; //CS_H;
; CS_H; //3V与5V系统相连,保证平时为低电平
sbi 0x8,3
.dbline 109
; CS_L;
cbi 0x8,3
.dbline -2
L14:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r value 20 c
.dbsym r addr 22 c
.dbend
.dbfunc e CC1100ReadStatus _CC1100ReadStatus fc
; value -> R20
; addr -> R20
.even
_CC1100ReadStatus::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 122
; }
;
;
; /*
; ************************************************************
; *Description:读CC1100状态寄存器
; *Arguments :addr:地址
; *Returns :状态值
; *Notes :
; ************************************************************
; */
; INT8U CC1100ReadStatus (INT8U addr)
; {
.dbline 125
; INT8U value;
;
; SCLK_L; //写地址
cbi 0x8,5
.dbline 127
; //CS_L;
; CS_H; //3V与5V系统相连,保证平时为低电平
sbi 0x8,3
.dbline 128
; CS_L;
cbi 0x8,3
.dbline 129
; addr |= 0xC0; //读状态寄存器地址
ori R20,192
.dbline 130
; ShiftOutByte(addr);
mov R16,R20
rcall _ShiftOutByte
.dbline 132
;
; value = ShiftInByte(); //读状态
rcall _ShiftInByte
mov R20,R16
.dbline 134
; //CS_H;
; CS_H; //3V与5V系统相连,保证平时为低电平
sbi 0x8,3
.dbline 135
; CS_L;
cbi 0x8,3
.dbline 137
;
; return value;
.dbline -2
L15:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r value 20 c
.dbsym r addr 20 c
.dbend
.dbfunc e CC1100ReadBurstReg _CC1100ReadBurstReg fV
; i -> R20
; cnt -> R22
; buf -> R10,R11
; addr -> R20
.even
_CC1100ReadBurstReg::
rcall push_gset3
movw R10,R18
mov R20,R16
ldd R22,y+6
.dbline -1
.dbline 150
; }
;
;
; /*
; ************************************************************
; *Description:连续读CC1100状态寄存器
; *Arguments :addr:地址; *buf:读取数据存放寄存器; cnt:所要读取字节个数
; *Returns :none
; *Notes :
; ************************************************************
; */
; void CC1100ReadBurstReg (INT8U addr, INT8U *buf, INT8U cnt)
; {
.dbline 153
; INT8U i;
;
; SCLK_L; //写地址
cbi 0x8,5
.dbline 155
; //CS_L;
; CS_H; //3V与5V系统相连,保证平时为低电平
sbi 0x8,3
.dbline 156
; CS_L;
cbi 0x8,3
.dbline 157
; addr |= 0xC0; //连续读寄存器地址
ori R20,192
.dbline 158
; ShiftOutByte(addr);
mov R16,R20
rcall _ShiftOutByte
.dbline 160
;
; for (i = 0; i < cnt; i++) //连续读数据
clr R20
rjmp L20
L17:
.dbline 161
.dbline 162
rcall _ShiftInByte
mov R30,R20
clr R31
add R30,R10
adc R31,R11
std z+0,R16
.dbline 163
L18:
.dbline 160
inc R20
L20:
.dbline 160
cp R20,R22
brlo L17
.dbline 165
; {
; *(buf + i) = ShiftInByte();
; }
; //CS_H;
; CS_H; //3V与5V系统相连,保证平时为低电平
sbi 0x8,3
.dbline 166
; CS_L;
cbi 0x8,3
.dbline -2
L16:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r cnt 22 c
.dbsym r buf 10 pc
.dbsym r addr 20 c
.dbend
.dbfunc e CC1100WriteBurstReg _CC1100WriteBurstReg fV
; value -> R20
; i -> R22
; cnt -> R10
; buf -> R12,R13
; addr -> R20
.even
_CC1100WriteBurstReg::
rcall push_gset4
movw R12,R18
mov R20,R16
ldd R10,y+8
.dbline -1
.dbline 179
; }
;
;
; /*
; ************************************************************
; *Description:连续写CC1100状态寄存器
; *Arguments :addr:地址; *buf:写数据寄存器; cnt:所要写字节个数
; *Returns :none
; *Notes :
; ************************************************************
; */
; void CC1100WriteBurstReg (INT8U addr, INT8U *buf, INT8U cnt)
; {
.dbline 183
; INT8U i;
; INT8U value;
;
; SCLK_L; //写地址
cbi 0x8,5
.dbline 185
; //CS_L;
; CS_H; //3V与5V系统相连,保证平时为低电平
sbi 0x8,3
.dbline 186
; CS_L;
cbi 0x8,3
.dbline 187
; addr |= 0x40; //连续写寄存器地址
ori R20,64
.dbline 188
; ShiftOutByte(addr);
mov R16,R20
rcall _ShiftOutByte
.dbline 190
;
; for (i = 0; i < cnt; i++) //连续写数据
clr R22
rjmp L25
L22:
.dbline 191
.dbline 192
mov R30,R22
clr R31
add R30,R12
adc R31,R13
ldd R20,z+0
.dbline 193
mov R16,R20
rcall _ShiftOutByte
.dbline 194
L23:
.dbline 190
inc R22
L25:
.dbline 190
cp R22,R10
brlo L22
.dbline 196
; {
; value = *(buf + i);
; ShiftOutByte(value);
; }
; //CS_H;
; CS_H; //3V与5V系统相连,保证平时为低电平
sbi 0x8,3
.dbline 197
; CS_L;
cbi 0x8,3
.dbline -2
L21:
rcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r value 20 c
.dbsym r i 22 c
.dbsym r cnt 10 c
.dbsym r buf 12 pc
.dbsym r addr 20 c
.dbend
.dbfunc e ShiftInByte _ShiftInByte fc
; value -> R16
; i -> R18
.even
_ShiftInByte::
.dbline -1
.dbline 210
; }
;
;
; /*
; ************************************************************
; *Description:利用SPI从CC1100读一个字节
; *Arguments :none
; *Returns :返回所读字节
; *Notes :
; ************************************************************
; */
; INT8U ShiftInByte (void)
; {
.dbline 212
; INT8U i;
; INT8U value = 0;
clr R16
.dbline 214
;
; for (i = 0; i < 8; i++) //从SO移入8位数据
clr R18
rjmp L30
L27:
.dbline 215
; {
.dbline 216
; SCLK_H;
sbi 0x8,5
.dbline 217
; value <<= 1;
lsl R16
.dbline 218
; if(SO_STATE)
sbis 0x6,2
rjmp L31
.dbline 219
; {
.dbline 220
; value |= 0x01;
ori R16,1
.dbline 221
; }
L31:
.dbline 222
cbi 0x8,5
.dbline 223
L28:
.dbline 214
inc R18
L30:
.dbline 214
cpi R18,8
brlo L27
.dbline 225
; SCLK_L;
; }
;
; return value;
.dbline -2
L26:
.dbline 0 ; func end
ret
.dbsym r value 16 c
.dbsym r i 18 c
.dbend
.dbfunc e ShiftOutByte _ShiftOutByte fV
; i -> R20
; value -> R16
.even
_ShiftOutByte::
rcall push_gset1
.dbline -1
.dbline 238
; }
;
;
; /*
; ************************************************************
; *Description:利用SPI向CC1100写一个字节
; *Arguments :value:所写字节
; *Returns :none
; *Notes :
; ************************************************************
; */
; void ShiftOutByte (INT8U value)
; {
.dbline 241
; INT8U i;
;
; for (i = 0; i < 8; i++) //向SI移出8位数据
clr R20
rjmp L37
L34:
.dbline 242
; {
.dbline 243
; if(value & 0x80)
sbrs R16,7
rjmp L38
.dbline 244
; {
.dbline 245
; SI_H;
sbi 0x8,4
.dbline 246
; }
rjmp L39
L38:
.dbline 248
; else
; {
.dbline 249
; SI_L;
cbi 0x8,4
.dbline 250
; }
L39:
.dbline 251
sbi 0x8,5
.dbline 252
lsl R16
.dbline 253
cbi 0x8,5
.dbline 254
L35:
.dbline 241
inc R20
L37:
.dbline 241
cpi R20,8
brlo L34
.dbline 256
; SCLK_H;
; value <<= 1;
; SCLK_L;
; }
;
; SI_L; //5V至3V系统设为0V
cbi 0x8,4
.dbline -2
L33:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r value 16 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -