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 + -
显示快捷键?