📄 cc1100.s
字号:
L39:
.dbline 267
L40:
.dbline 267
; while (GDO0);
sbic 0x10,2
rjmp L39
.dbline 268
; SpiTxRxByte(temp);
mov R16,R20
rcall _SpiTxRxByte
.dbline 269
; for (i = 0; i < count; i++)
clr R22
rjmp L45
L42:
.dbline 270
.dbline 271
mov R30,R22
clr R31
add R30,R12
adc R31,R13
ldd R16,z+0
rcall _SpiTxRxByte
.dbline 272
L43:
.dbline 269
inc R22
L45:
.dbline 269
cp R22,R10
brlo L42
.dbline 273
; {
; SpiTxRxByte(buffer[i]);
; }
; CSN_1;
sbi 0x18,2
.dbline 273
.dbline -2
L38:
rcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r i 22 c
.dbsym r count 10 c
.dbsym r buffer 12 pc
.dbsym r addr 20 c
.dbend
.dbfunc e halSpiStrobe _halSpiStrobe fV
; strobe -> R20
.even
_halSpiStrobe::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 283
; }
;
; //*****************************************************************************************
; //函数名:void halSpiStrobe(INT8U strobe)
; //输入:命令
; //输出:无
; //功能描述:SPI写命令
; //*****************************************************************************************
; void halSpiStrobe(INT8U strobe)
; {
.dbline 284
; CSN_0;
cbi 0x18,2
.dbline 284
L47:
.dbline 285
L48:
.dbline 285
; while (GDO0);
sbic 0x10,2
rjmp L47
.dbline 286
; SpiTxRxByte(strobe); //写入命令
mov R16,R20
rcall _SpiTxRxByte
.dbline 287
; CSN_1;
sbi 0x18,2
.dbline 287
.dbline -2
L46:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r strobe 20 c
.dbend
.dbfunc e halSpiReadReg _halSpiReadReg fc
; value -> R20
; temp -> R22
; addr -> R20
.even
_halSpiReadReg::
rcall push_gset2
mov R20,R16
.dbline -1
.dbline 301
; }
;
;
;
;
;
; //*****************************************************************************************
; //函数名:INT8U halSpiReadReg(INT8U addr)
; //输入:地址
; //输出:该寄存器的配置字
; //功能描述:SPI读寄存器
; //*****************************************************************************************
; INT8U halSpiReadReg(INT8U addr)
; {
.dbline 303
; INT8U temp, value;
; temp = addr|READ_SINGLE;//读寄存器命令
mov R22,R20
ori R22,128
.dbline 304
; CSN_0;
cbi 0x18,2
.dbline 304
L51:
.dbline 305
L52:
.dbline 305
; while (GDO0);
sbic 0x10,2
rjmp L51
.dbline 306
; SpiTxRxByte(temp);
mov R16,R22
rcall _SpiTxRxByte
.dbline 307
; value = SpiTxRxByte(0);
clr R16
rcall _SpiTxRxByte
mov R20,R16
.dbline 308
; CSN_1;
sbi 0x18,2
.dbline 308
.dbline 309
; return value;
.dbline -2
L50:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r value 20 c
.dbsym r temp 22 c
.dbsym r addr 20 c
.dbend
.dbfunc e halSpiReadBurstReg _halSpiReadBurstReg fV
; temp -> R20
; i -> R22
; count -> R10
; buffer -> R12,R13
; addr -> R20
.even
_halSpiReadBurstReg::
rcall push_gset4
movw R12,R18
mov R20,R16
ldd R10,y+8
.dbline -1
.dbline 320
; }
;
;
; //*****************************************************************************************
; //函数名:void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
; //输入:地址,读出数据后暂存的缓冲区,读出配置个数
; //输出:无
; //功能描述:SPI连续写配置寄存器
; //*****************************************************************************************
; void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
; {
.dbline 322
; INT8U i,temp;
; temp = addr | READ_BURST; //写入要读的配置寄存器地址和读命令
ori R20,192
.dbline 323
; CSN_0;
cbi 0x18,2
.dbline 323
L55:
.dbline 324
L56:
.dbline 324
; while (GDO0);
sbic 0x10,2
rjmp L55
.dbline 325
; SpiTxRxByte(temp);
mov R16,R20
rcall _SpiTxRxByte
.dbline 326
; for (i = 0; i < count; i++)
clr R22
rjmp L61
L58:
.dbline 327
.dbline 328
clr R16
rcall _SpiTxRxByte
mov R30,R22
clr R31
add R30,R12
adc R31,R13
std z+0,R16
.dbline 329
L59:
.dbline 326
inc R22
L61:
.dbline 326
cp R22,R10
brlo L58
.dbline 330
; {
; buffer[i] = SpiTxRxByte(0);
; }
; CSN_1;
sbi 0x18,2
.dbline 330
.dbline -2
L54:
rcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r i 22 c
.dbsym r count 10 c
.dbsym r buffer 12 pc
.dbsym r addr 20 c
.dbend
.dbfunc e halSpiReadStatus _halSpiReadStatus fc
; temp -> R20
; value -> R22
; addr -> R20
.even
_halSpiReadStatus::
rcall push_gset2
mov R20,R16
.dbline -1
.dbline 341
; }
;
;
; //*****************************************************************************************
; //函数名:INT8U halSpiReadReg(INT8U addr)
; //输入:地址
; //输出:该状态寄存器当前值
; //功能描述:SPI读状态寄存器
; //*****************************************************************************************
; INT8U halSpiReadStatus(INT8U addr)
; {
.dbline 343
; INT8U value,temp;
; temp = addr | READ_BURST; //写入要读的状态寄存器的地址同时写入读命令
ori R20,192
.dbline 344
; CSN_0;
cbi 0x18,2
.dbline 344
L63:
.dbline 345
L64:
.dbline 345
; while (GDO0);
sbic 0x10,2
rjmp L63
.dbline 346
; SpiTxRxByte(temp);
mov R16,R20
rcall _SpiTxRxByte
.dbline 347
; value = SpiTxRxByte(0);
clr R16
rcall _SpiTxRxByte
mov R22,R16
.dbline 348
; CSN_1;
sbi 0x18,2
.dbline 348
.dbline 349
; return value;
.dbline -2
L62:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r value 22 c
.dbsym r addr 20 c
.dbend
.dbfunc e halRfWriteRfSettings _halRfWriteRfSettings fV
.even
_halRfWriteRfSettings::
.dbline -1
.dbline 360
; }
;
;
; //*****************************************************************************************
; //函数名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
; //输入:无
; //输出:无
; //功能描述:配置CC1100的寄存器
; //*****************************************************************************************
; void halRfWriteRfSettings(void)
; {
.dbline 363
; //halSpiWriteReg(CCxxx0_FIFOTHR,0x09);
; //halSpiWriteReg(CCxxx0_MCSM1,0x00); //CCA,没有作通
; halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL2);//自已加的
ldi R30,<_rfSettings
ldi R31,>_rfSettings
lpm R18,Z
ldi R16,12
rcall _halSpiWriteReg
.dbline 365
; // Write register settings
; halSpiWriteReg(CCxxx0_FSCTRL1, rfSettings.FSCTRL1);
ldi R30,<_rfSettings+1
ldi R31,>_rfSettings+1
lpm R18,Z
ldi R16,11
rcall _halSpiWriteReg
.dbline 366
; halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL0);
ldi R30,<_rfSettings+2
ldi R31,>_rfSettings+2
lpm R18,Z
ldi R16,12
rcall _halSpiWriteReg
.dbline 367
; halSpiWriteReg(CCxxx0_FREQ2, rfSettings.FREQ2);
ldi R30,<_rfSettings+3
ldi R31,>_rfSettings+3
lpm R18,Z
ldi R16,13
rcall _halSpiWriteReg
.dbline 368
; halSpiWriteReg(CCxxx0_FREQ1, rfSettings.FREQ1);
ldi R30,<_rfSettings+4
ldi R31,>_rfSettings+4
lpm R18,Z
ldi R16,14
rcall _halSpiWriteReg
.dbline 369
; halSpiWriteReg(CCxxx0_FREQ0, rfSettings.FREQ0);
ldi R30,<_rfSettings+5
ldi R31,>_rfSettings+5
lpm R18,Z
ldi R16,15
rcall _halSpiWriteReg
.dbline 370
; halSpiWriteReg(CCxxx0_MDMCFG4, rfSettings.MDMCFG4);
ldi R30,<_rfSettings+6
ldi R31,>_rfSettings+6
lpm R18,Z
ldi R16,16
rcall _halSpiWriteReg
.dbline 371
; halSpiWriteReg(CCxxx0_MDMCFG3, rfSettings.MDMCFG3);
ldi R30,<_rfSettings+7
ldi R31,>_rfSettings+7
lpm R18,Z
ldi R16,17
rcall _halSpiWriteReg
.dbline 372
; halSpiWriteReg(CCxxx0_MDMCFG2, rfSettings.MDMCFG2);
ldi R30,<_rfSettings+8
ldi R31,>_rfSettings+8
lpm R18,Z
ldi R16,18
rcall _halSpiWriteReg
.dbline 373
; halSpiWriteReg(CCxxx0_MDMCFG1, rfSettings.MDMCFG1);
ldi R30,<_rfSettings+9
ldi R31,>_rfSettings+9
lpm R18,Z
ldi R16,19
rcall _halSpiWriteReg
.dbline 374
; halSpiWriteReg(CCxxx0_MDMCFG0, rfSettings.MDMCFG0);
ldi R30,<_rfSettings+10
ldi R31,>_rfSettings+10
lpm R18,Z
ldi R16,20
rcall _halSpiWriteReg
.dbline 375
; halSpiWriteReg(CCxxx0_CHANNR, rfSettings.CHANNR);
ldi R30,<_rfSettings+11
ldi R31,>_rfSettings+11
lpm R18,Z
ldi R16,10
rcall _halSpiWriteReg
.dbline 376
; halSpiWriteReg(CCxxx0_DEVIATN, rfSettings.DEVIATN);
ldi R30,<_rfSettings+12
ldi R31,>_rfSettings+12
lpm R18,Z
ldi R16,21
rcall _halSpiWriteReg
.dbline 377
; halSpiWriteReg(CCxxx0_FREND1, rfSettings.FREND1);
ldi R30,<_rfSettings+13
ldi R31,>_rfSettings+13
lpm R18,Z
ldi R16,33
rcall _halSpiWriteReg
.dbline 378
; halSpiWriteReg(CCxxx0_FREND0, rfSettings.FREND0);
ldi R30,<_rfSettings+14
ldi R31,>_rfSettings+14
lpm R18,Z
ldi R16,34
rcall _halSpiWriteReg
.dbline 379
; halSpiWriteReg(CCxxx0_MCSM0 , rfSettings.MCSM0 );
ldi R30,<_rfSettings+15
ldi R31,>_rfSettings+15
lpm R18,Z
ldi R16,24
rcall _halSpiWriteReg
.dbline 380
; halSpiWriteReg(CCxxx0_FOCCFG, rfSettings.FOCCFG);
ldi R30,<_rfSettings+16
ldi R31,>_rfSettings+16
lpm R18,Z
ldi R16,25
rcall _halSpiWriteReg
.dbline 381
; halSpiWriteReg(CCxxx0_BSCFG, rfSettings.BSCFG);
ldi R30,<_rfSettings+17
ldi R31,>_rfSettings+17
lpm R18,Z
ldi R16,26
rcall _halSpiWriteReg
.dbline 382
; halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
ldi R30,<_rfSettings+18
ldi R31,>_rfSettings+18
lpm R18,Z
ldi R16,27
rcall _halSpiWriteReg
.dbline 383
; halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
ldi R30,<_rfSettings+19
ldi R31,>_rfSettings+19
lpm R18,Z
ldi R16,28
rcall _halSpiWriteReg
.dbline 384
; halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
ldi R30,<_rfSettings+20
ldi R31,>_rfSettings+20
lpm R18,Z
ldi R16,29
rcall _halSpiWriteReg
.dbline 385
; halSpiWriteReg(CCxxx0_FSCAL3, rfSettings.FSCAL3);
ldi R30,<_rfSettings+21
ldi R31,>_rfSettings+21
lpm R18,Z
ldi R16,35
rcall _halSpiWriteReg
.dbline 386
; halSpiWriteReg(CCxxx0_FSCAL2, rfSettings.FSCAL2);
ldi R30,<_rfSettings+22
ldi R31,>_rfSettings+22
lpm R18,Z
ldi R16,36
rcall _halSpiWriteReg
.dbline 387
; halSpiWriteReg(CCxxx0_FSCAL1, rfSettings.FSCAL1);
ldi R30,<_rfSettings+23
ldi R31,>_rfSettings+23
lpm R18,Z
ldi R16,37
rcall _halSpiWriteReg
.dbline 388
; halSpiWriteReg(CCxxx0_FSCAL0, rfSettings.FSCAL0);
ldi R30,<_rfSettings+24
ldi R31,>_rfSettings+24
lpm R18,Z
ldi R16,38
rcall _halSpiWriteReg
.dbline 389
; halSpiWriteReg(CCxxx0_FSTEST, rfSettings.FSTEST);
ldi R30,<_rfSettings+25
ldi R31,>_rfSettings+25
lpm R18,Z
ldi R16,41
rcall _halSpiWriteReg
.dbline 390
; halSpiWriteReg(CCxxx0_TEST2, rfSettings.TEST2);
ldi R30,<_rfSettings+26
ldi R31,>_rfSettings+26
lpm R18,Z
ldi R16,44
rcall _halSpiWriteReg
.dbline 391
; halSpiWriteReg(CCxxx0_TEST1, rfSettings.TEST1);
ldi R30,<_rfSettings+27
ldi R31,>_rfSettings+27
lpm R18,Z
ldi R16,45
rcall _halSpiWriteReg
.dbline 392
; halSpiWriteReg(CCxxx0_TEST0, rfSettings.TEST0);
ldi R30,<_rfSettings+28
ldi R31,>_rfSettings+28
lpm R18,Z
ldi R16,46
rcall _halSpiWriteReg
.dbline 393
; halSpiWriteReg(CCxxx0_IOCFG2, rfSettings.IOCFG2);
ldi R30,<_rfSettings+29
ldi R31,>_rfSettings+29
lpm R18,Z
clr R16
rcall _halSpiWriteReg
.dbline 394
; halSpiWriteReg(CCxxx0_IOCFG0, rfSettings.IOCFG0);
ldi R30,<_rfSettings+30
ldi R31,>_rfSettings+30
lpm R18,Z
ldi R16,2
rcall _halSpiWriteReg
.dbline 395
; halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
ldi R30,<_rfSettings+31
ldi R31,>_rfSettings+31
lpm R18,Z
ldi R16,7
rcall _halSpiWriteReg
.dbline 396
; halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
ldi R30,<_rfSettings+32
ldi R31,>_rfSettings+32
lpm R18,Z
ldi R16,8
rcall _halSpiWriteReg
.dbline 397
; halSpiWriteReg(CCxxx0_ADDR, rfSettings.ADDR);
ldi R30,<_rfSettings+33
ldi R31,>_rfSettings+33
lpm R18,Z
ldi R16,9
rcall _halSpiWriteReg
.dbline 398
; halSpiWriteReg(CCxxx0_PKTLEN, rfSettings.PKTLEN);
ldi R30,<_rfSettings+34
ldi R31,>_rfSettings+34
lpm R18,Z
ldi R16,6
rcall _halSpiWriteReg
.dbline -2
L66:
.dbline 0 ; func end
ret
.dbend
.dbfunc e halRfSendPacket _halRfSendPacket fV
; size -> R22
; txBuffer -> R20,R21
.even
_halRfSendPacket::
rcall push_gset2
mov R22,R18
movw R20,R16
sbiw R28,1
.dbline -1
.dbline 413
; }
;
;
;
;
;
;
; //*****************************************************************************************
; //函数名:
; //输入:
; //输出:
; //功能描述:CC1100发送主叫数据
; //*****************************************************************************************
; void halRfSendPacket(INT8U *txBuffer, INT8U size)
; {
.dbline 415
;
; halSpiWriteReg(CCxxx0_TXFIFO, size+2);
mov R18,R22
subi R18,254 ; addi 2
ldi R16,63
rcall _halSpiWriteReg
.dbline 416
; halSpiWriteReg(CCxxx0_TXFIFO, ID_Opponent);
ldi R18,240
ldi R16,63
rcall _halSpiWriteReg
.dbline 417
; halSpiWriteReg(CCxxx0_TXFIFO, ID_Oneself);
ldi R18,240
ldi R16,63
rcall _halSpiWriteReg
.dbline 419
;
; halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
std y+0,R22
movw R18,R20
ldi R16,63
rcall _halSpiWriteBurstReg
.dbline 422
;
;
; halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
ldi R16,53
rcall _halSpiStrobe
L102:
.dbline 425
L103:
.dbline 425
;
; // Wait for GDO0 to be set - > sync transmitted
; while (!GDO0);
in R2,0x10
tst R2
brne L105
ldi R20,1
ldi R21,0
rjmp L106
L105:
clr R20
clr R21
L106:
sbrc R20,2
rjmp L102
L107:
.dbline 428
L108:
.dbline 428
;
; // Wait for GDO0 to be set - > sync transmitted
; while (GDO0);
sbic 0x10,2
rjmp L107
.dbline 430
;
; halSpiStrobe(CCxxx0_SFTX); //清洗发送缓冲区
ldi R16,59
rcall _halSpiStrobe
.dbline -2
L101:
adiw R28,1
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r size 22 c
.dbsym r txBuffer 20 pc
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -