📄 tx.lst
字号:
__start:
__text_start:
0047 EFCF LDI R28,0xFF
0048 E1D0 LDI R29,0x10
0049 BFCD OUT 0x3D,R28
004A BFDE OUT 0x3E,R29
004B 51C0 SUBI R28,0x10
004C 40D0 SBCI R29,0
004D EA0A LDI R16,0xAA
004E 8308 STD Y+0,R16
004F 2400 CLR R0
0050 E0E1 LDI R30,1
0051 E0F1 LDI R31,1
0052 E011 LDI R17,1
0053 37E1 CPI R30,0x71
0054 07F1 CPC R31,R17
0055 F011 BEQ 0x0058
0056 9201 ST R0,Z+
0057 CFFB RJMP 0x0053
0058 8300 STD Z+0,R16
0059 E8EC LDI R30,0x8C
005A E0F0 LDI R31,0
005B E0A0 LDI R26,0
005C E0B1 LDI R27,1
005D E010 LDI R17,0
005E 38ED CPI R30,0x8D
005F 07F1 CPC R31,R17
0060 F021 BEQ 0x0065
0061 95C8 LPM
0062 9631 ADIW R30,1
0063 920D ST R0,X+
0064 CFF9 RJMP 0x005E
0065 940E0228 CALL _main
_exit:
0067 CFFF RJMP _exit
_Write_Command:
statueval --> R20
command --> R20
0068 940E02B7 CALL push_gset1
006A 2F40 MOV R20,R16
FILE: C:\AVR\cc2420驱动程序\code\cc2420.c
(0001) #include "cc2420.h"
(0002) #include "spi.h"
(0003) #include "common.h"
(0004)
(0005) /*******************************************
(0006) *函数功能:写命令寄存器
(0007) *输入参数:命令字
(0008) *输出参数:无
(0009) *返 回 值:状态寄存器的值
(0010) ********************************************/
(0011) unsigned char Write_Command(unsigned char command)
(0012) {
(0013) unsigned char statueval;
(0014)
(0015) enable_spi(); //使能SPI口
006B 940E02A5 CALL _enable_spi
(0016) statueval=SpiWrite(command);
006D 2F04 MOV R16,R20
006E 940E029A CALL _SpiWrite
0070 2F40 MOV R20,R16
(0017) disable_spi(); //禁止SPI口
0071 940E02A7 CALL _disable_spi
(0018)
(0019) return statueval;
0073 2F04 MOV R16,R20
0074 940E02BA CALL pop_gset1
0076 9508 RET
_Read_Status:
statuevalue --> R20
0077 940E02B7 CALL push_gset1
(0020) }
(0021)
(0022) /*******************************************
(0023) *函数功能:读状态寄存器
(0024) *输入参数:无
(0025) *输出参数:无
(0026) *返 回 值:状态寄存器的值
(0027) ********************************************/
(0028) unsigned char Read_Status(void)
(0029) {
(0030) unsigned char statuevalue;
(0031) statuevalue=Write_Command(SNOP); //空操作命令,为了读取当前状态寄存器的值
0079 2700 CLR R16
007A DFED RCALL _Write_Command
007B 2F40 MOV R20,R16
(0032) return statuevalue;
007C 940E02BA CALL pop_gset1
007E 9508 RET
_Write_ConfigureWord:
statuevalue --> R20
DataL --> Y+4
DataH --> R22
Addr --> R20
007F 940E02B5 CALL push_gset2
0081 2F62 MOV R22,R18
0082 2F40 MOV R20,R16
(0033) }
(0034)
(0035) /*******************************************
(0036) *函数功能:写配置字
(0037) *输入参数:Addr:配置寄存器的地址;
(0038) DataH:配置字的高字节;
(0039) DataL:配置字的低字节;
(0040) *输出参数:无
(0041) *返 回 值:状态寄存器的值
(0042) ********************************************/
(0043) unsigned char Write_ConfigureWord(unsigned char Addr,unsigned char DataH,unsigned char DataL)
(0044) {
(0045) unsigned char statuevalue;
(0046)
(0047) // enable_spi(); //使能SPI口 以具体情况而定使能/禁止SPI口放在何处
(0048) statuevalue=SpiWrite(Addr); //发送配置寄存器的地址,同时返回当前状态寄存器的值
0083 2F04 MOV R16,R20
0084 940E029A CALL _SpiWrite
0086 2F40 MOV R20,R16
(0049) SpiWrite(DataH); //发送配置字的高字节
0087 2F06 MOV R16,R22
0088 940E029A CALL _SpiWrite
(0050) SpiWrite(DataL); //发送配置字的低字节
008A 810C LDD R16,Y+4
008B 940E029A CALL _SpiWrite
(0051) // disable_spi(); //禁止SPI口
(0052)
(0053) return statuevalue;
008D 2F04 MOV R16,R20
008E 940E02A9 CALL pop_gset2
0090 9508 RET
_Read_ConfigureWord:
statuevalue --> R20
DataL --> Y+4
DataH --> R22
Addr --> R20
0091 940E02B5 CALL push_gset2
0093 01B9 MOVW R22,R18
0094 2F40 MOV R20,R16
(0054) }
(0055)
(0056) /*******************************************
(0057) *函数功能:读配置字
(0058) *输入参数:Addr:配置寄存器的地址;
(0059) *输出参数:DataH:配置字的高字节;
(0060) DataL:配置字的低字节;
(0061) *返 回 值:状态寄存器的值
(0062) ********************************************/
(0063) unsigned char Read_ConfigureWord(unsigned char Addr,unsigned char *DataH,unsigned char *DataL)
(0064) {
(0065) unsigned char statuevalue;
(0066)
(0067) Addr|=0x40; //读标志位为1
0095 6440 ORI R20,0x40
(0068) enable_spi(); //使能SPI口 以具体情况而定使能/禁止SPI口放在何处
0096 940E02A5 CALL _enable_spi
(0069) statuevalue=SpiWrite(Addr); //发送配置寄存器的地址,同时返回当前状态寄存器的值
0098 2F04 MOV R16,R20
0099 940E029A CALL _SpiWrite
009B 2F40 MOV R20,R16
(0070) *DataH=SpiWrite(0xff); //读配置字的高字节
009C EF0F LDI R16,0xFF
009D 940E029A CALL _SpiWrite
009F 01FB MOVW R30,R22
00A0 8300 STD Z+0,R16
(0071) *DataL=SpiWrite(0xff); //读配置字的低字节
00A1 EF0F LDI R16,0xFF
00A2 940E029A CALL _SpiWrite
00A4 2E20 MOV R2,R16
00A5 81EC LDD R30,Y+4
00A6 81FD LDD R31,Y+5
00A7 8220 STD Z+0,R2
(0072) disable_spi(); //禁止SPI口
00A8 940E02A7 CALL _disable_spi
(0073)
(0074) return statuevalue;
00AA 2F04 MOV R16,R20
00AB 940E02A9 CALL pop_gset2
00AD 9508 RET
_Read_RXFIFO:
Addr --> R20
statuevalue --> R20
i --> R22
p_Data --> R10
Data_Num --> R12
00AE 940E02B1 CALL push_gset4
00B0 0159 MOVW R10,R18
00B1 2EC0 MOV R12,R16
(0075) }
(0076)
(0077) /*******************************************
(0078) *函数功能:读RXFIFO
(0079) *输入参数:Data_Num:欲读取的字节个数
(0080) *输出参数:p_Data:存储数据的缓存首地址;
(0081) *返 回 值:状态寄存器的值
(0082) ********************************************/
(0083) unsigned char Read_RXFIFO(unsigned char Data_Num,unsigned char *p_Data)
(0084) {
(0085) unsigned char statuevalue,Addr,i;
(0086)
(0087) Addr=RXFIFO|0x40; //读标志位为1
00B2 E74F LDI R20,0x7F
(0088) enable_spi(); //使能SPI口
00B3 940E02A5 CALL _enable_spi
(0089) statuevalue=SpiWrite(Addr);
00B5 2F04 MOV R16,R20
00B6 940E029A CALL _SpiWrite
00B8 2F40 MOV R20,R16
(0090)
(0091) for(i=0;i<Data_Num;i++)
00B9 2766 CLR R22
00BA C009 RJMP 0x00C4
(0092) {
(0093) *(p_Data+i)=SpiWrite(0xff);
00BB EF0F LDI R16,0xFF
00BC 940E029A CALL _SpiWrite
00BE 2FE6 MOV R30,R22
00BF 27FF CLR R31
00C0 0DEA ADD R30,R10
00C1 1DFB ADC R31,R11
00C2 8300 STD Z+0,R16
00C3 9563 INC R22
00C4 156C CP R22,R12
00C5 F3A8 BCS 0x00BB
(0094) }
(0095)
(0096) disable_spi(); //禁止SPI口
00C6 940E02A7 CALL _disable_spi
(0097)
(0098) return statuevalue;
00C8 2F04 MOV R16,R20
00C9 940E02AC CALL pop_gset4
00CB 9508 RET
_Read_RXFIFO_Byte:
Addr --> R20
readvalue --> R20
00CC 940E02B7 CALL push_gset1
(0099) }
(0100)
(0101) /*******************************************
(0102) *函数功能:读一字节RXFIFO
(0103) *输入参数:无
(0104) *输出参数:无
(0105) *返 回 值:读取的数据
(0106) ********************************************/
(0107) unsigned char Read_RXFIFO_Byte(void)
(0108) {
(0109) unsigned char readvalue,Addr;
(0110)
(0111) Addr=RXFIFO|0x40; //读标志位为1
00CE E74F LDI R20,0x7F
(0112) enable_spi(); //使能SPI口
00CF 940E02A5 CALL _enable_spi
(0113) SpiWrite(Addr);
00D1 2F04 MOV R16,R20
00D2 940E029A CALL _SpiWrite
(0114) readvalue=SpiWrite(0xff);
00D4 EF0F LDI R16,0xFF
00D5 940E029A CALL _SpiWrite
00D7 2F40 MOV R20,R16
(0115) disable_spi(); //禁止SPI口
00D8 940E02A7 CALL _disable_spi
(0116) return readvalue;
00DA 2F04 MOV R16,R20
00DB 940E02BA CALL pop_gset1
00DD 9508 RET
_Write_TXFIFO:
statuevalue --> R20
i --> R22
p_Data --> R10
Data_Num --> R12
00DE 940E02B1 CALL push_gset4
00E0 0159 MOVW R10,R18
00E1 2EC0 MOV R12,R16
(0117) }
(0118)
(0119) /*******************************************
(0120) *函数功能:写TXFIFO
(0121) *输入参数:Data_Num:欲写入的字节个数
(0122) *输出参数:p_Data:存储数据的缓存首地址;
(0123) *返 回 值:状态寄存器的值
(0124) ********************************************/
(0125) unsigned char Write_TXFIFO(unsigned char Data_Num,unsigned char *p_Data)
(0126) {
(0127) unsigned char statuevalue,i;
(0128)
(0129) enable_spi(); //使能SPI口
00E2 940E02A5 CALL _enable_spi
(0130) SpiWrite(TXFIFO);
00E4 E30E LDI R16,0x3E
00E5 940E029A CALL _SpiWrite
(0131)
(0132) for (i=0;i<Data_Num;i++)
00E7 2766 CLR R22
00E8 C00F RJMP 0x00F8
(0133) {
(0134) statuevalue=SpiWrite(*(p_Data+i));
00E9 2FE6 MOV R30,R22
00EA 27FF CLR R31
00EB 0DEA ADD R30,R10
00EC 1DFB ADC R31,R11
00ED 8100 LDD R16,Z+0
00EE 940E029A CALL _SpiWrite
00F0 2F40 MOV R20,R16
(0135)
(0136) if ((statuevalue&(1<<TX_UNDERFLOE))!=0x00) //发生下溢
00F1 FF05 SBRS R16,5
00F2 C004 RJMP 0x00F7
(0137) {
(0138) Write_Command(SFLUSHTX);
00F3 E009 LDI R16,0x9
00F4 DF73 RCALL _Write_Command
(0139) enable_spi(); //重新使能SPI口
00F5 940E02A5 CALL _enable_spi
00F7 9563 INC R22
00F8 156C CP R22,R12
00F9 F378 BCS 0x00E9
(0140) }
(0141) }
(0142)
(0143) disable_spi(); //禁止SPI口
00FA 940E02A7 CALL _disable_spi
(0144) return statuevalue;
00FC 2F04 MOV R16,R20
00FD 940E02AC CALL pop_gset4
00FF 9508 RET
_Write_TXFIFO_Byte:
statuevalue --> R20
p_Data --> R20
0100 940E02B7 CALL push_gset1
0102 2F40 MOV R20,R16
(0145) }
(0146)
(0147) /*******************************************
(0148) *函数功能:写一字节TXFIFO
(0149) *输入参数:p_Data:要写入的数据
(0150) *输出参数:无
(0151) *返 回 值:状态寄存器的值
(0152) ********************************************/
(0153) unsigned char Write_TXFIFO_Byte(unsigned char p_Data)
(0154) {
(0155) unsigned char statuevalue;
(0156)
(0157) enable_spi(); //使能SPI口
0103 940E02A5 CALL _enable_spi
(0158) SpiWrite(TXFIFO);
0105 E30E LDI R16,0x3E
0106 940E029A CALL _SpiWrite
(0159) statuevalue=SpiWrite(p_Data);
0108 2F04 MOV R16,R20
0109 940E029A CALL _SpiWrite
010B 2F40 MOV R20,R16
(0160) disable_spi(); //禁止SPI口
010C 940E02A7 CALL _disable_spi
(0161) return statuevalue;
010E 2F04 MOV R16,R20
010F 940E02BA CALL pop_gset1
0111 9508 RET
_Write_RAM:
statuevalue --> R20
i --> R22
p_Data --> R10
Data_Num --> R12
AddrL --> R22
AddrH --> R20
0112 940E02B1 CALL push_gset4
0114 2F62 MOV R22,R18
0115 2F40 MOV R20,R16
0116 84C8 LDD R12,Y+8
0117 84AA LDD R10,Y+10
0118 84BB LDD R11,Y+11
(0162) }
(0163)
(0164) /*******************************************
(0165) *函数功能:写RAM
(0166) *输入参数:p_Data:存储数据的缓存首地址;
(0167) Data_Num:要写入的字节数
(0168) AddrH:在选定的RAM存储块中确定RAM地址
(0169) AddrL:选择RAM存储块
(0170) *输出参数:无
(0171) *返 回 值:状态寄存器的值
(0172) ********************************************/
(0173) unsigned char Write_RAM(unsigned char AddrH,unsigned char AddrL,unsigned char Data_Num,unsigned char *p_Data)
(0174) {
(0175) unsigned char statuevalue,i;
(0176) AddrH|=0X80; //访问RAM位置1
0119 6840 ORI R20,0x80
(0177) AddrL<<=6;
011A 0F66 LSL R22
011B 0F66 LSL R22
011C 0F66 LSL R22
011D 0F66 LSL R22
011E 0F66 LSL R22
011F 0F66 LSL R22
(0178) AddrL&=0XDF; //读写操作位置0,表示写操作
0120 7D6F ANDI R22,0xDF
(0179)
(0180) enable_spi(); //使能SPI口
0121 940E02A5 CALL _enable_spi
(0181) statuevalue=SpiWrite(AddrH);
0123 2F04 MOV R16,R20
0124 940E029A CALL _SpiWrite
0126 2F40 MOV R20,R16
(0182) SpiWrite(AddrL);
0127 2F06 MOV R16,R22
0128 940E029A CALL _SpiWrite
(0183)
(0184) for (i=0;i<Data_Num;i++)
012A 2766 CLR R22
012B C008 RJMP 0x0134
(0185) {
(0186) SpiWrite(*(p_Data+i));
012C 2FE6 MOV R30,R22
012D 27FF CLR R31
012E 0DEA ADD R30,R10
012F 1DFB ADC R31,R11
0130 8100 LDD R16,Z+0
0131 940E029A CALL _SpiWrite
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -