📄 cc2500.asm.bak
字号:
;***************************************************************************
;F: File Name: cc2500.asm.
;F: Build Date: 2006/11/3.
;F: Programer: stone_zen.
;F:
;***************************************************************************
;*****************************************************************
;F: Function Name: F_InitalCC2500.
;F:
;F: Describe:
;F: configuration the cc2500 registers.
;F:
;*****************************************************************
F_InitalCC2500:
lds R_WrkReg1,0;
lcp R_SCLKBuf,R_WrkReg1;
lds R_WrkReg1,0000b;
opc R_WrkReg1;
lds R_WrkReg1,0;
lcp R_CSnBuf,R_WrkReg1;
lds R_Delay,4;
call F_DelxxUS;
lds R_WrkReg1,D_CSn;
lcp R_CSnBuf,R_WrkReg1;
lds R_Delay,10;
call F_DelxxUS;
lds R_ParLow,CMD_CC2500_SRES%16;
lds R_ParHigh,CMD_CC2500_SRES/16;
call F_CC2500WRStrobe;
lds R_Delay,4;
call F_DelxxUS;
lds R_WrkReg1,0;
lcp R_CSnBuf,R_WrkReg1;
L_WaitSOLo01:
ipa R_WrkReg1;
jb0 L_WaitSOLo01; 只有再次检到低时才算RESET 完成。
;================================================
;================================================
;开始初始化配置寄存器的内容。
call F_WRCC2500Bit;
lds R_ParHigh,40h/16
lds R_ParLow,40h%16; 设为BURST write Mode.
call F_WRCC2500_REG_Addr;
;======================================
;Addr 0x00 IOCFG2.
lds R_ParLow,47H%16; 当同步字被送出时GDO2 pin产生一个低信号.
lds R_ParHigh,47H/16;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x01 IOCFG1.
lds R_ParLow,2eh%16; 此脚功能不用。
lds R_ParHigh,2eh/16;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x02 IOCFG0.
lds R_ParLow,46h%16;
lds R_ParHigh,46h/16;
call F_WRCC2500_ABYTE; 此脚功能不用。
;======================================
;Addr 0x03 FIFOTHR.
lds R_ParLow,7; TX FIFO 超过33个字节产生溢出。
lds R_ParHigh,0;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x04 SYNC1.
lds R_ParLow,03h;
lds R_ParHigh,0dh;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x05 SYNC0.
lds R_ParLow,01h; 同步字为0xd391.
lds R_ParHigh,09h;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x06 PKTLEN.
lds R_ParLow,4;
lds R_ParHigh,0;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x07 PKTCTRL1.
lds R_ParLow,5;
lds R_ParHigh,0; 在TX 模式下,保留上电初始设置。
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x08 PKTCTRL0.
lds R_ParLow,04h; 固定包,允许CRC功能。
lds R_ParHigh,0;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x09 ADDR.
;ipd R_ParLow; 0~15 address.
lds R_ParLow,4;
lds R_ParHigh,0;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x0A CHANNR.
;ipd R_ParLow; 0~15 AS CHANNER VALUE。
lds R_ParLow,2;
lds R_ParHigh,0;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x0B FSCTRL1.
lds R_ParLow,0dh; IF frequency of 254kHz,
lds R_ParHigh,0;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x0C FSCTRL0.
lds R_ParLow,0; Resolution is FXTAL/214 (1.5kHz-1.7kHz); range is ±186kHz to
;±217kHz, dependent of XTAL frequency.
lds R_ParHigh,0;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x0D FREQ2.
lds R_ParLow,0ch; 2464MHz-2483.4MHz (0-97)
lds R_ParHigh,05h;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x0E FREQ1.
lds R_ParLow,01h;
lds R_ParHigh,0bh;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x0F FREQ0.
lds R_ParLow,0bh;
lds R_ParHigh,03h;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x10 MDMCFG4.
lds R_ParLow,0dh;
lds R_ParHigh,02h;
call F_WRCC2500_ABYTE; 203kHz channel filter bandwidth,
;======================================
;Addr 0x11 MDMCFG3.
lds R_ParLow,0bh;
lds R_ParHigh,03h;
call F_WRCC2500_ABYTE; data rate of 115.051kbps.
;======================================
;Addr 0x12 MDMCFG2.
lds R_ParLow,02h;
lds R_ParHigh,07h;
call F_WRCC2500_ABYTE; 2-FSK/disable Manchester encoding/decoding/16/16 sync word bits detected.
;======================================
;Addr 0x13 MDMCFG1.
lds R_ParLow,03h;
lds R_ParHigh,02h;
call F_WRCC2500_ABYTE; disable Forward Error Correction (FEC)/
;======================================
;Addr 0x14 MDMCFG0.
lds R_ParLow,0fh;
lds R_ParHigh,0fh;
call F_WRCC2500_ABYTE; give 199.951kHz channel spacing.
;======================================
;Addr 0x15 DEVIATN.
lds R_ParLow,01h;
lds R_ParHigh,0;
call F_WRCC2500_ABYTE; give ±47.607kHz deviation,
;======================================
;Addr 0x16 MCSM2.
lds R_ParLow,07h;
lds R_ParHigh,0;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x17 MCSM1.
lds R_ParLow,0;
lds R_ParHigh,3;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x18 MCSM0.
lds R_ParLow,8; When going from IDLE to RX or TX (or FSTXON)
lds R_ParHigh,1; Approx. 146μs – 171μs
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x19 FOCCFG.
lds R_ParLow,0eh; Frequency offset compensation configuration.
lds R_ParHigh,1;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x1A BSCFG.
lds R_ParLow,0ch; Bit Synchronization configuration.
lds R_ParHigh,6;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x1B AGCTRL2.
lds R_ParLow,3; AGC control register.
lds R_ParHigh,0ch;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x1C AGCTRL1.
lds R_ParLow,0; AGC control register.
lds R_ParHigh,4;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x1D AGCTRL0.
lds R_ParLow,1; AGC control register.
lds R_ParHigh,9;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x1E WOREVT1.
lds R_ParLow,7; High byte of Event 0 timeout register.
lds R_ParHigh,8;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x1F WOREVT0.
lds R_ParLow,0bh; Low byte of Event 0 timeout register.
lds R_ParHigh,6;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x20 WORCTRL.
lds R_ParLow,0bh;
lds R_ParHigh,0fh;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x21 FREND1.
lds R_ParLow,06h; Front end RX configuration.
lds R_ParHigh,0bh;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x22 FREND0.
lds R_ParLow,0;
lds R_ParHigh,1;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x23 FSCAL3.
lds R_ParLow,0ah; Frequency synthesizer calibration configuration and result register.
lds R_ParHigh,0eh;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x24 FSCAL2.
lds R_ParLow,0ah;
lds R_ParHigh,0;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x25 FSCAL1.
lds R_ParLow,0;
lds R_ParHigh,0;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x26 FSCAL0.
lds R_ParLow,1;
lds R_ParHigh,1;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x27 RCCTRL1.
lds R_ParLow,01h;
lds R_ParHigh,04h;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x28 RCCTRL0.
lds R_ParLow,0;
lds R_ParHigh,0;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x29 FSTEST.
lds R_ParLow,9;
lds R_ParHigh,5;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x2A PTEST.
lds R_ParLow,0fh;
lds R_ParHigh,07h;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x2B AGCTEST.
lds R_ParLow,0fh;
lds R_ParHigh,03h;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x2C TEST2.
lds R_ParLow,0fh;
lds R_ParHigh,8;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x2D TEST1.
lds R_ParLow,1;
lds R_ParHigh,2;
call F_WRCC2500_ABYTE;
;======================================
;Addr 0x2E TETS0.
lds R_ParLow,0bh;
lds R_ParHigh,0;
call F_WRCC2500_ABYTE;
lds R_WrkReg1,D_CSn;
lcp R_CSnBuf,R_WrkReg1;
lds R_Delay,2;
call F_DelxxUS;
lds R_WrkReg1,0;
lcp R_CSnBuf,R_WrkReg1;
L_WaitSOLow03:
ipa R_WrkReg1; waiting for the SO pin of cc2500 get low.
jb0 L_WaitSOLow03;
call F_WRCC2500Bit; 设置发射功率。
lds R_ParLow,0eh;
lds R_ParHigh,07h;
call F_WRCC2500_REG_Addr; 地址3EH为功率控制寄存器。
lds R_ParLow,0fh; PATABLE byte0.
lds R_ParHigh,0fh;
call F_WRCC2500_ABYTE
lds R_ParLow,0fh; PATABLE byte1.
lds R_ParHigh,0fh;
call F_WRCC2500_ABYTE
lds R_ParLow,0fh; PATABLE byte2.
lds R_ParHigh,0fh;
call F_WRCC2500_ABYTE
lds R_ParLow,0fh; PATABLE byte3.
lds R_ParHigh,0fh;
call F_WRCC2500_ABYTE
lds R_ParLow,0fh; PATABLE byte4.
lds R_ParHigh,0fh;
call F_WRCC2500_ABYTE
lds R_ParLow,0fh; PATABLE byte5.
lds R_ParHigh,0fh;
call F_WRCC2500_ABYTE
lds R_ParLow,0fh; PATABLE byte6.
lds R_ParHigh,0fh;
call F_WRCC2500_ABYTE
lds R_ParLow,0fh; PATABLE byte7.
lds R_ParHigh,0fh;
call F_WRCC2500_ABYTE
lds R_WrkReg1,D_CSn;
lcp R_CSnBuf,R_WrkReg1;
;=========================================================
;=========================================================
lds R_ParLow,CMD_CC2500_SFTX%16;
lds R_ParHigh,CMD_CC2500_SFTX/16;
call F_CC2500WRStrobe;
lds R_ParLow,CMD_CC2500_SFRX%16;
lds R_ParHigh,CMD_CC2500_SFRX/16;
call F_CC2500WRStrobe;
lds R_ParLow,CMD_CC2500_SCAL%16;
lds R_ParHigh,CMD_CC2500_SCAL/16;
call F_CC2500WRStrobe;
lds R_Delay,10;
call F_DelxxUS;
lds R_ParLow,CMD_CC2500_SIDLE%16;
lds R_ParHigh,CMD_CC2500_SIDLE/16;
call F_CC2500WRStrobe;
lds R_Delay,10;
call F_DelxxUS;
lds R_ParLow,CMD_CC2500_SRX%16;
lds R_ParHigh,CMD_CC2500_SRX/16;
call F_CC2500WRStrobe;
lds R_Delay,10;
call F_DelxxUS;
rts;
;*********************************************************************
;F: Function Name: F_DelxxUs.
;F: Input:
;F: R_Delay.
;F:
;F:
;*********************************************************************
F_DelxxUS:
nop;
nop;
nop;
nop;
nop;
dec* R_Delay;
jnz F_DelxxUS;
rts;
;*********************************************************************
;F: Function Name: F_CC2500WRStrobe.
;F: Input:
;F: R_ParLow,R_ParHigh.
;F: Output:
;F: None:
;F:
;**********************************************************************
F_CC2500WRStrobe:
lds R_WrkReg1,0;
lcp R_CSnBuf,R_WrkReg1; CSn ouput low.
L_WaitSOLO00:
ipa R_WrkReg1;
jb0 L_WaitSOLO00;
call F_WRCC2500Bit;
call F_WRCC2500_REG_Addr;
lds R_WrkReg1,0001b;
lcp R_CSnBuf,R_WrkReg1;
rts;
;***********************************************************************
;F: Function Name: F_WRCC2500Bit.
;F:
;F: 送出一位写信号位。
;F:
;F:
;************************************************************************
F_WRCC2500Bit:
lds R_WrkReg1,0;
opc R_WrkReg1;
nop;
nop;
nop;
nop;
lds R_WrkReg1,D_SCLK;
lcp R_SCLKBuf,R_WrkReg1;
nop;
nop;
nop;
nop;
lds R_WrkReg1,0;
lcp R_SCLKBuf,R_WrkReg1;
rts;
;************************************************************************
;F: Function Name: F_RDCC2500Bit.
;F:
;F: 送出一位读信号位。
;F:
;F:
;F:
;*************************************************************************
F_RDCC2500Bit:
lds R_WrkReg1,1000b;
opc R_WrkReg1;
nop;
nop;
nop;
nop;
lds R_WrkReg1,D_SCLK;
lcp R_SCLKBuf,R_WrkReg1;
nop;
nop;
nop;
nop;
lds R_WrkReg1,0;
lcp R_SCLKBuf,R_WrkReg1;
rts;
;*************************************************************************
;F: Function Name: F_WRCC2500_REG_Addr.
;F:
;F: Write 7bit register address.
;F:
;F:
;*************************************************************************
F_WRCC2500_REG_Addr:
lds R_cc2500Count,7;
lda R_ParLow;
add* R_ParLow;
lda R_ParHigh;
adc* R_ParHigh;
L_LoopWR00:
lda R_ParLow;
add* R_ParLow;
lda R_ParHigh;
adc* R_ParHigh;
jc L_WRHi00;
L_WRLo00:
lds R_WrkReg1,0;
opc R_WrkReg1;
jmp L_WRClk00;
L_WRHi00:
lds R_WrkReg1,1000b;
opc R_WrkReg1;
L_WRClk00:
nop;
nop;
nop;
nop;
lds R_WrkReg1,D_SCLK;
lcp R_SCLKBuf,R_WrkReg1;
nop;
nop;
nop;
nop;
lds R_WrkReg1,0;
lcp R_SCLKBuf,R_WrkReg1;
dec* R_cc2500Count;
jnz L_LoopWR00;
lds R_WrkReg1,0;
opc R_WrkReg1;
rts;
;**************************************************************************
;F: Function Name: F_WRCC2500_ABYTE.
;F: Write 8bit data to register.
;F:
;F: Input:
;F: R_ParLow,R_ParHigh.
;F:
;**************************************************************************
F_WRCC2500_ABYTE:
lds R_cc2500Count,8;
L_LoopWR02:
lda R_ParLow;
add* R_ParLow;
lda R_ParHigh;
adc* R_ParHigh;
jnc L_WRLO02;
L_WRHi02:
lds R_WrkReg1,D_SI;
opc R_WrkReg1;
jmp L_Clk02;
L_WRLO02:
lds R_WrkReg1,0;
opc R_WrkReg1;
L_Clk02:
nop;
nop;
nop;
nop;
lds R_WrkReg1,D_SCLK;
lcp R_SCLKBuf,R_WrkReg1;
nop;
nop;
nop;
nop;
lds R_WrkReg1,0;
lcp R_SCLKBuf,R_WrkReg1;
dec* R_cc2500Count;
jnz L_LoopWR02;
lds R_WrkReg1,0;
opc R_WrkReg1;
rts;
;**********************************************************************
;F: Function Name: F_ReadCC2500AByte.
;F:
;F:
;F:
;F:
;**********************************************************************
F_ReadCC2500AByte:
lds R_cc2500Count,8;
lds R_ParLow,0;
lds R_ParHigh,0;
L_LoopReadByte:
ipa R_WrkReg1;
jb0 L_SetHighRead;
L_ClrLowRead:
lds R_WrkReg1,0;
mra R_WrkReg1;
jmp L_TotalRotate00;
;=====================================
L_SetHighRead:
lds R_WrkReg1,1000b;
mra R_WrkReg1;
L_TotalRotate00:
lda R_ParLow;
adc* R_ParLow;
lda R_ParHigh;
adc* R_ParHigh;
lds R_WrkReg1,D_SCLK;
lcp R_SCLKBuf,R_WrkReg1;
nop;
nop;
nop;
nop;
lds R_WrkReg1,0;
lcp R_SCLKBuf,R_WrkReg1;
dec* R_cc2500Count;
jnz L_LoopReadByte;
L_Readcc2500Ret:
rts;
;**************************************************************************
;F: Function Name: F_ReadCC2500Reg.
;F:
;F:
;F:
;F:
;***************************************************************************
F_ReadCC2500Reg:
lds R_WrkReg1,0;
lcp R_CSnBuf,R_WrkReg1; CSn ouput low.
L_WaitSOLO14:
ipa R_WrkReg1;
jb0 L_WaitSOLO14;
call F_RDCC2500Bit;
lda R_ReadAddrLow;
sta R_ParLow;
lda R_ReadAddrHigh;
sta R_ParHigh;
call F_WRCC2500_REG_Addr;
lds R_Delay,4;
call F_DelxxUS;
call F_ReadCC2500AByte;
lds R_WrkReg1,0001b;
lcp R_CSnBuf,R_WrkReg1;
rts;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -