📄 cc2420.lis
字号:
.module cc2420.c
.area text(rom, con, rel)
0000 .dbfile E:\无线传感器网络资料\cc2420驱动\测试1\RX\cc2420.c
0000 .dbfunc e Write_Command _Write_Command fc
0000 ; statueval -> R20
0000 ; command -> R20
.even
0000 _Write_Command::
0000 0E940000 xcall push_gset1
0004 402F mov R20,R16
0006 .dbline -1
0006 .dbline 24
0006 ; /***************************************
0006 ; *2008,浙江工业大学信息与控制研究所
0006 ; *All rights reserved
0006 ; *
0006 ; *文件名称:cc2420.c
0006 ; *摘 要:无线收发芯片cc2420驱动程序
0006 ; *
0006 ; *当前版本:1.0
0006 ; *作 者:董齐芬
0006 ; *完成日期:2008.8.11
0006 ; ****************************************/
0006 ;
0006 ; #include "cc2420.h"
0006 ; #include "spi.h"
0006 ; #include "common.h"
0006 ;
0006 ; /*******************************************
0006 ; *函数功能:写命令寄存器
0006 ; *输入参数:命令字
0006 ; *输出参数:无
0006 ; *返 回 值:状态寄存器的值
0006 ; ********************************************/
0006 ; unsigned char Write_Command(unsigned char command)
0006 ; {
0006 .dbline 27
0006 ; unsigned char statueval;
0006 ;
0006 ; enable_spi(); //使能SPI口
0006 0E940000 xcall _enable_spi
000A .dbline 28
000A ; statueval=SpiWrite(command);
000A 042F mov R16,R20
000C 0E940000 xcall _SpiWrite
0010 402F mov R20,R16
0012 .dbline 29
0012 ; disable_spi(); //禁止SPI口
0012 0E940000 xcall _disable_spi
0016 .dbline 31
0016 ;
0016 ; return statueval;
0016 042F mov R16,R20
0018 .dbline -2
0018 L1:
0018 0E940000 xcall pop_gset1
001C .dbline 0 ; func end
001C 0895 ret
001E .dbsym r statueval 20 c
001E .dbsym r command 20 c
001E .dbend
001E .dbfunc e Read_Status _Read_Status fc
001E ; statuevalue -> R20
.even
001E _Read_Status::
001E 0E940000 xcall push_gset1
0022 .dbline -1
0022 .dbline 41
0022 ; }
0022 ;
0022 ; /*******************************************
0022 ; *函数功能:读状态寄存器
0022 ; *输入参数:无
0022 ; *输出参数:无
0022 ; *返 回 值:状态寄存器的值
0022 ; ********************************************/
0022 ; unsigned char Read_Status(void)
0022 ; {
0022 .dbline 43
0022 ; unsigned char statuevalue;
0022 ; statuevalue=Write_Command(SNOP); //空操作命令,为了读取当前状态寄存器的值
0022 0027 clr R16
0024 EDDF xcall _Write_Command
0026 402F mov R20,R16
0028 .dbline 44
0028 ; return statuevalue;
0028 .dbline -2
0028 L2:
0028 0E940000 xcall pop_gset1
002C .dbline 0 ; func end
002C 0895 ret
002E .dbsym r statuevalue 20 c
002E .dbend
002E .dbfunc e Write_ConfigureWord _Write_ConfigureWord fc
002E ; statuevalue -> R20
002E ; DataL -> y+4
002E ; DataH -> R22
002E ; Addr -> R20
.even
002E _Write_ConfigureWord::
002E 0E940000 xcall push_gset2
0032 622F mov R22,R18
0034 402F mov R20,R16
0036 .dbline -1
0036 .dbline 56
0036 ; }
0036 ;
0036 ; /*******************************************
0036 ; *函数功能:写配置字
0036 ; *输入参数:Addr:配置寄存器的地址;
0036 ; DataH:配置字的高字节;
0036 ; DataL:配置字的低字节;
0036 ; *输出参数:无
0036 ; *返 回 值:状态寄存器的值
0036 ; ********************************************/
0036 ; unsigned char Write_ConfigureWord(unsigned char Addr,unsigned char DataH,unsigned char DataL)
0036 ; {
0036 .dbline 60
0036 ; unsigned char statuevalue;
0036 ;
0036 ; // enable_spi(); //使能SPI口 以具体情况而定使能/禁止SPI口放在何处
0036 ; statuevalue=SpiWrite(Addr); //发送配置寄存器的地址,同时返回当前状态寄存器的值
0036 042F mov R16,R20
0038 0E940000 xcall _SpiWrite
003C 402F mov R20,R16
003E .dbline 61
003E ; SpiWrite(DataH); //发送配置字的高字节
003E 062F mov R16,R22
0040 0E940000 xcall _SpiWrite
0044 .dbline 62
0044 ; SpiWrite(DataL); //发送配置字的低字节
0044 0C81 ldd R16,y+4
0046 0E940000 xcall _SpiWrite
004A .dbline 65
004A ; // disable_spi(); //禁止SPI口
004A ;
004A ; return statuevalue;
004A 042F mov R16,R20
004C .dbline -2
004C L3:
004C 0E940000 xcall pop_gset2
0050 .dbline 0 ; func end
0050 0895 ret
0052 .dbsym r statuevalue 20 c
0052 .dbsym l DataL 4 c
0052 .dbsym r DataH 22 c
0052 .dbsym r Addr 20 c
0052 .dbend
0052 .dbfunc e Read_ConfigureWord _Read_ConfigureWord fc
0052 ; statuevalue -> R20
0052 ; DataL -> y+4
0052 ; DataH -> R22,R23
0052 ; Addr -> R20
.even
0052 _Read_ConfigureWord::
0052 0E940000 xcall push_gset2
0056 B901 movw R22,R18
0058 402F mov R20,R16
005A .dbline -1
005A .dbline 76
005A ; }
005A ;
005A ; /*******************************************
005A ; *函数功能:读配置字
005A ; *输入参数:Addr:配置寄存器的地址;
005A ; *输出参数:DataH:配置字的高字节;
005A ; DataL:配置字的低字节;
005A ; *返 回 值:状态寄存器的值
005A ; ********************************************/
005A ; unsigned char Read_ConfigureWord(unsigned char Addr,unsigned char *DataH,unsigned char *DataL)
005A ; {
005A .dbline 79
005A ; unsigned char statuevalue;
005A ;
005A ; Addr|=0x40; //读标志位为1
005A 4064 ori R20,64
005C .dbline 80
005C ; enable_spi(); //使能SPI口 以具体情况而定使能/禁止SPI口放在何处
005C 0E940000 xcall _enable_spi
0060 .dbline 81
0060 ; statuevalue=SpiWrite(Addr); //发送配置寄存器的地址,同时返回当前状态寄存器的值
0060 042F mov R16,R20
0062 0E940000 xcall _SpiWrite
0066 402F mov R20,R16
0068 .dbline 82
0068 ; *DataH=SpiWrite(0xff); //读配置字的高字节
0068 0FEF ldi R16,255
006A 0E940000 xcall _SpiWrite
006E FB01 movw R30,R22
0070 0083 std z+0,R16
0072 .dbline 83
0072 ; *DataL=SpiWrite(0xff); //读配置字的低字节
0072 0FEF ldi R16,255
0074 0E940000 xcall _SpiWrite
0078 202E mov R2,R16
007A EC81 ldd R30,y+4
007C FD81 ldd R31,y+5
007E 2082 std z+0,R2
0080 .dbline 84
0080 ; disable_spi(); //禁止SPI口
0080 0E940000 xcall _disable_spi
0084 .dbline 86
0084 ;
0084 ; return statuevalue;
0084 042F mov R16,R20
0086 .dbline -2
0086 L4:
0086 0E940000 xcall pop_gset2
008A .dbline 0 ; func end
008A 0895 ret
008C .dbsym r statuevalue 20 c
008C .dbsym l DataL 4 pc
008C .dbsym r DataH 22 pc
008C .dbsym r Addr 20 c
008C .dbend
008C .dbfunc e Read_RXFIFO _Read_RXFIFO fc
008C ; Addr -> R20
008C ; statuevalue -> R20
008C ; i -> R22
008C ; p_Data -> R10,R11
008C ; Data_Num -> R12
.even
008C _Read_RXFIFO::
008C 0E940000 xcall push_gset4
0090 5901 movw R10,R18
0092 C02E mov R12,R16
0094 .dbline -1
0094 .dbline 96
0094 ; }
0094 ;
0094 ; /*******************************************
0094 ; *函数功能:读RXFIFO
0094 ; *输入参数:Data_Num:欲读取的字节个数
0094 ; *输出参数:p_Data:存储数据的缓存首地址;
0094 ; *返 回 值:状态寄存器的值
0094 ; ********************************************/
0094 ; unsigned char Read_RXFIFO(unsigned char Data_Num,unsigned char *p_Data)
0094 ; {
0094 .dbline 99
0094 ; unsigned char statuevalue,Addr,i;
0094 ;
0094 ; Addr=RXFIFO|0x40; //读标志位为1
0094 4FE7 ldi R20,127
0096 .dbline 100
0096 ; enable_spi(); //使能SPI口
0096 0E940000 xcall _enable_spi
009A .dbline 101
009A ; statuevalue=SpiWrite(Addr);
009A 042F mov R16,R20
009C 0E940000 xcall _SpiWrite
00A0 402F mov R20,R16
00A2 .dbline 103
00A2 ;
00A2 ; for(i=0;i<Data_Num;i++)
00A2 6627 clr R22
00A4 09C0 xjmp L9
00A6 L6:
00A6 .dbline 104
00A6 .dbline 105
00A6 0FEF ldi R16,255
00A8 0E940000 xcall _SpiWrite
00AC E62F mov R30,R22
00AE FF27 clr R31
00B0 EA0D add R30,R10
00B2 FB1D adc R31,R11
00B4 0083 std z+0,R16
00B6 .dbline 106
00B6 L7:
00B6 .dbline 103
00B6 6395 inc R22
00B8 L9:
00B8 .dbline 103
00B8 6C15 cp R22,R12
00BA A8F3 brlo L6
00BC .dbline 108
00BC ; {
00BC ; *(p_Data+i)=SpiWrite(0xff);
00BC ; }
00BC ;
00BC ; disable_spi(); //禁止SPI口
00BC 0E940000 xcall _disable_spi
00C0 .dbline 110
00C0 ;
00C0 ; return statuevalue;
00C0 042F mov R16,R20
00C2 .dbline -2
00C2 L5:
00C2 0E940000 xcall pop_gset4
00C6 .dbline 0 ; func end
00C6 0895 ret
00C8 .dbsym r Addr 20 c
00C8 .dbsym r statuevalue 20 c
00C8 .dbsym r i 22 c
00C8 .dbsym r p_Data 10 pc
00C8 .dbsym r Data_Num 12 c
00C8 .dbend
00C8 .dbfunc e Read_RXFIFO_Byte _Read_RXFIFO_Byte fc
00C8 ; Addr -> R20
00C8 ; readvalue -> R20
.even
00C8 _Read_RXFIFO_Byte::
00C8 0E940000 xcall push_gset1
00CC .dbline -1
00CC .dbline 120
00CC ; }
00CC ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -