cc1100.s
来自「主要是通过AMEGAL88 来控制cc1100」· S 代码 · 共 1,494 行 · 第 1/2 页
S
1,494 行
.module cc1100.c
.area data(ram, con, rel)
_rfSettings::
.blkb 1
.area idata
.byte 6
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 16
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 18
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 246
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 245
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 117
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 3
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 32
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 229
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 20
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 86
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 24
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 22
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 108
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 3
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 64
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 145
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 233
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 10
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 32
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 13
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 89
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 129
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 53
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 9
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile H:\work\myWork\AVR-CC1100\cc1100.c
.dbstruct 0 29 S_RF_SETTINGS
.dbfield 0 FSCTRL1 c
.dbfield 1 FSCTRL0 c
.dbfield 2 FREQ2 c
.dbfield 3 FREQ1 c
.dbfield 4 FREQ0 c
.dbfield 5 MDMCFG4 c
.dbfield 6 MDMCFG3 c
.dbfield 7 MDMCFG2 c
.dbfield 8 MDMCFG1 c
.dbfield 9 MDMCFG0 c
.dbfield 10 CHANNR c
.dbfield 11 DEVIATN c
.dbfield 12 FREND1 c
.dbfield 13 FREND0 c
.dbfield 14 MCSM0 c
.dbfield 15 FOCCFG c
.dbfield 16 BSCFG c
.dbfield 17 AGCCTRL2 c
.dbfield 18 AGCCTRL1 c
.dbfield 19 AGCCTRL0 c
.dbfield 20 FSCAL3 c
.dbfield 21 FSCAL2 c
.dbfield 22 FSCAL1 c
.dbfield 23 FSCAL0 c
.dbfield 24 FSTEST c
.dbfield 25 TEST2 c
.dbfield 26 TEST1 c
.dbfield 27 TEST0 c
.dbfield 28 IOCFG2 c
.dbend
.dbsym e rfSettings _rfSettings S[S_RF_SETTINGS]
_paTable::
.blkb 2
.area idata
.byte 192,0
.area data(ram, con, rel)
.dbfile H:\work\myWork\AVR-CC1100\cc1100.c
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile H:\work\myWork\AVR-CC1100\cc1100.c
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile H:\work\myWork\AVR-CC1100\cc1100.c
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile H:\work\myWork\AVR-CC1100\cc1100.c
.dbsym e paTable _paTable A[8:8]c
.area text(rom, con, rel)
.dbfile H:\work\myWork\AVR-CC1100\cc1100.c
.dbfunc e Wait _Wait fV
; timeout -> R16
.even
_Wait::
.dbline -1
.dbline 51
; /*
; * 文件名:cc1100.c
; * 功能 : cc1100 的功能实现函数
; * author: 陈思
; */
;
; #include "cc1100.h"
;
;
; extern ChipState fCC1100;
;
; RF_SETTINGS rfSettings = {
;
; 0x06, // FSCTRL1 Frequency synthesizer control.
; 0x00, // FSCTRL0 Frequency synthesizer control.
; 0x10, // FREQ2 Frequency control word, high byte.
; 0x12, // FREQ1 434MHz
; 0xF6, // FREQ0 434MHz
; // 0x09, // FREQ1 433MHz
; // 0x7B, // FREQ0 433MHz
; 0xF5, // MDMCFG4 Modem configuration.
; 0x75, // MDMCFG3 Modem configuration.
; 0x03, // MDMCFG2 Modem configuration.
; 0x20, // MDMCFG1 Modem configuration. oooooooooooooooooo
; 0xE5, // MDMCFG0 Modem configuration.
; 0x00, // CHANNR Channel number.
; 0x14, // DEVIATN Modem deviation setting (when FSK modulation is enabled).
; 0x56, // FREND1 Front end RX configuration.
; 0x00, // FREND0 Front end RX configuration.
; 0x18, // MCSM0 Main Radio Control State Machine configuration.
; 0x16, // FOCCFG Frequency Offset Compensation Configuration.
; 0x6C, // BSCFG Bit synchronization Configuration.
; 0x03, // AGCCTRL2 AGC control.
; 0x40, // AGCCTRL1 AGC control.
; 0x91, // AGCCTRL0 AGC control.
; 0xE9, // FSCAL3 Frequency synthesizer calibration.
; 0x0A, // FSCAL2 Frequency synthesizer calibration.
; 0x20, // FSCAL1 Frequency synthesizer calibration.
; 0x0D, // FSCAL0 Frequency synthesizer calibration.
; 0x59, // FSTEST Frequency synthesizer calibration.
; 0x81, // TEST2 Various test settings.
; 0x35, // TEST1 Various test settings.
; 0x09, // TEST0 Various test settings.
;
; };
;
; // 发射功率相关定义
; BYTE paTable[] = {0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
;
; void Wait(BYTE timeout)
; {
L2:
.dbline 53
; // This sequence uses exactly 2 clock cycle for each round
; do {
.dbline 54
; NOP();
nop
.dbline 56
L3:
.dbline 56
;
; } while (--timeout);
mov R24,R16
subi R24,1
mov R16,R24
tst R24
brne L2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r timeout 16 c
.dbend
.dbfunc e resetCC1100 _resetCC1100 fV
.even
_resetCC1100::
.dbline -1
.dbline 61
;
; }
;
; void resetCC1100(void)
; {
.dbline 63
;
; PORT_SPI &= 1<<SCLK;
in R24,0x5
andi R24,32
out 0x5,R24
.dbline 64
; PORT_SPI &= ~(1<<MOSI);
cbi 0x5,3
.dbline 65
; SPI_OFF();
sbi 0x5,2
.dbline 66
; Wait(2);
ldi R16,2
rcall _Wait
.dbline 67
; SPI_ON();
cbi 0x5,2
.dbline 68
; Wait(2);
ldi R16,2
rcall _Wait
.dbline 69
; SPI_OFF();
sbi 0x5,2
.dbline 70
; Wait(20);
ldi R16,20
rcall _Wait
.dbline 71
; SPI_ON();
cbi 0x5,2
L6:
.dbline 73
L7:
.dbline 73
;
; while ((PORT_SPI & 1<<MISO));
sbic 0x5,4
rjmp L6
L9:
.dbline 74
.dbline 74
ldi R24,48
out 0x2e,R24
.dbline 74
L15:
.dbline 74
L16:
.dbline 74
; SPI_TX(CC1100_SRES);
in R2,0x2d
sbrs R2,7
rjmp L15
.dbline 74
.dbline 74
.dbline 74
.dbline 74
.dbline 75
L21:
.dbline 75
L22:
.dbline 75
; SPI_WAIT();
in R2,0x2d
sbrs R2,7
rjmp L21
.dbline 75
.dbline 75
L24:
.dbline 76
L25:
.dbline 76
; while ((PORT_SPI & 1<<MISO));
sbic 0x5,4
rjmp L24
.dbline 77
; SPI_OFF();
sbi 0x5,2
.dbline 79
;
; fCC1100 = IDLE;
clr R2
sts _fCC1100,R2
.dbline -2
L5:
.dbline 0 ; func end
ret
.dbend
.dbfunc e cc1100Init _cc1100Init fV
.even
_cc1100Init::
.dbline -1
.dbline 85
;
; }
;
; // CC1100初始化和寄存器配置
; void cc1100Init()
; {
.dbline 86
; resetCC1100();
rcall _resetCC1100
.dbline 87
; spiWriteRfSettings();
rcall _spiWriteRfSettings
.dbline -2
L27:
.dbline 0 ; func end
ret
.dbend
.dbfunc e spiReadReg _spiReadReg fc
; x -> R20
; addr -> R16
.even
_spiReadReg::
rcall push_gset1
.dbline -1
.dbline 93
;
;
; }
;
; BYTE spiReadReg(BYTE addr)
; {
.dbline 95
; UINT8 x;
; SPI_ON();
cbi 0x5,2
L29:
.dbline 97
L30:
.dbline 97
;
; while((PORT_SPI & 1<<MISO));
sbic 0x5,4
rjmp L29
.dbline 98
; NOP();
nop
L32:
.dbline 99
.dbline 99
mov R24,R16
ori R24,128
out 0x2e,R24
.dbline 99
L38:
.dbline 99
L39:
.dbline 99
in R2,0x2d
sbrs R2,7
rjmp L38
.dbline 99
L36:
.dbline 99
.dbline 99
L33:
.dbline 99
; SPI_TX(addr | READ_SINGLE);
L41:
.dbline 100
.dbline 100
clr R2
out 0x2e,R2
.dbline 100
L47:
.dbline 100
L48:
.dbline 100
in R2,0x2d
sbrs R2,7
rjmp L47
.dbline 100
L45:
.dbline 100
.dbline 100
in R20,0x2e
.dbline 100
L42:
.dbline 100
; SPI_RX(x);
.dbline 102
;
; SPI_OFF();
sbi 0x5,2
.dbline 103
; return x;
mov R16,R20
.dbline -2
L28:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r x 20 c
.dbsym r addr 16 c
.dbend
.dbfunc e spiReadStatus _spiReadStatus fc
; x -> R20
; addr -> R16
.even
_spiReadStatus::
rcall push_gset1
.dbline -1
.dbline 107
; }
;
; BYTE spiReadStatus(BYTE addr)
; {
.dbline 110
; UINT8 x;
;
; SPI_ON();
cbi 0x5,2
.dbline 111
; NOP();
nop
L51:
.dbline 112
L52:
.dbline 112
; while(PORT_SPI&1<<MISO);
sbic 0x5,4
rjmp L51
.dbline 113
; NOP();
nop
L54:
.dbline 114
.dbline 114
mov R24,R16
ori R24,192
out 0x2e,R24
.dbline 114
L60:
.dbline 114
L61:
.dbline 114
in R2,0x2d
sbrs R2,7
rjmp L60
.dbline 114
L58:
.dbline 114
.dbline 114
L55:
.dbline 114
; SPI_TX(addr | READ_BURST);
L63:
.dbline 115
.dbline 115
clr R2
out 0x2e,R2
.dbline 115
L69:
.dbline 115
L70:
.dbline 115
in R2,0x2d
sbrs R2,7
rjmp L69
.dbline 115
L67:
.dbline 115
.dbline 115
in R20,0x2e
.dbline 115
L64:
.dbline 115
; SPI_RX(x);
.dbline 116
; NOP();
nop
.dbline 117
; SPI_OFF();
sbi 0x5,2
.dbline 118
; return x;
mov R16,R20
.dbline -2
L50:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r x 20 c
.dbsym r addr 16 c
.dbend
.dbfunc e spiReadBurstReg _spiReadBurstReg fV
; i -> R20
; count -> R22
; buffer -> R18,R19
; addr -> R16
.even
_spiReadBurstReg::
rcall push_gset2
ldd R22,y+4
.dbline -1
.dbline 122
; }
;
; void spiReadBurstReg(BYTE addr, BYTE *buffer, BYTE count)
; {
.dbline 124
; UINT8 i;
; SPI_ON();
cbi 0x5,2
L73:
.dbline 125
L74:
.dbline 125
; while(PORT_SPI&1<<MISO);
sbic 0x5,4
rjmp L73
.dbline 126
; NOP();
nop
L76:
.dbline 127
.dbline 127
mov R24,R16
ori R24,192
out 0x2e,R24
.dbline 127
L82:
.dbline 127
L83:
.dbline 127
in R2,0x2d
sbrs R2,7
rjmp L82
.dbline 127
L80:
.dbline 127
.dbline 127
L77:
.dbline 127
; SPI_TX(addr | READ_BURST);
.dbline 128
; for (i = 0; i < count; i++)
clr R20
rjmp L88
L85:
.dbline 129
; {
L89:
.dbline 130
.dbline 130
clr R2
out 0x2e,R2
.dbline 130
L95:
.dbline 130
L96:
.dbline 130
in R2,0x2d
sbrs R2,7
rjmp L95
.dbline 130
L93:
.dbline 130
.dbline 130
mov R30,R20
clr R31
add R30,R18
adc R31,R19
in R2,0x2e
std z+0,R2
.dbline 130
L90:
.dbline 130
.dbline 131
L86:
.dbline 128
inc R20
L88:
.dbline 128
cp R20,R22
brlo L85
.dbline 132
; SPI_RX(buffer[i]);
; }
; NOP();
nop
.dbline 133
; SPI_OFF();
sbi 0x5,2
.dbline -2
L72:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r count 22 c
.dbsym r buffer 18 pc
.dbsym r addr 16 c
.dbend
.dbfunc e spiStrobe _spiStrobe fV
; strobe -> R16
.even
_spiStrobe::
.dbline -1
.dbline 138
; //buffer[i] = 0; // add a terminal char
; }
;
; void spiStrobe(BYTE strobe)
; {
.dbline 140
;
; SPI_ON();
cbi 0x5,2
.dbline 141
; NOP();
nop
L99:
.dbline 142
L100:
.dbline 142
; while(PORT_SPI&1<<MISO);
sbic 0x5,4
rjmp L99
.dbline 143
; NOP();
nop
L102:
.dbline 144
.dbline 144
out 0x2e,R16
.dbline 144
L108:
.dbline 144
L109:
.dbline 144
in R2,0x2d
sbrs R2,7
rjmp L108
.dbline 144
L106:
.dbline 144
.dbline 144
L103:
.dbline 144
; SPI_TX(strobe);
.dbline 145
; NOP();
nop
.dbline 146
; SPI_OFF();
sbi 0x5,2
.dbline -2
L98:
.dbline 0 ; func end
ret
.dbsym r strobe 16 c
.dbend
.dbfunc e spiWriteReg _spiWriteReg fV
; value -> R18
; addr -> R16
.even
_spiWriteReg::
.dbline -1
.dbline 150
; }
;
; void spiWriteReg(BYTE addr, BYTE value)
; {
.dbline 151
; SPI_ON();
cbi 0x5,2
.dbline 152
; NOP();
nop
L112:
.dbline 153
L113:
.dbline 153
; while(PORT_SPI&1<<MISO);
sbic 0x5,4
rjmp L112
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?