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

📄 cc1100.s

📁 chipcom公司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 + -