📄 cc2420.s
字号:
; AddrH|=0X80; //访问RAM位置1
ori R20,128
.dbline 217
; AddrL<<=6;
lsl R22
lsl R22
lsl R22
lsl R22
lsl R22
lsl R22
.dbline 218
; AddrL&=0XDF; //读写操作位置0,表示写操作
andi R22,223
.dbline 220
;
; enable_spi(); //使能SPI口
xcall _enable_spi
.dbline 221
; statuevalue=SpiWrite(AddrH);
mov R16,R20
xcall _SpiWrite
mov R20,R16
.dbline 222
; SpiWrite(AddrL);
mov R16,R22
xcall _SpiWrite
.dbline 224
;
; SpiWrite(p_Data);
ldd R16,y+4
xcall _SpiWrite
.dbline 226
;
; disable_spi(); //禁止SPI口
xcall _disable_spi
.dbline 227
; return statuevalue;
mov R16,R20
.dbline -2
L24:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r statuevalue 20 c
.dbsym l p_Data 4 c
.dbsym r AddrL 22 c
.dbsym r AddrH 20 c
.dbend
.dbfunc e Read_RAM _Read_RAM fc
; statuevalue -> R20
; i -> R22
; p_Data -> R10,R11
; Data_Num -> R12
; AddrL -> R22
; AddrH -> R20
.even
_Read_RAM::
xcall push_gset4
mov R22,R18
mov R20,R16
ldd R12,y+8
ldd R10,y+10
ldd R11,y+11
.dbline -1
.dbline 240
; }
;
; /*******************************************
; *函数功能:读RAM
; *输入参数:p_Data:存储数据的缓存首地址;
; Data_Num:要读取的字节数
; AddrH:在选定的RAM存储块中确定RAM地址
; AddrL:选择RAM存储块
; *输出参数:无
; *返 回 值:状态寄存器的值
; ********************************************/
; unsigned char Read_RAM(unsigned char AddrH,unsigned char AddrL,unsigned char Data_Num,unsigned char *p_Data)
; {
.dbline 242
; unsigned char statuevalue,i;
; AddrH|=0X80; //访问RAM位置1
ori R20,128
.dbline 243
; AddrL<<=6;
lsl R22
lsl R22
lsl R22
lsl R22
lsl R22
lsl R22
.dbline 244
; AddrL|=0X20; //读写操作位置1,表示读操作
ori R22,32
.dbline 246
;
; enable_spi(); //使能SPI口
xcall _enable_spi
.dbline 247
; statuevalue=SpiWrite(AddrH);
mov R16,R20
xcall _SpiWrite
mov R20,R16
.dbline 248
; SpiWrite(AddrL);
mov R16,R22
xcall _SpiWrite
.dbline 250
;
; for (i=0;i<Data_Num;i++)
clr R22
xjmp L29
L26:
.dbline 251
.dbline 252
ldi R16,255
xcall _SpiWrite
mov R30,R22
clr R31
add R30,R10
adc R31,R11
std z+0,R16
.dbline 253
L27:
.dbline 250
inc R22
L29:
.dbline 250
cp R22,R12
brlo L26
.dbline 255
; {
; *(p_Data+i)=SpiWrite(0xff);
; }
;
; disable_spi(); //禁止SPI口
xcall _disable_spi
.dbline 256
; return statuevalue;
mov R16,R20
.dbline -2
L25:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r statuevalue 20 c
.dbsym r i 22 c
.dbsym r p_Data 10 pc
.dbsym r Data_Num 12 c
.dbsym r AddrL 22 c
.dbsym r AddrH 20 c
.dbend
.dbfunc e Read_RAM_Byte _Read_RAM_Byte fc
; readvalue -> R20
; AddrL -> R20
; AddrH -> R22
.even
_Read_RAM_Byte::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 267
; }
;
; /*******************************************
; *函数功能:读一字节RAM
; *输入参数:AddrH:在选定的RAM存储块中确定RAM地址
; AddrL:选择RAM存储块
; *输出参数:无
; *返 回 值:读取的数据值
; ********************************************/
; unsigned char Read_RAM_Byte(unsigned char AddrH,unsigned char AddrL)
; {
.dbline 269
; unsigned char readvalue;
; AddrH|=0X80; //访问RAM位置1
ori R22,128
.dbline 270
; AddrL<<=6;
lsl R20
lsl R20
lsl R20
lsl R20
lsl R20
lsl R20
.dbline 271
; AddrL|=0X20; //读写操作位置1,表示读操作
ori R20,32
.dbline 273
;
; enable_spi(); //使能SPI口
xcall _enable_spi
.dbline 274
; SpiWrite(AddrH);
mov R16,R22
xcall _SpiWrite
.dbline 275
; SpiWrite(AddrL);
mov R16,R20
xcall _SpiWrite
.dbline 277
;
; readvalue=SpiWrite(0xff);
ldi R16,255
xcall _SpiWrite
mov R20,R16
.dbline 279
;
; disable_spi(); //禁止SPI口
xcall _disable_spi
.dbline 280
; return readvalue;
mov R16,R20
.dbline -2
L30:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r readvalue 20 c
.dbsym r AddrL 20 c
.dbsym r AddrH 22 c
.dbend
.dbfunc e PowerOff _PowerOff fV
.even
_PowerOff::
.dbline -1
.dbline 290
; }
;
; /*******************************************
; *函数功能:关闭电压校准器模式
; *输入参数:无
; *输出参数:无
; *返 回 值:无
; ********************************************/
; void PowerOff(void)
; {
.dbline 291
; PORTE &=~(1<<VREGEN); //禁止电压校准器
cbi 0x3,3
.dbline -2
L31:
.dbline 0 ; func end
ret
.dbend
.dbfunc e PwOff_PwDown _PwOff_PwDown fV
.even
_PwOff_PwDown::
sbiw R28,1
.dbline -1
.dbline 301
; }
;
; /*******************************************
; *函数功能:从电压校准器关闭模式转换到掉电模式
; *输入参数:无
; *输出参数:无
; *返 回 值:无
; ********************************************/
; void PwOff_PwDown(void)
; {
.dbline 302
; PORTE |=1<<VREGEN; //启动电压校准器
sbi 0x3,3
.dbline 303
; Delay600us();
xcall _Delay600us
.dbline 305
;
; enable_spi(); //使能SPI口
xcall _enable_spi
.dbline 306
; Write_ConfigureWord(MAIN,0x78,0x00); //先将reset位设置为低
clr R2
std y+0,R2
ldi R18,120
ldi R16,16
xcall _Write_ConfigureWord
.dbline 307
; Write_ConfigureWord(MAIN,0xf8,0x00); //先将reset位设置为高,完成复位过程
clr R2
std y+0,R2
ldi R18,248
ldi R16,16
xcall _Write_ConfigureWord
.dbline 308
; disable_spi(); //禁止SPI口
xcall _disable_spi
.dbline -2
L32:
adiw R28,1
.dbline 0 ; func end
ret
.dbend
.dbfunc e AllStates_PwDown _AllStates_PwDown fV
.even
_AllStates_PwDown::
.dbline -1
.dbline 319
;
; }
;
; /*******************************************
; *函数功能:其他任何模式转换到掉电模式
; *输入参数:无
; *输出参数:无
; *返 回 值:无
; ********************************************/
; void AllStates_PwDown(void)
; {
.dbline 320
; Write_Command(SXOSCOFF);
ldi R16,7
xcall _Write_Command
.dbline -2
L33:
.dbline 0 ; func end
ret
.dbend
.dbfunc e PwDown_Idle _PwDown_Idle fV
; statue -> R20
.even
_PwDown_Idle::
xcall push_gset1
.dbline -1
.dbline 330
; }
;
; /*******************************************
; *函数功能:从掉电模式转换到空闲模式
; *输入参数:无
; *输出参数:无
; *返 回 值:无
; ********************************************/
; void PwDown_Idle(void)
; {
.dbline 332
; unsigned char statue;
; Write_Command(SXOSCON);
ldi R16,1
xcall _Write_Command
xjmp L36
L35:
.dbline 335
;
; while(1) //等待晶体振荡器稳定运行
; {
.dbline 336
; statue=Read_Status();
xcall _Read_Status
mov R20,R16
.dbline 337
; if((statue&(1<<XOSC16M_STABLE))!=0)
sbrs R16,6
rjmp L38
.dbline 338
; {
.dbline 339
; break;
xjmp L37
L38:
.dbline 341
L36:
.dbline 334
xjmp L35
L37:
.dbline -2
L34:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r statue 20 c
.dbend
.dbfunc e AllStates_Idle _AllStates_Idle fV
.even
_AllStates_Idle::
.dbline -1
.dbline 351
; }
; }
; }
;
; /*******************************************
; *函数功能:从其他任何模式转换到空闲模式
; *输入参数:无
; *输出参数:无
; *返 回 值:无
; ********************************************/
; void AllStates_Idle(void)
; {
.dbline 352
; Write_Command(SRFOFF);
ldi R16,6
xcall _Write_Command
.dbline -2
L40:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Idle_Tx _Idle_Tx fV
.even
_Idle_Tx::
.dbline -1
.dbline 362
; }
;
; /*******************************************
; *函数功能:从空闲模式启动发送
; *输入参数:无
; *输出参数:无
; *返 回 值:无
; ********************************************/
; void Idle_Tx(void)
; {
.dbline 363
; Write_Command(STXON);
ldi R16,4
xcall _Write_Command
.dbline -2
L41:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Rx_Tx _Rx_Tx fV
.even
_Rx_Tx::
.dbline -1
.dbline 373
; }
;
; /*******************************************
; *函数功能:从接收状态转换到发送模式
; *输入参数:无
; *输出参数:无
; *返 回 值:无
; ********************************************/
; void Rx_Tx(void)
; {
xjmp L44
L43:
.dbline 375
; while(1)
; {
.dbline 376
; if((PINA&(1<<CCA))!=0) //信道空闲
sbis 0x19,1
rjmp L46
.dbline 377
; {
.dbline 378
; Write_Command(STXONCCA);
ldi R16,5
xcall _Write_Command
.dbline 379
; break;
xjmp L45
L46:
.dbline 381
L44:
.dbline 374
xjmp L43
L45:
.dbline -2
L42:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Idle_Rx _Idle_Rx fV
.even
_Idle_Rx::
.dbline -1
.dbline 391
; }
; }
; }
;
; /*******************************************
; *函数功能:从空闲模式启动接收模式
; *输入参数:无
; *输出参数:无
; *返 回 值:无
; ********************************************/
; void Idle_Rx(void)
; {
.dbline 392
; Write_Command(SRXON);
ldi R16,3
xcall _Write_Command
.dbline -2
L48:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Set_Configure _Set_Configure fV
; RegisterValueL -> R22
; RegisterValueH -> R20
.even
_Set_Configure::
xcall push_gset2
sbiw R28,1
.dbline -1
.dbline 402
; }
;
; /*******************************************
; *函数功能:设置配置字(用于初始化)
; *输入参数:无
; *输出参数:无
; *返 回 值:无
; ********************************************/
; void Set_Configure(void)
; {
.dbline 404
; unsigned char RegisterValueH,RegisterValueL;
; PowerOff(); //???????????????????????????????
xcall _PowerOff
.dbline 405
; PwOff_PwDown(); //在power down模式下设置配置寄存器
xcall _PwOff_PwDown
.dbline 407
;
; enable_spi(); //使能SPI口
xcall _enable_spi
.dbline 409
;
; RegisterValueH=0X0A;
ldi R20,10
.dbline 410
; RegisterValueL=0XE2; //地址认证使能,自动应答不使能
ldi R22,226
.dbline 411
; Write_ConfigureWord(MDMCTRL0,RegisterValueH,RegisterValueL);
std y+0,R22
mov R18,R20
ldi R16,17
xcall _Write_ConfigureWord
.dbline 413
;
; RegisterValueH=0X05;
ldi R20,5
.dbline 414
; RegisterValueL=0X00;
clr R22
.dbline 415
; Write_ConfigureWord(MDMCTRL1,RegisterValueH,RegisterValueL);
std y+0,R22
mov R18,R20
ldi R16,18
xcall _Write_ConfigureWord
.dbline 421
;
; // RegisterValueH=-50;
; // RegisterValueL=0X00;
; // Write_ConfigureWord(RSSI,RegisterValueH,RegisterValueL); //???????????????????????调试时修改
;
; RegisterValueH=0x41;
ldi R20,65
.dbline 422
; RegisterValueL=0X92; //2.45GHz
ldi R22,146
.dbline 423
; Write_ConfigureWord(FSCTRL,RegisterValueH,RegisterValueL);
std y+0,R22
mov R18,R20
ldi R16,24
xcall _Write_ConfigureWord
.dbline 425
;
; RegisterValueH=0x01;
ldi R20,1
.dbline 426
; RegisterValueL=0Xe4; //安全模式不使能
ldi R22,228
.dbline 427
; Write_ConfigureWord(SECCTRL0,RegisterValueH,RegisterValueL);
std y+0,R22
mov R18,R20
ldi R16,25
xcall _Write_ConfigureWord
.dbline 433
;
; //RegisterValueH=128;
; //RegisterValueL=128;
; //Write_ConfigureWord(SECCTRL1,RegisterValueH,RegisterValueL); //???????????????????????调试时修改
;
; RegisterValueH=0;
clr R20
.dbline 434
; RegisterValueL=TX_length; //RXFIFO的极限值
ldi R22,112
.dbline 435
; Write_ConfigureWord(IOCFG0,RegisterValueH,RegisterValueL); //???????????????????????调试时修改
std y+0,R22
mov R18,R20
ldi R16,28
xcall _Write_ConfigureWord
.dbline 437
;
; disable_spi(); //禁止SPI口
xcall _disable_spi
.dbline -2
L49:
adiw R28,1
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r RegisterValueL 22 c
.dbsym r RegisterValueH 20 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -