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

📄 cc2420.s

📁 该程序通过调试
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module cc2420.c
	.area text(rom, con, rel)
	.dbfile E:\无线传感器网络资料\cc2420驱动\测试1\RX\cc2420.c
	.dbfunc e Write_Command _Write_Command fc
;      statueval -> R20
;        command -> R20
	.even
_Write_Command::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 24
; /***************************************
; *2008,浙江工业大学信息与控制研究所
; *All rights reserved
; *
; *文件名称:cc2420.c
; *摘    要:无线收发芯片cc2420驱动程序
; *
; *当前版本:1.0
; *作    者:董齐芬
; *完成日期:2008.8.11
; ****************************************/
; 
; #include "cc2420.h"
; #include "spi.h"
; #include "common.h"
; 
; /*******************************************
; *函数功能:写命令寄存器
; *输入参数:命令字
; *输出参数:无
; *返 回 值:状态寄存器的值
; ********************************************/
; unsigned char Write_Command(unsigned char command)
; {
	.dbline 27
;   unsigned char statueval;
;   
;   enable_spi();     //使能SPI口
	xcall _enable_spi
	.dbline 28
;   statueval=SpiWrite(command);
	mov R16,R20
	xcall _SpiWrite
	mov R20,R16
	.dbline 29
;   disable_spi();      //禁止SPI口  
	xcall _disable_spi
	.dbline 31
;   
;   return statueval;
	mov R16,R20
	.dbline -2
L1:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r statueval 20 c
	.dbsym r command 20 c
	.dbend
	.dbfunc e Read_Status _Read_Status fc
;    statuevalue -> R20
	.even
_Read_Status::
	xcall push_gset1
	.dbline -1
	.dbline 41
; }
; 
; /*******************************************
; *函数功能:读状态寄存器
; *输入参数:无
; *输出参数:无
; *返 回 值:状态寄存器的值
; ********************************************/
; unsigned char Read_Status(void)
; {
	.dbline 43
;   unsigned char statuevalue;
;   statuevalue=Write_Command(SNOP);        //空操作命令,为了读取当前状态寄存器的值
	clr R16
	xcall _Write_Command
	mov R20,R16
	.dbline 44
;   return statuevalue;
	.dbline -2
L2:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r statuevalue 20 c
	.dbend
	.dbfunc e Write_ConfigureWord _Write_ConfigureWord fc
;    statuevalue -> R20
;          DataL -> y+4
;          DataH -> R22
;           Addr -> R20
	.even
_Write_ConfigureWord::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 56
; }
; 
; /*******************************************
; *函数功能:写配置字
; *输入参数:Addr:配置寄存器的地址;
;            DataH:配置字的高字节;
; 		   DataL:配置字的低字节;
; *输出参数:无
; *返 回 值:状态寄存器的值
; ********************************************/
; unsigned char Write_ConfigureWord(unsigned char Addr,unsigned char DataH,unsigned char DataL)
; {
	.dbline 60
;   unsigned char statuevalue;
;   
;   // enable_spi();     //使能SPI口   以具体情况而定使能/禁止SPI口放在何处
;   statuevalue=SpiWrite(Addr);  //发送配置寄存器的地址,同时返回当前状态寄存器的值
	mov R16,R20
	xcall _SpiWrite
	mov R20,R16
	.dbline 61
;   SpiWrite(DataH); //发送配置字的高字节
	mov R16,R22
	xcall _SpiWrite
	.dbline 62
;   SpiWrite(DataL); //发送配置字的低字节
	ldd R16,y+4
	xcall _SpiWrite
	.dbline 65
;   // disable_spi();      //禁止SPI口  
;  
;   return statuevalue;
	mov R16,R20
	.dbline -2
L3:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r statuevalue 20 c
	.dbsym l DataL 4 c
	.dbsym r DataH 22 c
	.dbsym r Addr 20 c
	.dbend
	.dbfunc e Read_ConfigureWord _Read_ConfigureWord fc
;    statuevalue -> R20
;          DataL -> y+4
;          DataH -> R22,R23
;           Addr -> R20
	.even
_Read_ConfigureWord::
	xcall push_gset2
	movw R22,R18
	mov R20,R16
	.dbline -1
	.dbline 76
; }
; 
; /*******************************************
; *函数功能:读配置字
; *输入参数:Addr:配置寄存器的地址;	   
; *输出参数:DataH:配置字的高字节;
;            DataL:配置字的低字节;
; *返 回 值:状态寄存器的值
; ********************************************/
; unsigned char Read_ConfigureWord(unsigned char Addr,unsigned char *DataH,unsigned char *DataL)
; {
	.dbline 79
;   unsigned char statuevalue;
;   
;   Addr|=0x40;     //读标志位为1
	ori R20,64
	.dbline 80
;   enable_spi();     //使能SPI口   以具体情况而定使能/禁止SPI口放在何处
	xcall _enable_spi
	.dbline 81
;   statuevalue=SpiWrite(Addr);  //发送配置寄存器的地址,同时返回当前状态寄存器的值
	mov R16,R20
	xcall _SpiWrite
	mov R20,R16
	.dbline 82
;   *DataH=SpiWrite(0xff); //读配置字的高字节
	ldi R16,255
	xcall _SpiWrite
	movw R30,R22
	std z+0,R16
	.dbline 83
;   *DataL=SpiWrite(0xff); //读配置字的低字节
	ldi R16,255
	xcall _SpiWrite
	mov R2,R16
	ldd R30,y+4
	ldd R31,y+5
	std z+0,R2
	.dbline 84
;   disable_spi();      //禁止SPI口  
	xcall _disable_spi
	.dbline 86
;  
;   return statuevalue;
	mov R16,R20
	.dbline -2
L4:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r statuevalue 20 c
	.dbsym l DataL 4 pc
	.dbsym r DataH 22 pc
	.dbsym r Addr 20 c
	.dbend
	.dbfunc e Read_RXFIFO _Read_RXFIFO fc
;           Addr -> R20
;    statuevalue -> R20
;              i -> R22
;         p_Data -> R10,R11
;       Data_Num -> R12
	.even
_Read_RXFIFO::
	xcall push_gset4
	movw R10,R18
	mov R12,R16
	.dbline -1
	.dbline 96
; }
; 
; /*******************************************
; *函数功能:读RXFIFO 
; *输入参数:Data_Num:欲读取的字节个数
; *输出参数:p_Data:存储数据的缓存首地址;
; *返 回 值:状态寄存器的值
; ********************************************/
; unsigned char Read_RXFIFO(unsigned char Data_Num,unsigned char *p_Data) 
; {
	.dbline 99
;   unsigned char statuevalue,Addr,i;
;   
;   Addr=RXFIFO|0x40;     //读标志位为1
	ldi R20,127
	.dbline 100
;   enable_spi();         //使能SPI口 
	xcall _enable_spi
	.dbline 101
;   statuevalue=SpiWrite(Addr);
	mov R16,R20
	xcall _SpiWrite
	mov R20,R16
	.dbline 103
;   
;   for(i=0;i<Data_Num;i++)
	clr R22
	xjmp L9
L6:
	.dbline 104
	.dbline 105
	ldi R16,255
	xcall _SpiWrite
	mov R30,R22
	clr R31
	add R30,R10
	adc R31,R11
	std z+0,R16
	.dbline 106
L7:
	.dbline 103
	inc R22
L9:
	.dbline 103
	cp R22,R12
	brlo L6
	.dbline 108
;   {
;     *(p_Data+i)=SpiWrite(0xff);
;   }
;   
;   disable_spi();      //禁止SPI口  
	xcall _disable_spi
	.dbline 110
;  
;   return statuevalue;
	mov R16,R20
	.dbline -2
L5:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r Addr 20 c
	.dbsym r statuevalue 20 c
	.dbsym r i 22 c
	.dbsym r p_Data 10 pc
	.dbsym r Data_Num 12 c
	.dbend
	.dbfunc e Read_RXFIFO_Byte _Read_RXFIFO_Byte fc
;           Addr -> R20
;      readvalue -> R20
	.even
_Read_RXFIFO_Byte::
	xcall push_gset1
	.dbline -1
	.dbline 120
; }
; 
; /*******************************************
; *函数功能:读一字节RXFIFO
; *输入参数:无
; *输出参数:无
; *返 回 值:读取的数据
; ********************************************/
; unsigned char Read_RXFIFO_Byte(void)
; {
	.dbline 123
;   unsigned char readvalue,Addr;
;   
;   Addr=RXFIFO|0x40;     //读标志位为1
	ldi R20,127
	.dbline 124
;   enable_spi();         //使能SPI口 
	xcall _enable_spi
	.dbline 125
;   SpiWrite(Addr);
	mov R16,R20
	xcall _SpiWrite
	.dbline 126
;   readvalue=SpiWrite(0xff);
	ldi R16,255
	xcall _SpiWrite
	mov R20,R16
	.dbline 127
;   disable_spi();      //禁止SPI口  
	xcall _disable_spi
	.dbline 128
;   return readvalue;  
	mov R16,R20
	.dbline -2
L10:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r Addr 20 c
	.dbsym r readvalue 20 c
	.dbend
	.dbfunc e Write_TXFIFO _Write_TXFIFO fc
;    statuevalue -> R20
;              i -> R22
;         p_Data -> R10,R11
;       Data_Num -> R12
	.even
_Write_TXFIFO::
	xcall push_gset4
	movw R10,R18
	mov R12,R16
	.dbline -1
	.dbline 138
; }
; 
; /*******************************************
; *函数功能:写TXFIFO
; *输入参数:Data_Num:欲写入的字节个数
; *输出参数:p_Data:存储数据的缓存首地址;
; *返 回 值:状态寄存器的值
; ********************************************/
; unsigned char Write_TXFIFO(unsigned char Data_Num,unsigned char *p_Data)
; {
	.dbline 141
;   unsigned char statuevalue,i;
;   
;   enable_spi();         //使能SPI口 
	xcall _enable_spi
	.dbline 142
;   SpiWrite(TXFIFO);
	ldi R16,62
	xcall _SpiWrite
	.dbline 144
;   
;   for (i=0;i<Data_Num;i++)
	clr R22
	xjmp L15
L12:
	.dbline 145
;   {
	.dbline 146
;     statuevalue=SpiWrite(*(p_Data+i));
	mov R30,R22
	clr R31
	add R30,R10
	adc R31,R11
	ldd R16,z+0
	xcall _SpiWrite
	mov R20,R16
	.dbline 148
; 	
; 	if ((statuevalue&(1<<TX_UNDERFLOE))!=0x00)         //发生下溢
	sbrs R16,5
	rjmp L16
	.dbline 149
; 	{
	.dbline 150
; 	  Write_Command(SFLUSHTX);
	ldi R16,9
	xcall _Write_Command
	.dbline 151
; 	  enable_spi();     //重新使能SPI口
	xcall _enable_spi
	.dbline 152
; 	}
L16:
	.dbline 153
L13:
	.dbline 144
	inc R22
L15:
	.dbline 144
	cp R22,R12
	brlo L12
	.dbline 155
;   }
;   
;   disable_spi();      //禁止SPI口 
	xcall _disable_spi
	.dbline 156
;   return statuevalue;
	mov R16,R20
	.dbline -2
L11:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r statuevalue 20 c
	.dbsym r i 22 c
	.dbsym r p_Data 10 pc
	.dbsym r Data_Num 12 c
	.dbend
	.dbfunc e Write_TXFIFO_Byte _Write_TXFIFO_Byte fc
;    statuevalue -> R20
;         p_Data -> R20
	.even
_Write_TXFIFO_Byte::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 166
; } 
; 
; /*******************************************
; *函数功能:写一字节TXFIFO
; *输入参数:p_Data:要写入的数据
; *输出参数:无
; *返 回 值:状态寄存器的值
; ********************************************/
; unsigned char Write_TXFIFO_Byte(unsigned char p_Data)
; {
	.dbline 169
;   unsigned char statuevalue;
;   
;   enable_spi();         //使能SPI口 
	xcall _enable_spi
	.dbline 170
;   SpiWrite(TXFIFO);  
	ldi R16,62
	xcall _SpiWrite
	.dbline 171
;   statuevalue=SpiWrite(p_Data);
	mov R16,R20
	xcall _SpiWrite
	mov R20,R16
	.dbline 172
;   disable_spi();      //禁止SPI口 
	xcall _disable_spi
	.dbline 173
;   return statuevalue;
	mov R16,R20
	.dbline -2
L18:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r statuevalue 20 c
	.dbsym r p_Data 20 c
	.dbend
	.dbfunc e Write_RAM _Write_RAM fc
;    statuevalue -> R20
;              i -> R22
;         p_Data -> R10,R11
;       Data_Num -> R12
;          AddrL -> R22
;          AddrH -> R20
	.even
_Write_RAM::
	xcall push_gset4
	mov R22,R18
	mov R20,R16
	ldd R12,y+8
	ldd R10,y+10
	ldd R11,y+11
	.dbline -1
	.dbline 186
; }
; 
; /*******************************************
; *函数功能:写RAM 
; *输入参数:p_Data:存储数据的缓存首地址;
;            Data_Num:要写入的字节数
; 		   AddrH:在选定的RAM存储块中确定RAM地址
; 		   AddrL:选择RAM存储块
; *输出参数:无
; *返 回 值:状态寄存器的值
; ********************************************/
; unsigned char Write_RAM(unsigned char AddrH,unsigned char AddrL,unsigned char Data_Num,unsigned char *p_Data)
; {
	.dbline 188
;   unsigned char statuevalue,i;
;   AddrH|=0X80;      //访问RAM位置1
	ori R20,128
	.dbline 189
;   AddrL<<=6;
	lsl R22
	lsl R22
	lsl R22
	lsl R22
	lsl R22
	lsl R22
	.dbline 190
;   AddrL&=0XDF;      //读写操作位置0,表示写操作
	andi R22,223
	.dbline 192
;   
;   enable_spi();         //使能SPI口 
	xcall _enable_spi
	.dbline 193
;   statuevalue=SpiWrite(AddrH);  
	mov R16,R20
	xcall _SpiWrite
	mov R20,R16
	.dbline 194
;   SpiWrite(AddrL);
	mov R16,R22
	xcall _SpiWrite
	.dbline 196
;   
;   for (i=0;i<Data_Num;i++)
	clr R22
	xjmp L23
L20:
	.dbline 197
	.dbline 198
	mov R30,R22
	clr R31
	add R30,R10
	adc R31,R11
	ldd R16,z+0
	xcall _SpiWrite
	.dbline 199
L21:
	.dbline 196
	inc R22
L23:
	.dbline 196
	cp R22,R12
	brlo L20
	.dbline 201
;   {
;     SpiWrite(*(p_Data+i));
;   }
;   
;   disable_spi();      //禁止SPI口 
	xcall _disable_spi
	.dbline 202
;   return statuevalue;
	mov R16,R20
	.dbline -2
L19:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r statuevalue 20 c
	.dbsym r i 22 c
	.dbsym r p_Data 10 pc
	.dbsym r Data_Num 12 c
	.dbsym r AddrL 22 c
	.dbsym r AddrH 20 c
	.dbend
	.dbfunc e Write_RAM_Byte _Write_RAM_Byte fc
;    statuevalue -> R20
;         p_Data -> y+4
;          AddrL -> R22
;          AddrH -> R20
	.even
_Write_RAM_Byte::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 214
; }
; 
; /*******************************************
; *函数功能:写一字节RAM
; *输入参数:p_Data:要写入的数据
;            AddrH:在选定的RAM存储块中确定RAM地址
; 		   AddrL:选择RAM存储块
; *输出参数:无
; *返 回 值:状态寄存器的值
; ********************************************/
; unsigned char Write_RAM_Byte(unsigned char AddrH,unsigned char AddrL,unsigned char p_Data)
; {
	.dbline 216
;   unsigned char statuevalue;

⌨️ 快捷键说明

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