📄 rx.lst
字号:
(0411) Write_ConfigureWord(MDMCTRL0,RegisterValueH,RegisterValueL);
01E6 8368 STD Y+0,R22
01E7 2F24 MOV R18,R20
01E8 E101 LDI R16,0x11
01E9 DE97 RCALL _Write_ConfigureWord
(0412)
(0413) RegisterValueH=0X05;
01EA E045 LDI R20,5
(0414) RegisterValueL=0X00;
01EB 2766 CLR R22
(0415) Write_ConfigureWord(MDMCTRL1,RegisterValueH,RegisterValueL);
01EC 8368 STD Y+0,R22
01ED 2F24 MOV R18,R20
01EE E102 LDI R16,0x12
01EF DE91 RCALL _Write_ConfigureWord
(0416)
(0417) // RegisterValueH=-50;
(0418) // RegisterValueL=0X00;
(0419) // Write_ConfigureWord(RSSI,RegisterValueH,RegisterValueL); //???????????????????????调试时修改
(0420)
(0421) RegisterValueH=0x41;
01F0 E441 LDI R20,0x41
(0422) RegisterValueL=0X92; //2.45GHz
01F1 E962 LDI R22,0x92
(0423) Write_ConfigureWord(FSCTRL,RegisterValueH,RegisterValueL);
01F2 8368 STD Y+0,R22
01F3 2F24 MOV R18,R20
01F4 E108 LDI R16,0x18
01F5 DE8B RCALL _Write_ConfigureWord
(0424)
(0425) RegisterValueH=0x01;
01F6 E041 LDI R20,1
(0426) RegisterValueL=0Xe4; //安全模式不使能
01F7 EE64 LDI R22,0xE4
(0427) Write_ConfigureWord(SECCTRL0,RegisterValueH,RegisterValueL);
01F8 8368 STD Y+0,R22
01F9 2F24 MOV R18,R20
01FA E109 LDI R16,0x19
01FB DE85 RCALL _Write_ConfigureWord
(0428)
(0429) //RegisterValueH=128;
(0430) //RegisterValueL=128;
(0431) //Write_ConfigureWord(SECCTRL1,RegisterValueH,RegisterValueL); //???????????????????????调试时修改
(0432)
(0433) RegisterValueH=0;
01FC 2744 CLR R20
(0434) RegisterValueL=TX_length; //RXFIFO的极限值
01FD E760 LDI R22,0x70
(0435) Write_ConfigureWord(IOCFG0,RegisterValueH,RegisterValueL); //???????????????????????调试时修改
01FE 8368 STD Y+0,R22
01FF 2F24 MOV R18,R20
0200 E10C LDI R16,0x1C
0201 DE7F RCALL _Write_ConfigureWord
(0436)
(0437) disable_spi(); //禁止SPI口
0202 940E028B CALL _disable_spi
0204 9621 ADIW R28,1
0205 940E028D CALL pop_gset2
0207 9508 RET
FILE: E:\无线传感器网络资料\cc2420驱动\测试1\RX\common.c
(0001) /***************************************
(0002) *2008,浙江工业大学信息与控制研究所
(0003) *All rights reserved
(0004) *
(0005) *文件名称:common.c
(0006) *摘 要:公共函数的定义
(0007) *
(0008) *当前版本:1.0
(0009) *作 者:董齐芬
(0010) *完成日期:2008.8.20
(0011) ****************************************/
(0012) #include "common.h"
(0013)
(0014) /*******************************************
(0015) *函数功能:延时600us用于电压校准器的启动延时
(0016) *输入参数:无
(0017) *输出参数:无
(0018) *返 回 值:无
(0019) ********************************************/
(0020) void Delay600us(void)
(0021) {
(0022) unsigned char i,t;
(0023) for (i=0;i<5;i++)
_Delay600us:
i --> R16
t --> R18
0208 2700 CLR R16
0209 C006 RJMP 0x0210
(0024) {
(0025) for (t=0;t<250;t++)
020A 2722 CLR R18
020B C001 RJMP 0x020D
020C 9523 INC R18
020D 3F2A CPI R18,0xFA
020E F3E8 BCS 0x020C
020F 9503 INC R16
0210 3005 CPI R16,5
0211 F3C0 BCS 0x020A
0212 9508 RET
(0026) {
(0027) ;
(0028) }
(0029) }
(0030) }
(0031)
(0032) /*******************************************
(0033) *函数功能:延时10ms用于发送数据包的间隔测试
(0034) *输入参数:无
(0035) *输出参数:无
(0036) *返 回 值:无
(0037) ********************************************/
(0038) void Delay10ms(void)
(0039) {
(0040) unsigned int t,i;
(0041) for (t=0;t<3500;t++)
_Delay10ms:
t --> R16
i --> R18
0213 2700 CLR R16
0214 2711 CLR R17
0215 C00B RJMP 0x0221
(0042) {
(0043) for (i=0;i<3;i++)
0216 2722 CLR R18
0217 2733 CLR R19
0218 C002 RJMP 0x021B
0219 5F2F SUBI R18,0xFF
021A 4F3F SBCI R19,0xFF
021B 3023 CPI R18,3
021C E0E0 LDI R30,0
021D 073E CPC R19,R30
021E F3D0 BCS 0x0219
021F 5F0F SUBI R16,0xFF
0220 4F1F SBCI R17,0xFF
0221 3A0C CPI R16,0xAC
0222 E0ED LDI R30,0xD
0223 071E CPC R17,R30
0224 F388 BCS 0x0216
0225 9508 RET
_main:
dL --> Y+5
dH --> Y+4
i --> R20
0226 9726 SBIW R28,6
FILE: E:\无线传感器网络资料\cc2420驱动\测试1\RX\main.c
(0001) /***************************************
(0002) *2008,浙江工业大学信息与控制研究所
(0003) *All rights reserved
(0004) *
(0005) *文件名称:main.c
(0006) *摘 要:无线接收发送测试程序(接收端)
(0007) *
(0008) *当前版本:1.0
(0009) *作 者:董齐芬
(0010) *完成日期:2008.8.20
(0011) ****************************************/
(0012)
(0013) #include "cc2420.h"
(0014) #include "spi.h"
(0015)
(0016) unsigned char Data_RXFIFO[TX_length]; //从RXFIFO中读入的数据,包括帧长度,MAC头,MAC有效负载等部分
(0017) unsigned int serial_num=0; //数据序号
(0018) unsigned char numbers[2048]; //存放接收到的数据序列号
(0019) unsigned char PAN_id[2]={0x23,0x45}; //
(0020) unsigned char short_addr[2]={0x15,0x73};
(0021)
(0022) void main(void)
(0023) {
(0024) unsigned char i;
(0025) unsigned char dH[1],dL[1];
(0026)
(0027) init_spi();
0227 940E0273 CALL _init_spi
(0028)
(0029) PORTB |=(1<<CSn); //CSN引脚置位,停止SPI操作,
0229 9AC0 SBI 0x18,0
(0030) PORTB |=1<<SCK; // Spi clock line init high
022A 9AC1 SBI 0x18,1
(0031) PORTE |=1<<RST; //注意该引脚低电平时,cc2420处于复位状态
022B 9A1A SBI 0x03,2
(0032)
(0033) Set_Configure(); //初始化设置配置字
022C 940E01DD CALL _Set_Configure
(0034) PwDown_Idle(); //从掉电模式转换到空闲模式
022E 940E01BE CALL _PwDown_Idle
(0035)
(0036) Write_RAM(0x6a,0x02,2,short_addr);
0230 E084 LDI R24,4
0231 E091 LDI R25,1
0232 839B STD Y+3,R25
0233 838A STD Y+2,R24
0234 E082 LDI R24,2
0235 8388 STD Y+0,R24
0236 E022 LDI R18,2
0237 E60A LDI R16,0x6A
0238 940E0114 CALL _Write_RAM
(0037) Write_RAM(0x68,0x02,2,PAN_id); //向RAM中写入地址,用于地址识别
023A E082 LDI R24,2
023B E091 LDI R25,1
023C 839B STD Y+3,R25
023D 838A STD Y+2,R24
023E E082 LDI R24,2
023F 8388 STD Y+0,R24
0240 E022 LDI R18,2
0241 E608 LDI R16,0x68
0242 940E0114 CALL _Write_RAM
(0038)
(0039) Idle_Rx(); //进入接收模式
0244 940E01DA CALL _Idle_Rx
(0040)
(0041) i=0;
0246 2744 CLR R20
0247 C028 RJMP 0x0270
(0042) while(1)
(0043) {
(0044) if((PINE&(1<<FIFOP))!=0) //检测到数据
0248 9B0E SBIS 0x01,6
0249 C026 RJMP 0x0270
(0045) {
(0046) Read_RXFIFO(TX_length,Data_RXFIFO); //因为设置了自动CRC校验,RXFIFO中包含两字节的RSSI,CRC结果等
024A E026 LDI R18,6
024B E039 LDI R19,0x9
024C E700 LDI R16,0x70
024D 940E00B0 CALL _Read_RXFIFO
(0047) Write_Command(SFLUSHRX); //清除RXFIFO,否则会一直请求微处理器读数据
024F E008 LDI R16,0x8
0250 940E006A CALL _Write_Command
(0048) numbers[serial_num]=Data_RXFIFO[3];
0252 E086 LDI R24,6
0253 E091 LDI R25,1
0254 91E00100 LDS R30,serial_num
0256 91F00101 LDS R31,serial_num+1
0258 0FE8 ADD R30,R24
0259 1FF9 ADC R31,R25
025A 90200909 LDS R2,Data_RXFIFO+3
025C 8220 STD Z+0,R2
(0049) serial_num++;
025D 91800100 LDS R24,serial_num
025F 91900101 LDS R25,serial_num+1
0261 9601 ADIW R24,1
0262 93900101 STS serial_num+1,R25
0264 93800100 STS serial_num,R24
(0050) if(serial_num==2047)
0266 3F8F CPI R24,0xFF
0267 E0E7 LDI R30,7
0268 079E CPC R25,R30
0269 F431 BNE 0x0270
(0051) {
(0052) serial_num=0;
026A 2422 CLR R2
026B 2433 CLR R3
026C 92300101 STS serial_num+1,R3
026E 92200100 STS serial_num,R2
0270 CFD7 RJMP 0x0248
0271 9626 ADIW R28,6
0272 9508 RET
FILE: E:\无线传感器网络资料\cc2420驱动\测试1\RX\spi.c
(0001) /***************************************
(0002) *2008,浙江工业大学信息与控制研究所
(0003) *All rights reserved
(0004) *
(0005) *文件名称:SPI.c
(0006) *摘 要:SPI的子程序实现
(0007) *
(0008) *当前版本:1.1
(0009) *作 者:王微
(0010) *完成日期:2008.4.22
(0011) ****************************************/
(0012)
(0013) #include"spi.h"
(0014)
(0015) /*************************************************
(0016) 函数功能:初始化SPI口
(0017) 输入参数:无
(0018) 返回值:无
(0019) **************************************************/
(0020) void init_spi(void)
(0021) {
(0022) unsigned char temp;
(0023) DDRB|=(1<<MOSI)|(1<<SCK)|(1<<CSn);//设置MOSI、SCK和SS 为输出,其他为输入
_init_spi:
temp --> R16
0273 B387 IN R24,0x17
0274 6087 ORI R24,7
0275 BB87 OUT 0x17,R24
(0024) DDRE|=(1<<VREGEN)|(1<<RST);
0276 B182 IN R24,0x02
0277 608C ORI R24,0xC
0278 B982 OUT 0x02,R24
(0025)
(0026) SPCR = (1<<SPE)|(1<<MSTR);//|(1<<SPR0);// 使能SPI,主机模式,设置时钟速率为fck/4
0279 E580 LDI R24,0x50
027A B98D OUT 0x0D,R24
(0027) SPSR = BIT(SPI2X); //SPI时钟加倍
027B E081 LDI R24,1
027C B98E OUT 0x0E,R24
(0028)
(0029) temp = SPSR; //!!! 读一次SPSR为了清除SPIF位和WCOL位
027D B10E IN R16,0x0E
(0030)
(0031) temp = SPDR; //清空SPI,和中断标志,使SPI空闲
027E B10F IN R16,0x0F
027F 9508 RET
_SpiWrite:
temp --> R20
temp1 --> R22
data_spi --> R16
0280 D018 RCALL push_gset2
(0032) }
(0033)
(0034) /**************************************************
(0035) 函数功能:写SPI一个字节
(0036) 输入参数:SPI指令
(0037) 返回值:对应指令的结果
(0038) **************************************************/
(0039) unsigned char SpiWrite(unsigned char data_spi)
(0040) {
(0041) unsigned char temp,temp1;
(0042) SPDR=data_spi;
0281 B90F OUT 0x0F,R16
(0043) while(!(SPSR & (1<<SPIF))){;}//等待传输结束
0282 9B77 SBIS 0x0E,7
0283 CFFE RJMP 0x0282
(0044) temp1=SPDR;
0284 B16F IN R22,0x0F
(0045) temp = SPSR;
0285 B14E IN R20,0x0E
(0046)
(0047) return temp1;
0286 2F06 MOV R16,R22
0287 D005 RCALL pop_gset2
0288 9508 RET
(0048) }
(0049)
(0050) /*******************************************
(0051) *函数功能:使能SPI口
(0052) *输入参数:无
(0053) *输出参数:无
(0054) *返 回 值:无
(0055) ********************************************/
(0056) void enable_spi(void)
(0057) {
(0058) PORTB &=~(1<<CSn); //使能SPI口
_enable_spi:
0289 98C0 CBI 0x18,0
028A 9508 RET
(0059) }
(0060)
(0061) /*******************************************
(0062) *函数功能:禁止SPI口
(0063) *输入参数:无
(0064) *输出参数:无
(0065) *返 回 值:无
(0066) ********************************************/
(0067) void disable_spi(void)
(0068) {
(0069) PORTB |=(1<<CSn); //禁止SPI口
FILE: <library>
_disable_spi:
028B 9AC0 SBI 0x18,0
028C 9508 RET
pop_gset2:
028D E0E2 LDI R30,2
028E 940C029F JMP pop
pop_gset4:
0290 E0E8 LDI R30,0x8
0291 940C029F JMP pop
push_gset5:
0293 92FA ST R15,-Y
0294 92EA ST R14,-Y
push_gset4:
0295 92DA ST R13,-Y
0296 92CA ST R12,-Y
push_gset3:
0297 92BA ST R11,-Y
0298 92AA ST R10,-Y
push_gset2:
0299 937A ST R23,-Y
029A 936A ST R22,-Y
push_gset1:
029B 935A ST R21,-Y
029C 934A ST R20,-Y
029D 9508 RET
pop_gset1:
029E E0E1 LDI R30,1
pop:
029F 9149 LD R20,Y+
02A0 9159 LD R21,Y+
02A1 FDE0 SBRC R30,0
02A2 9508 RET
02A3 9169 LD R22,Y+
02A4 9179 LD R23,Y+
02A5 FDE1 SBRC R30,1
02A6 9508 RET
02A7 90A9 LD R10,Y+
02A8 90B9 LD R11,Y+
02A9 FDE2 SBRC R30,2
02AA 9508 RET
02AB 90C9 LD R12,Y+
02AC 90D9 LD R13,Y+
02AD FDE3 SBRC R30,3
02AE 9508 RET
02AF 90E9 LD R14,Y+
02B0 90F9 LD R15,Y+
02B1 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -