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

📄 avrcc1100.lst

📁 主要是通过AMEGAL88 来控制cc1100
💻 LST
📖 第 1 页 / 共 3 页
字号:
    022A 1784      CP	R24,R20
    022B F020      BCS	0x0230
(0059)      	spiWriteReg(CC1100_PKTLEN,pktLength);
    022C 2F24      MOV	R18,R20
    022D E006      LDI	R16,6
    022E DE9F      RCALL	_spiWriteReg
    022F C002      RJMP	0x0232
(0060)      	
(0061)      else
(0062)     	return FALSE;
    0230 2700      CLR	R16
    0231 C001      RJMP	0x0233
(0063)     	
(0064)      //ret= NO_ERRO;
(0065)      return TRUE;
    0232 E001      LDI	R16,1
    0233 D0D5      RCALL	pop_gset1
    0234 9508      RET
_setSendType:
  regVal               --> R20
  sendType             --> R22
    0235 D0CE      RCALL	push_gset2
    0236 2F60      MOV	R22,R16
(0066)   }	 
(0067)   
(0068)   // 设置发送方式
(0069)   BOOL setSendType(SendType sendType)
(0070)   {
(0071)   	BYTE regVal;
(0072)   	//ErroState ret;
(0073)   	regVal = spiReadReg(CC1100_PKTCTRL1);
    0237 E007      LDI	R16,7
    0238 DE3D      RCALL	_spiReadReg
    0239 2F40      MOV	R20,R16
(0074)   	
(0075)   	if(sendType == NO_ADDRESS)
    023A 2366      TST	R22
    023B F419      BNE	0x023F
(0076)   		{
(0077)   			regVal |= 0x03;
    023C 6043      ORI	R20,3
(0078) 			regVal &= 0xFC;
    023D 7F4C      ANDI	R20,0xFC
(0079)   		}
    023E C00C      RJMP	0x024B
(0080)   		
(0081)     else if(sendType == UNICAST)
    023F 3061      CPI	R22,1
    0240 F419      BNE	0x0244
(0082)     	{
(0083)     		regVal |= 0x03;
    0241 6043      ORI	R20,3
(0084) 			regVal &= 0xFD;
    0242 7F4D      ANDI	R20,0xFD
(0085)     	}
    0243 C007      RJMP	0x024B
(0086)     	
(0087)     else if(sendType == BROADCAST)
    0244 3062      CPI	R22,2
    0245 F419      BNE	0x0249
(0088)     	{
(0089)     		regVal |= 0x03;
    0246 6043      ORI	R20,3
(0090) 			regVal &= 0xFE;
    0247 7F4E      ANDI	R20,0xFE
(0091)     	}
    0248 C002      RJMP	0x024B
(0092)     	
(0093)     else
(0094)     	//ret = NOT_MATCH;
(0095)     	return FALSE;
    0249 2700      CLR	R16
    024A C004      RJMP	0x024F
(0096)     	
(0097)     spiWriteReg(CC1100_PKTCTRL1,regVal);
    024B 2F24      MOV	R18,R20
    024C E007      LDI	R16,7
    024D DE80      RCALL	_spiWriteReg
(0098)    // ret = NO_ERRO;
(0099)     return TRUE;
    024E E001      LDI	R16,1
    024F D0AA      RCALL	pop_gset2
    0250 9508      RET
_setAddress:
  addr                 --> R20
    0251 D0B4      RCALL	push_gset1
    0252 2F40      MOV	R20,R16
(0100)   }
(0101)   
(0102)   // 设置CC1100的地址 
(0103)   BOOL setAddress(BYTE addr)
(0104)   {
(0105)   	//ErroState ret;
(0106)      if(addr >=0 && addr <= 255)
    0253 3040      CPI	R20,0
    0254 F038      BCS	0x025C
    0255 EF8F      LDI	R24,0xFF
    0256 1784      CP	R24,R20
    0257 F020      BCS	0x025C
(0107)      	spiWriteReg(CC1100_ADDR,addr);
    0258 2F24      MOV	R18,R20
    0259 E009      LDI	R16,0x9
    025A DE73      RCALL	_spiWriteReg
    025B C002      RJMP	0x025E
(0108)      	
(0109)      else
(0110)     	//ret = NOT_MATCH;
(0111)     	return FALSE;
    025C 2700      CLR	R16
    025D C001      RJMP	0x025F
(0112)     // ret= NO_ERRO;
(0113)      return TRUE;
    025E E001      LDI	R16,1
    025F D0A9      RCALL	pop_gset1
    0260 9508      RET
(0114)   }	
(0115)   
(0116)   // 系统初始化相关函数
(0117)   // setup the interupt INT0 for GDO2
(0118) void GDO2Int()
(0119) {
(0120)   SREG |= (1<<GIE);
_GDO2Int:
    0261 9478      BSET	7
(0121)   
(0122)   EICRA |= (1<<ISC00)|(1<<ISC01);
    0262 91800069  LDS	R24,0x69
    0264 6083      ORI	R24,3
    0265 93800069  STS	0x69,R24
(0123)   //EICRA &= ~(1<<ISC00);
(0124)   
(0125)   EIMSK |= (1<<INT0);
    0267 9AE8      SBI	0x1D,0
    0268 9508      RET
(0126) }
(0127) 
(0128) // 配置MCU的SPI口
(0129) void SpiInit()
(0130) {
(0131)   /* Set MOSI and SCK output, all others input */
(0132)   DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCLK)|(1<<DD_SS);
_SpiInit:
    0269 E28C      LDI	R24,0x2C
    026A B984      OUT	0x04,R24
(0133)   PORT_SPI &= ~(1<<DD_MOSI); 
    026B 982B      CBI	0x05,3
(0134)   /* Enable SPI, Master, set clock rate fck/16 */
(0135)   SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
    026C E581      LDI	R24,0x51
    026D BD8C      OUT	0x2C,R24
(0136)   
(0137)   SPCR |= (0<<CPHA)|(0<<CPOL);
    026E B42C      IN	R2,0x2C
    026F BC2C      OUT	0x2C,R2
(0138)   SPCR &= ~(BIT(DORD));
    0270 B58C      IN	R24,0x2C
    0271 7D8F      ANDI	R24,0xDF
    0272 BD8C      OUT	0x2C,R24
(0139)   
(0140)   DDRD &= ~BIT(DDD5);                                                                                                         
    0273 9855      CBI	0x0A,5
    0274 9508      RET
(0141)   
(0142) }
(0143) 
(0144) 
(0145) 
(0146) // MCU的USART(通用串口)初始化,可以配置波特率
(0147) void serialInit(UINT16 baudrate)
(0148) {
(0149) 	 // 设置串口模式为:8个数据位,1个停止位,无奇偶校验
(0150) 	 UCSR0C = (3<<UCSZ00);	
_serialInit:
  baudrate             --> R16
    0275 E086      LDI	R24,6
    0276 938000C2  STS	0xC2,R24
(0151) 	 // 配置波特率
(0152) 	 UBRR0H = (BYTE)(baudrate>>8);
    0278 0118      MOVW	R2,R16
    0279 2C23      MOV	R2,R3
    027A 2433      CLR	R3
    027B 922000C5  STS	0xC5,R2
(0153) 	 UBRR0L = (BYTE)baudrate;
    027D 930000C4  STS	0xC4,R16
(0154) 	 
(0155) 	 // 打开串口发送和接收使能
(0156) 	 UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
    027F 918000C1  LDS	R24,0xC1
    0281 6188      ORI	R24,0x18
    0282 938000C1  STS	0xC1,R24
(0157) 	 //打开接收中断
(0158) 	 USART_RECINT_ENABLE();
    0284 918000C1  LDS	R24,0xC1
    0286 6880      ORI	R24,0x80
    0287 938000C1  STS	0xC1,R24
    0289 9508      RET
FILE: H:\work\myWork\AVR-CC1100\main.c
(0001) /*******************************************************************************************************
(0002)  * Compiler:                   WINAVR                                                             
(0003)  * Target platform:          Atmega88 and Chipcon CC1100                                               
(0004)  * Author:                       陈思                                                                      
(0005)  *******************************************************************************************************
(0006)  *  2007-12-26 13:19:41                                                              
(0007)  ******************************************************************************************************/
(0008) 
(0009) #include "protocol.h"
(0010) 
(0011) #define FOSC  1000000
(0012) #define BAUDRATE  4800
(0013) #define BAUDREG   FOSC/16/BAUDRATE-1 
(0014) #define MAXSIZE 255
(0015) 
(0016) //#pragma interrupt_handler USART_INT:iv_USART0_RX
(0017) //#pragma interrupt_handler REC_PKT:iv_INT0
(0018) 
(0019)  // 表示串口状态的全局变量
(0020) USART_FLAG fUART;
(0021) ChipState fCC1100;
(0022) BYTE RecData[MAXSIZE];
(0023) BYTE RecLen = 0;
(0024) 
(0025)  // USART 接收到一个字节完成中断
(0026) void USART_INT(void)
(0027)  
(0028)  
(0029)  {
(0030)     BYTE recByte;
(0031) 	USART_RECINT_DISABLE();
_USART_INT:
  recByte              --> R16
    028A 918000C1  LDS	R24,0xC1
    028C 778F      ANDI	R24,0x7F
    028D 938000C1  STS	0xC1,R24
(0032) 	 
(0033)  	recByte = UDR0;
    028F 910000C6  LDS	R16,0xC6
(0034)  	
(0035)  	if(recByte == 0xAA)
    0291 3A0A      CPI	R16,0xAA
    0292 F441      BNE	0x029B
(0036) 	{
(0037)  		if(fUART == USART_IDLE)
    0293 90200226  LDS	R2,fUART
    0295 2022      TST	R2
    0296 F4F9      BNE	0x02B6
(0038) 		  fUART = USART_RECIEVE;
    0297 E082      LDI	R24,2
    0298 93800226  STS	fUART,R24
(0039) 	}
    029A C01B      RJMP	0x02B6
(0040) 	else if(recByte == 0x55)
    029B 3505      CPI	R16,0x55
    029C F441      BNE	0x02A5
(0041) 	{
(0042) 	    if(fUART == USART_RECIEVE)
    029D 91800226  LDS	R24,fUART
    029F 3082      CPI	R24,2
    02A0 F4A9      BNE	0x02B6
(0043) 		  fUART = USART_RECIEVE_FINISH;
    02A1 E083      LDI	R24,3
    02A2 93800226  STS	fUART,R24
(0044) 	}
    02A4 C011      RJMP	0x02B6
(0045) 	else
(0046) 	{
(0047) 	    if(fUART == USART_RECIEVE)
    02A5 91800226  LDS	R24,fUART
    02A7 3082      CPI	R24,2
    02A8 F469      BNE	0x02B6
(0048) 		{
(0049) 		  RecData[RecLen+1] = recByte;
    02A9 E287      LDI	R24,0x27
    02AA E091      LDI	R25,1
    02AB 91E00125  LDS	R30,RecLen
    02AD 27FF      CLR	R31
    02AE 0FE8      ADD	R30,R24
    02AF 1FF9      ADC	R31,R25
    02B0 8300      STD	Z+0,R16
(0050) 		  RecLen ++;
    02B1 91800125  LDS	R24,RecLen
    02B3 5F8F      SUBI	R24,0xFF
    02B4 93800125  STS	RecLen,R24
(0051) 		}  
(0052) 	}
(0053) 	
(0054) 	USART_RECINT_ENABLE();			
    02B6 918000C1  LDS	R24,0xC1
    02B8 6880      ORI	R24,0x80
    02B9 938000C1  STS	0xC1,R24
    02BB 9508      RET
(0055)  } 
(0056) 
(0057) // 检测到数据包的到来,用INT0通知MCU
(0058) void REC_PKT(void)
(0059) {
(0060)   INT0_DISABLE();   // 关中断
_REC_PKT:
    02BC 98E8      CBI	0x1D,0
(0061)   
(0062)  // if(fCC1100 == SLEEP)
(0063)     spiReceivePacket(RecData,MAXSIZE);
    02BD EF2F      LDI	R18,0xFF
    02BE E206      LDI	R16,0x26
    02BF E011      LDI	R17,1
    02C0 DED3      RCALL	_spiReceivePacket
(0064)   
(0065)   EIFR |= (1<<INTF0); // 清中断标志位,并开中断
    02C1 9AE0      SBI	0x1C,0
(0066)   INT0_ENABLE();
    02C2 9AE8      SBI	0x1D,0
    02C3 9508      RET
_main:
    02C4 9722      SBIW	R28,2
(0067) }
(0068)  		
(0069) void main()
(0070) {
(0071)   // 系统初始化部分
(0072)   CLI();
    02C5 94F8      BCLR	7
(0073)   WDTCSR = 0x00;
    02C6 2422      CLR	R2
    02C7 92200060  STS	0x60,R2
(0074)   fUART = USART_IDLE;
    02C9 92200226  STS	fUART,R2
(0075)   
(0076)   SpiInit();
    02CB DF9D      RCALL	_SpiInit
(0077)   cc1100Init();
    02CC DDA6      RCALL	_cc1100Init
(0078)   //GDO2Int();
(0079)   //GDO2_INT0();
(0080)   //serialInit(12);
(0081)   NOP();
    02CD 0000      NOP
(0082)   SEI();
    02CE 9478      BSET	7
(0083)   
(0084)   memset(RecData,0,MAXSIZE);
    02CF EF8F      LDI	R24,0xFF
    02D0 E090      LDI	R25,0
    02D1 8399      STD	Y+1,R25
    02D2 8388      STD	Y+0,R24
    02D3 2722      CLR	R18
    02D4 2733      CLR	R19
    02D5 E206      LDI	R16,0x26
    02D6 E011      LDI	R17,1
    02D7 D017      RCALL	_memset
(0085)   
(0086)   setPktType(DEFINED_LENGTH);
    02D8 E001      LDI	R16,1
    02D9 DF33      RCALL	_setPktType
(0087)   setAddress(0x00);
    02DA 2700      CLR	R16
    02DB DF75      RCALL	_setAddress
(0088)   setPktLen(0xFF);
    02DC EF0F      LDI	R16,0xFF
    02DD DF46      RCALL	_setPktLen
(0089)   setSendType(NO_ADDRESS);
    02DE 2700      CLR	R16
    02DF DF55      RCALL	_setSendType
(0090)   
(0091)   spiWriteReg(CC1100_IOCFG0,0x06);
    02E0 E026      LDI	R18,6
    02E1 E002      LDI	R16,2
    02E2 DDEB      RCALL	_spiWriteReg
    02E3 C007      RJMP	0x02EB
(0092)   
(0093)   //initWorMode();
(0094)   
(0095)  /*
(0096)   while(1)
(0097)   {
(0098)     if(fUART == USART_RECIEVE_FINISH)	
(0099) 	{
(0100) 	 CLI();
(0101) 	 RecData[0] = RecLen;
(0102) 	 spiSendPacket(RecData,RecLen+1);
(0103) 	 fUART = USART_IDLE;
(0104) 	 
(0105) 	 memset(RecData,0,RecLen+1);
(0106) 	 RecLen = 0;
(0107) 	 
(0108) 	 SEI();
(0109) 	}
(0110)    }  
(0111)   
(0112)  */
(0113)   while(1)
(0114)   {
(0115)     if(spiReceivePacket(RecData,MAXSIZE))
    02E4 EF2F      LDI	R18,0xFF
    02E5 E206      LDI	R16,0x26
    02E6 E011      LDI	R17,1
    02E7 DEAC      RCALL	_spiReceivePacket
    02E8 2300      TST	R16
    02E9 F009      BEQ	0x02EB
(0116) 	   break;
    02EA C001      RJMP	0x02EC
    02EB CFF8      RJMP	0x02E4
(0117)   }
(0118)  
(0119) 
(0120)   
(0121)   while(1);
FILE: <library>
    02EC CFFF      RJMP	0x02EC
    02ED 9622      ADIW	R28,2
    02EE 9508      RET
_memset:
    02EF 8188      LDD	R24,Y+0
    02F0 8199      LDD	R25,Y+1
    02F1 3080      CPI	R24,0
    02F2 0789      CPC	R24,R25
    02F3 F029      BEQ	0x02F9
    02F4 2FE0      MOV	R30,R16
    02F5 2FF1      MOV	R31,R17
    02F6 9321      ST	R18,Z+
    02F7 9701      SBIW	R24,1
    02F8 F7E9      BNE	0x02F6
    02F9 9508      RET
pop_gset2:
    02FA E0E2      LDI	R30,2
    02FB C00E      RJMP	pop
pop_gset3:
    02FC E0E4      LDI	R30,4
    02FD C00C      RJMP	pop
push_gset5:
    02FE 92FA      ST	R15,-Y
    02FF 92EA      ST	R14,-Y
push_gset4:
    0300 92DA      ST	R13,-Y
    0301 92CA      ST	R12,-Y
push_gset3:
    0302 92BA      ST	R11,-Y
    0303 92AA      ST	R10,-Y
push_gset2:
    0304 937A      ST	R23,-Y
    0305 936A      ST	R22,-Y
push_gset1:
    0306 935A      ST	R21,-Y
    0307 934A      ST	R20,-Y
    0308 9508      RET
pop_gset1:
    0309 E0E1      LDI	R30,1
pop:
    030A 9149      LD	R20,Y+
    030B 9159      LD	R21,Y+
    030C FDE0      SBRC	R30,0
    030D 9508      RET
    030E 9169      LD	R22,Y+
    030F 9179      LD	R23,Y+
    0310 FDE1      SBRC	R30,1
    0311 9508      RET
    0312 90A9      LD	R10,Y+
    0313 90B9      LD	R11,Y+
    0314 FDE2      SBRC	R30,2
    0315 9508      RET
    0316 90C9      LD	R12,Y+
    0317 90D9      LD	R13,Y+
    0318 FDE3      SBRC	R30,3
    0319 9508      RET
    031A 90E9      LD	R14,Y+
    031B 90F9      LD	R15,Y+
    031C 9508      RET

⌨️ 快捷键说明

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