⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rx.lst

📁 该程序通过调试
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
    0049 EFCF      LDI	R28,0xFF
    004A E1D0      LDI	R29,0x10
    004B BFCD      OUT	0x3D,R28
    004C BFDE      OUT	0x3E,R29
    004D 51C0      SUBI	R28,0x10
    004E 40D0      SBCI	R29,0
    004F EA0A      LDI	R16,0xAA
    0050 8308      STD	Y+0,R16
    0051 2400      CLR	R0
    0052 E0E6      LDI	R30,6
    0053 E0F1      LDI	R31,1
    0054 E019      LDI	R17,0x9
    0055 37E6      CPI	R30,0x76
    0056 07F1      CPC	R31,R17
    0057 F011      BEQ	0x005A
    0058 9201      ST	R0,Z+
    0059 CFFB      RJMP	0x0055
    005A 8300      STD	Z+0,R16
    005B E8EC      LDI	R30,0x8C
    005C E0F0      LDI	R31,0
    005D E0A0      LDI	R26,0
    005E E0B1      LDI	R27,1
    005F E010      LDI	R17,0
    0060 39E2      CPI	R30,0x92
    0061 07F1      CPC	R31,R17
    0062 F021      BEQ	0x0067
    0063 95C8      LPM
    0064 9631      ADIW	R30,1
    0065 920D      ST	R0,X+
    0066 CFF9      RJMP	0x0060
    0067 940E0226  CALL	_main
_exit:
    0069 CFFF      RJMP	_exit
_Write_Command:
  statueval            --> R20
  command              --> R20
    006A 940E029B  CALL	push_gset1
    006C 2F40      MOV	R20,R16
FILE: E:\无线传感器网络资料\cc2420驱动\测试1\RX\cc2420.c
(0001) /***************************************
(0002) *2008,浙江工业大学信息与控制研究所
(0003) *All rights reserved
(0004) *
(0005) *文件名称:cc2420.c
(0006) *摘    要:无线收发芯片cc2420驱动程序
(0007) *
(0008) *当前版本:1.0
(0009) *作    者:董齐芬
(0010) *完成日期:2008.8.11
(0011) ****************************************/
(0012) 
(0013) #include "cc2420.h"
(0014) #include "spi.h"
(0015) #include "common.h"
(0016) 
(0017) /*******************************************
(0018) *函数功能:写命令寄存器
(0019) *输入参数:命令字
(0020) *输出参数:无
(0021) *返 回 值:状态寄存器的值
(0022) ********************************************/
(0023) unsigned char Write_Command(unsigned char command)
(0024) {
(0025)   unsigned char statueval;
(0026)   
(0027)   enable_spi();     //使能SPI口
    006D 940E0289  CALL	_enable_spi
(0028)   statueval=SpiWrite(command);
    006F 2F04      MOV	R16,R20
    0070 940E0280  CALL	_SpiWrite
    0072 2F40      MOV	R20,R16
(0029)   disable_spi();      //禁止SPI口  
    0073 940E028B  CALL	_disable_spi
(0030)   
(0031)   return statueval;
    0075 2F04      MOV	R16,R20
    0076 940E029E  CALL	pop_gset1
    0078 9508      RET
_Read_Status:
  statuevalue          --> R20
    0079 940E029B  CALL	push_gset1
(0032) }
(0033) 
(0034) /*******************************************
(0035) *函数功能:读状态寄存器
(0036) *输入参数:无
(0037) *输出参数:无
(0038) *返 回 值:状态寄存器的值
(0039) ********************************************/
(0040) unsigned char Read_Status(void)
(0041) {
(0042)   unsigned char statuevalue;
(0043)   statuevalue=Write_Command(SNOP);        //空操作命令,为了读取当前状态寄存器的值
    007B 2700      CLR	R16
    007C DFED      RCALL	_Write_Command
    007D 2F40      MOV	R20,R16
(0044)   return statuevalue;
    007E 940E029E  CALL	pop_gset1
    0080 9508      RET
_Write_ConfigureWord:
  statuevalue          --> R20
  DataL                --> Y+4
  DataH                --> R22
  Addr                 --> R20
    0081 940E0299  CALL	push_gset2
    0083 2F62      MOV	R22,R18
    0084 2F40      MOV	R20,R16
(0045) }
(0046) 
(0047) /*******************************************
(0048) *函数功能:写配置字
(0049) *输入参数:Addr:配置寄存器的地址;
(0050)            DataH:配置字的高字节;
(0051) 		   DataL:配置字的低字节;
(0052) *输出参数:无
(0053) *返 回 值:状态寄存器的值
(0054) ********************************************/
(0055) unsigned char Write_ConfigureWord(unsigned char Addr,unsigned char DataH,unsigned char DataL)
(0056) {
(0057)   unsigned char statuevalue;
(0058)   
(0059)   // enable_spi();     //使能SPI口   以具体情况而定使能/禁止SPI口放在何处
(0060)   statuevalue=SpiWrite(Addr);  //发送配置寄存器的地址,同时返回当前状态寄存器的值
    0085 2F04      MOV	R16,R20
    0086 940E0280  CALL	_SpiWrite
    0088 2F40      MOV	R20,R16
(0061)   SpiWrite(DataH); //发送配置字的高字节
    0089 2F06      MOV	R16,R22
    008A 940E0280  CALL	_SpiWrite
(0062)   SpiWrite(DataL); //发送配置字的低字节
    008C 810C      LDD	R16,Y+4
    008D 940E0280  CALL	_SpiWrite
(0063)   // disable_spi();      //禁止SPI口  
(0064)  
(0065)   return statuevalue;
    008F 2F04      MOV	R16,R20
    0090 940E028D  CALL	pop_gset2
    0092 9508      RET
_Read_ConfigureWord:
  statuevalue          --> R20
  DataL                --> Y+4
  DataH                --> R22
  Addr                 --> R20
    0093 940E0299  CALL	push_gset2
    0095 01B9      MOVW	R22,R18
    0096 2F40      MOV	R20,R16
(0066) }
(0067) 
(0068) /*******************************************
(0069) *函数功能:读配置字
(0070) *输入参数:Addr:配置寄存器的地址;	   
(0071) *输出参数:DataH:配置字的高字节;
(0072)            DataL:配置字的低字节;
(0073) *返 回 值:状态寄存器的值
(0074) ********************************************/
(0075) unsigned char Read_ConfigureWord(unsigned char Addr,unsigned char *DataH,unsigned char *DataL)
(0076) {
(0077)   unsigned char statuevalue;
(0078)   
(0079)   Addr|=0x40;     //读标志位为1
    0097 6440      ORI	R20,0x40
(0080)   enable_spi();     //使能SPI口   以具体情况而定使能/禁止SPI口放在何处
    0098 940E0289  CALL	_enable_spi
(0081)   statuevalue=SpiWrite(Addr);  //发送配置寄存器的地址,同时返回当前状态寄存器的值
    009A 2F04      MOV	R16,R20
    009B 940E0280  CALL	_SpiWrite
    009D 2F40      MOV	R20,R16
(0082)   *DataH=SpiWrite(0xff); //读配置字的高字节
    009E EF0F      LDI	R16,0xFF
    009F 940E0280  CALL	_SpiWrite
    00A1 01FB      MOVW	R30,R22
    00A2 8300      STD	Z+0,R16
(0083)   *DataL=SpiWrite(0xff); //读配置字的低字节
    00A3 EF0F      LDI	R16,0xFF
    00A4 940E0280  CALL	_SpiWrite
    00A6 2E20      MOV	R2,R16
    00A7 81EC      LDD	R30,Y+4
    00A8 81FD      LDD	R31,Y+5
    00A9 8220      STD	Z+0,R2
(0084)   disable_spi();      //禁止SPI口  
    00AA 940E028B  CALL	_disable_spi
(0085)  
(0086)   return statuevalue;
    00AC 2F04      MOV	R16,R20
    00AD 940E028D  CALL	pop_gset2
    00AF 9508      RET
_Read_RXFIFO:
  Addr                 --> R20
  statuevalue          --> R20
  i                    --> R22
  p_Data               --> R10
  Data_Num             --> R12
    00B0 940E0295  CALL	push_gset4
    00B2 0159      MOVW	R10,R18
    00B3 2EC0      MOV	R12,R16
(0087) }
(0088) 
(0089) /*******************************************
(0090) *函数功能:读RXFIFO 
(0091) *输入参数:Data_Num:欲读取的字节个数
(0092) *输出参数:p_Data:存储数据的缓存首地址;
(0093) *返 回 值:状态寄存器的值
(0094) ********************************************/
(0095) unsigned char Read_RXFIFO(unsigned char Data_Num,unsigned char *p_Data) 
(0096) {
(0097)   unsigned char statuevalue,Addr,i;
(0098)   
(0099)   Addr=RXFIFO|0x40;     //读标志位为1
    00B4 E74F      LDI	R20,0x7F
(0100)   enable_spi();         //使能SPI口 
    00B5 940E0289  CALL	_enable_spi
(0101)   statuevalue=SpiWrite(Addr);
    00B7 2F04      MOV	R16,R20
    00B8 940E0280  CALL	_SpiWrite
    00BA 2F40      MOV	R20,R16
(0102)   
(0103)   for(i=0;i<Data_Num;i++)
    00BB 2766      CLR	R22
    00BC C009      RJMP	0x00C6
(0104)   {
(0105)     *(p_Data+i)=SpiWrite(0xff);
    00BD EF0F      LDI	R16,0xFF
    00BE 940E0280  CALL	_SpiWrite
    00C0 2FE6      MOV	R30,R22
    00C1 27FF      CLR	R31
    00C2 0DEA      ADD	R30,R10
    00C3 1DFB      ADC	R31,R11
    00C4 8300      STD	Z+0,R16
    00C5 9563      INC	R22
    00C6 156C      CP	R22,R12
    00C7 F3A8      BCS	0x00BD
(0106)   }
(0107)   
(0108)   disable_spi();      //禁止SPI口  
    00C8 940E028B  CALL	_disable_spi
(0109)  
(0110)   return statuevalue;
    00CA 2F04      MOV	R16,R20
    00CB 940E0290  CALL	pop_gset4
    00CD 9508      RET
_Read_RXFIFO_Byte:
  Addr                 --> R20
  readvalue            --> R20
    00CE 940E029B  CALL	push_gset1
(0111) }
(0112) 
(0113) /*******************************************
(0114) *函数功能:读一字节RXFIFO
(0115) *输入参数:无
(0116) *输出参数:无
(0117) *返 回 值:读取的数据
(0118) ********************************************/
(0119) unsigned char Read_RXFIFO_Byte(void)
(0120) {
(0121)   unsigned char readvalue,Addr;
(0122)   
(0123)   Addr=RXFIFO|0x40;     //读标志位为1
    00D0 E74F      LDI	R20,0x7F
(0124)   enable_spi();         //使能SPI口 
    00D1 940E0289  CALL	_enable_spi
(0125)   SpiWrite(Addr);
    00D3 2F04      MOV	R16,R20
    00D4 940E0280  CALL	_SpiWrite
(0126)   readvalue=SpiWrite(0xff);
    00D6 EF0F      LDI	R16,0xFF
    00D7 940E0280  CALL	_SpiWrite
    00D9 2F40      MOV	R20,R16
(0127)   disable_spi();      //禁止SPI口  
    00DA 940E028B  CALL	_disable_spi
(0128)   return readvalue;  
    00DC 2F04      MOV	R16,R20
    00DD 940E029E  CALL	pop_gset1
    00DF 9508      RET
_Write_TXFIFO:
  statuevalue          --> R20
  i                    --> R22
  p_Data               --> R10
  Data_Num             --> R12
    00E0 940E0295  CALL	push_gset4
    00E2 0159      MOVW	R10,R18
    00E3 2EC0      MOV	R12,R16
(0129) }
(0130) 
(0131) /*******************************************
(0132) *函数功能:写TXFIFO
(0133) *输入参数:Data_Num:欲写入的字节个数
(0134) *输出参数:p_Data:存储数据的缓存首地址;
(0135) *返 回 值:状态寄存器的值
(0136) ********************************************/
(0137) unsigned char Write_TXFIFO(unsigned char Data_Num,unsigned char *p_Data)
(0138) {
(0139)   unsigned char statuevalue,i;
(0140)   
(0141)   enable_spi();         //使能SPI口 
    00E4 940E0289  CALL	_enable_spi
(0142)   SpiWrite(TXFIFO);
    00E6 E30E      LDI	R16,0x3E
    00E7 940E0280  CALL	_SpiWrite
(0143)   
(0144)   for (i=0;i<Data_Num;i++)
    00E9 2766      CLR	R22
    00EA C00F      RJMP	0x00FA
(0145)   {
(0146)     statuevalue=SpiWrite(*(p_Data+i));
    00EB 2FE6      MOV	R30,R22
    00EC 27FF      CLR	R31
    00ED 0DEA      ADD	R30,R10
    00EE 1DFB      ADC	R31,R11
    00EF 8100      LDD	R16,Z+0
    00F0 940E0280  CALL	_SpiWrite
    00F2 2F40      MOV	R20,R16
(0147) 	
(0148) 	if ((statuevalue&(1<<TX_UNDERFLOE))!=0x00)         //发生下溢
    00F3 FF05      SBRS	R16,5
    00F4 C004      RJMP	0x00F9
(0149) 	{
(0150) 	  Write_Command(SFLUSHTX);
    00F5 E009      LDI	R16,0x9
    00F6 DF73      RCALL	_Write_Command
(0151) 	  enable_spi();     //重新使能SPI口
    00F7 940E0289  CALL	_enable_spi
    00F9 9563      INC	R22
    00FA 156C      CP	R22,R12
    00FB F378      BCS	0x00EB
(0152) 	}
(0153)   }
(0154)   
(0155)   disable_spi();      //禁止SPI口 
    00FC 940E028B  CALL	_disable_spi
(0156)   return statuevalue;
    00FE 2F04      MOV	R16,R20
    00FF 940E0290  CALL	pop_gset4
    0101 9508      RET
_Write_TXFIFO_Byte:
  statuevalue          --> R20
  p_Data               --> R20
    0102 940E029B  CALL	push_gset1
    0104 2F40      MOV	R20,R16
(0157) } 
(0158) 
(0159) /*******************************************
(0160) *函数功能:写一字节TXFIFO
(0161) *输入参数:p_Data:要写入的数据
(0162) *输出参数:无
(0163) *返 回 值:状态寄存器的值
(0164) ********************************************/
(0165) unsigned char Write_TXFIFO_Byte(unsigned char p_Data)
(0166) {
(0167)   unsigned char statuevalue;
(0168)   
(0169)   enable_spi();         //使能SPI口 
    0105 940E0289  CALL	_enable_spi
(0170)   SpiWrite(TXFIFO);  
    0107 E30E      LDI	R16,0x3E
    0108 940E0280  CALL	_SpiWrite
(0171)   statuevalue=SpiWrite(p_Data);
    010A 2F04      MOV	R16,R20
    010B 940E0280  CALL	_SpiWrite
    010D 2F40      MOV	R20,R16
(0172)   disable_spi();      //禁止SPI口 
    010E 940E028B  CALL	_disable_spi
(0173)   return statuevalue;
    0110 2F04      MOV	R16,R20
    0111 940E029E  CALL	pop_gset1
    0113 9508      RET
_Write_RAM:
  statuevalue          --> R20
  i                    --> R22
  p_Data               --> R10
  Data_Num             --> R12
  AddrL                --> R22
  AddrH                --> R20
    0114 940E0295  CALL	push_gset4
    0116 2F62      MOV	R22,R18
    0117 2F40      MOV	R20,R16
    0118 84C8      LDD	R12,Y+8
    0119 84AA      LDD	R10,Y+10
    011A 84BB      LDD	R11,Y+11
(0174) }
(0175) 
(0176) /*******************************************
(0177) *函数功能:写RAM 
(0178) *输入参数:p_Data:存储数据的缓存首地址;
(0179)            Data_Num:要写入的字节数
(0180) 		   AddrH:在选定的RAM存储块中确定RAM地址
(0181) 		   AddrL:选择RAM存储块
(0182) *输出参数:无
(0183) *返 回 值:状态寄存器的值
(0184) ********************************************/
(0185) unsigned char Write_RAM(unsigned char AddrH,unsigned char AddrL,unsigned char Data_Num,unsigned char *p_Data)
(0186) {
(0187)   unsigned char statuevalue,i;
(0188)   AddrH|=0X80;      //访问RAM位置1
    011B 6840      ORI	R20,0x80
(0189)   AddrL<<=6;
    011C 0F66      LSL	R22
    011D 0F66      LSL	R22
    011E 0F66      LSL	R22
    011F 0F66      LSL	R22
    0120 0F66      LSL	R22
    0121 0F66      LSL	R22
(0190)   AddrL&=0XDF;      //读写操作位置0,表示写操作
    0122 7D6F      ANDI	R22,0xDF
(0191)   
(0192)   enable_spi();         //使能SPI口 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -