📄 receive.lst
字号:
size --> R22
txBuffer --> R20
01D0 D0A3 RCALL push_gset2
01D1 2F62 MOV R22,R18
01D2 01A8 MOVW R20,R16
01D3 9721 SBIW R28,1
(0399) }
(0400)
(0401)
(0402)
(0403)
(0404)
(0405)
(0406) //*****************************************************************************************
(0407) //函数名:
(0408) //输入:
(0409) //输出:
(0410) //功能描述:CC1100发送主叫数据
(0411) //*****************************************************************************************
(0412) void halRfSendPacket(INT8U *txBuffer, INT8U size)
(0413) {
(0414)
(0415) halSpiWriteReg(CCxxx0_TXFIFO, size+2);
01D4 2F26 MOV R18,R22
01D5 5F2E SUBI R18,0xFE
01D6 E30F LDI R16,0x3F
01D7 DEE3 RCALL _halSpiWriteReg
(0416) halSpiWriteReg(CCxxx0_TXFIFO, ID_Opponent);
01D8 EF20 LDI R18,0xF0
01D9 E30F LDI R16,0x3F
01DA DEE0 RCALL _halSpiWriteReg
(0417) halSpiWriteReg(CCxxx0_TXFIFO, ID_Oneself);
01DB EF20 LDI R18,0xF0
01DC E30F LDI R16,0x3F
01DD DEDD RCALL _halSpiWriteReg
(0418)
(0419) halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
01DE 8368 STD Y+0,R22
01DF 019A MOVW R18,R20
01E0 E30F LDI R16,0x3F
01E1 DEE6 RCALL _halSpiWriteBurstReg
(0420)
(0421)
(0422) halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
01E2 E305 LDI R16,0x35
01E3 DEFC RCALL _halSpiStrobe
(0423)
(0424) // Wait for GDO0 to be set - > sync transmitted
(0425) while (!GDO0);
01E4 B220 IN R2,0x10
01E5 2022 TST R2
01E6 F419 BNE 0x01EA
01E7 E041 LDI R20,1
01E8 E050 LDI R21,0
01E9 C002 RJMP 0x01EC
01EA 2744 CLR R20
01EB 2755 CLR R21
01EC FD42 SBRC R20,2
01ED CFF6 RJMP 0x01E4
(0426)
(0427) // Wait for GDO0 to be set - > sync transmitted
(0428) while (GDO0);
01EE 9982 SBIC 0x10,2
01EF CFFE RJMP 0x01EE
(0429)
(0430) halSpiStrobe(CCxxx0_SFTX); //清洗发送缓冲区
01F0 E30B LDI R16,0x3B
01F1 DEEE RCALL _halSpiStrobe
01F2 9621 ADIW R28,1
01F3 D076 RCALL pop_gset2
01F4 9508 RET
_main:
01F5 9721 SBIW R28,1
FILE: E:\学习基地\IMPORT~1\CC1100-RF-Design\M8_RF_CC1100开发系统光盘\驱动程序\M8_cc1100_receive\main.c
(0001) /*C**************************************************************************
(0002) * NAME: main.c
(0003) *----------------------------------------------------------------------------
(0004) * Copyright (c) 2006 endylu
(0005) *----------------------------------------------------------------------------
(0006) * RELEASE: M8-cc1100
(0007) * REVISION: 1.0
(0008) *----------------------------------------------------------------------------
(0009) * PURPOSE:
(0010) * This is the demonstration software for MAGE8L
(0011) *****************************************************************************/
(0012)
(0013) /*_____ I N C L U D E S ____________________________________________________*/
(0014)
(0015) #include <iom8v.h>
(0016) #include <macros.h>
(0017) #include "main.h"
(0018)
(0019)
(0020) /*_____ M A C R O S ________________________________________________________*/
(0021)
(0022)
(0023) /*_____ D E F I N I T I O N ________________________________________________*/
(0024)
(0025) INT8U PaTabel[8] = {0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0};
(0026) INT8U arrRx[50];
(0027)
(0028) INT8U length;
(0029) INT8U flag_receive;
(0030) /*_____ D E C L A R A T I O N ______________________________________________*/
(0031)
(0032)
(0033) /*F**************************************************************************
(0034) * NAME: main
(0035) *----------------------------------------------------------------------------
(0036) * PARAMS:
(0037) *
(0038) * return:
(0039) *----------------------------------------------------------------------------
(0040) * PURPOSE:
(0041) * Main user routine
(0042) *----------------------------------------------------------------------------
(0043) * EXAMPLE:
(0044) *----------------------------------------------------------------------------
(0045) * NOTE:
(0046) *----------------------------------------------------------------------------
(0047) * REQUIREMENTS:
(0048) *****************************************************************************/
(0049) void main (void)
(0050) {
(0051) PORTD|=0X04; //GDO0上拉
01F6 9A92 SBI 0x12,2
(0052)
(0053) DDRB|=1<<LED2;
01F7 9AB9 SBI 0x17,1
(0054) PORTB|=1<<LED2;
01F8 9AC1 SBI 0x18,1
(0055)
(0056) CpuInit();
01F9 DE89 RCALL _CpuInit
(0057) POWER_UP_RESET_CC1100();
01FA DEB2 RCALL _POWER_UP_RESET_CC1100
(0058) halRfWriteRfSettings();
01FB DF24 RCALL _halRfWriteRfSettings
(0059) halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
01FC E088 LDI R24,0x8
01FD 8388 STD Y+0,R24
01FE E620 LDI R18,0x60
01FF E030 LDI R19,0
0200 E30E LDI R16,0x3E
0201 DEC6 RCALL _halSpiWriteBurstReg
(0060) PORTB&=~(1<<LED2);
0202 98C1 CBI 0x18,1
(0061)
(0062) INT0_Init();
0203 D006 RCALL _INT0_Init
(0063) asm("sei"); //开全局中断
0204 9478 BSET 7
(0064)
(0065) halSpiStrobe(CCxxx0_SRX);
0205 E304 LDI R16,0x34
0206 DED9 RCALL _halSpiStrobe
(0066) while(1);
0207 CFFF RJMP 0x0207
0208 9621 ADIW R28,1
0209 9508 RET
(0067) }
(0068)
(0069) /*****************************************************************************************
(0070) //函数名:void INT0_Init(void)
(0071) //输入:无
(0072) //输出:无
(0073) //功能描述:外部中断0 初始化程序
(0074) /*****************************************************************************************/
(0075) void INT0_Init(void)
(0076) {
(0077) MCUCR|=0x02; //falling_adge
_INT0_Init:
020A B785 IN R24,0x35
020B 6082 ORI R24,2
020C BF85 OUT 0x35,R24
(0078) GIFR=0X40;
020D E480 LDI R24,0x40
020E BF8A OUT 0x3A,R24
(0079) INT0_enable();
020F B78B IN R24,0x3B
0210 6480 ORI R24,0x40
0211 BF8B OUT 0x3B,R24
0212 9508 RET
_int0:
status --> Y+1
i --> R20
0213 D079 RCALL push_lset
0214 D061 RCALL push_gset1
0215 9723 SBIW R28,3
(0080) }
(0081)
(0082)
(0083) //*****************************************************************************************
(0084) //函数名:
(0085) //输入:
(0086) //输出:
(0087) //功能描述:中断接收
(0088) //*****************************************************************************************
(0089) #pragma interrupt_handler int0:2
(0090) void int0(void)
(0091) {
(0092) uint8 i;
(0093) uint8 status[2];
(0094)
(0095) flag_receive=RECEIVE_error;
0216 E082 LDI R24,2
0217 93800068 STS flag_receive,R24
(0096) if(halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)//如果接的字节数不为0
0219 E30B LDI R16,0x3B
021A DEF7 RCALL _halSpiReadStatus
021B 2F80 MOV R24,R16
021C 778F ANDI R24,0x7F
021D F161 BEQ 0x024A
(0097) {
(0098) length = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
021E E30F LDI R16,0x3F
021F DECA RCALL _halSpiReadReg
0220 93000069 STS length,R16
(0099) halSpiReadBurstReg(CCxxx0_RXFIFO, arrRx, length); //读出所有接收到的数据
0222 2E20 MOV R2,R16
0223 8228 STD Y+0,R2
0224 E62A LDI R18,0x6A
0225 E030 LDI R19,0
0226 E30F LDI R16,0x3F
0227 DED1 RCALL _halSpiReadBurstReg
(0100) halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); //读出CRC校验位
0228 E082 LDI R24,2
0229 8388 STD Y+0,R24
022A 019E MOVW R18,R28
022B 5F2F SUBI R18,0xFF
022C 4F3F SBCI R19,0xFF
022D E30F LDI R16,0x3F
022E DECA RCALL _halSpiReadBurstReg
(0101)
(0102) if(status[1] & CRC_OK)
022F 802A LDD R2,Y+2
0230 FE27 SBRS R2,7
0231 C018 RJMP 0x024A
(0103) {
(0104) flag_receive=RECEIVE_OK;
0232 E081 LDI R24,1
0233 93800068 STS flag_receive,R24
(0105)
(0106) PORTB|=1<<LED2;
0235 9AC1 SBI 0x18,1
(0107) for(i=2;i<length;i++)
0236 E042 LDI R20,2
0237 C00A RJMP 0x0242
(0108) {
(0109) putchar(arrRx[i]);
0238 E68A LDI R24,0x6A
0239 E090 LDI R25,0
023A 2FE4 MOV R30,R20
023B 27FF CLR R31
023C 0FE8 ADD R30,R24
023D 1FF9 ADC R31,R25
023E 8100 LDD R16,Z+0
023F 2711 CLR R17
0240 D07A RCALL _putchar
0241 9543 INC R20
0242 90200069 LDS R2,length
0244 1542 CP R20,R2
0245 F390 BCS 0x0238
(0110) }
(0111) Delay_ms(100);
0246 E604 LDI R16,0x64
0247 E010 LDI R17,0
0248 D012 RCALL _Delay_ms
(0112) PORTB&=~(1<<LED2);
0249 98C1 CBI 0x18,1
(0113) }
(0114) }
(0115) halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
024A E30A LDI R16,0x3A
024B DE94 RCALL _halSpiStrobe
(0116) halSpiStrobe(CCxxx0_SRX);
024C E304 LDI R16,0x34
024D DE92 RCALL _halSpiStrobe
024E 9623 ADIW R28,3
024F D029 RCALL pop_gset1
0250 D053 RCALL pop_lset
0251 9518 RETI
(0117) }
(0118)
(0119) void Delay_us(uint16 time) //set time 120 to 100us,set 1 to 3.5us;
(0120) {while (time--);
_Delay_us:
time --> R16
0252 0118 MOVW R2,R16
0253 5001 SUBI R16,1
0254 4010 SBCI R17,0
0255 2022 TST R2
0256 F7D9 BNE 0x0252
0257 2033 TST R3
0258 F7C9 BNE 0x0252
(0121) _WDR();
0259 95A8 WDR
025A 9508 RET
_Delay_ms:
time --> R20
025B D01A RCALL push_gset1
025C 01A8 MOVW R20,R16
(0122) }
(0123) void Delay_ms(uint16 time)
(0124) {while (time--)
025D C003 RJMP 0x0261
(0125) Delay_us(1200);
FILE: <library>
025E EB00 LDI R16,0xB0
025F E014 LDI R17,4
0260 DFF1 RCALL _Delay_us
0261 011A MOVW R2,R20
0262 5041 SUBI R20,1
0263 4050 SBCI R21,0
0264 2022 TST R2
0265 F7C1 BNE 0x025E
0266 2033 TST R3
0267 F7B1 BNE 0x025E
0268 D010 RCALL pop_gset1
0269 9508 RET
pop_gset2:
026A E0E2 LDI R30,2
026B C00E RJMP pop
pop_gset4:
026C E0E8 LDI R30,0x8
026D C00C RJMP pop
push_gset5:
026E 92FA ST R15,-Y
026F 92EA ST R14,-Y
push_gset4:
0270 92DA ST R13,-Y
0271 92CA ST R12,-Y
push_gset3:
0272 92BA ST R11,-Y
0273 92AA ST R10,-Y
push_gset2:
0274 937A ST R23,-Y
0275 936A ST R22,-Y
push_gset1:
0276 935A ST R21,-Y
0277 934A ST R20,-Y
0278 9508 RET
pop_gset1:
0279 E0E1 LDI R30,1
pop:
027A 9149 LD R20,Y+
027B 9159 LD R21,Y+
027C FDE0 SBRC R30,0
027D 9508 RET
027E 9169 LD R22,Y+
027F 9179 LD R23,Y+
0280 FDE1 SBRC R30,1
0281 9508 RET
0282 90A9 LD R10,Y+
0283 90B9 LD R11,Y+
0284 FDE2 SBRC R30,2
0285 9508 RET
0286 90C9 LD R12,Y+
0287 90D9 LD R13,Y+
0288 FDE3 SBRC R30,3
0289 9508 RET
028A 90E9 LD R14,Y+
028B 90F9 LD R15,Y+
028C 9508 RET
push_lset:
028D 93FA ST R31,-Y
028E 93EA ST R30,-Y
028F 93BA ST R27,-Y
0290 93AA ST R26,-Y
0291 939A ST R25,-Y
0292 938A ST R24,-Y
0293 933A ST R19,-Y
0294 932A ST R18,-Y
0295 931A ST R17,-Y
0296 930A ST R16,-Y
0297 929A ST R9,-Y
0298 928A ST R8,-Y
0299 927A ST R7,-Y
029A 926A ST R6,-Y
029B 925A ST R5,-Y
029C 924A ST R4,-Y
029D 923A ST R3,-Y
029E 922A ST R2,-Y
029F 921A ST R1,-Y
02A0 920A ST R0,-Y
02A1 B60F IN R0,0x3F
02A2 920A ST R0,-Y
02A3 9508 RET
pop_lset:
02A4 9009 LD R0,Y+
02A5 BE0F OUT 0x3F,R0
02A6 9009 LD R0,Y+
02A7 9019 LD R1,Y+
02A8 9029 LD R2,Y+
02A9 9039 LD R3,Y+
02AA 9049 LD R4,Y+
02AB 9059 LD R5,Y+
02AC 9069 LD R6,Y+
02AD 9079 LD R7,Y+
02AE 9089 LD R8,Y+
02AF 9099 LD R9,Y+
02B0 9109 LD R16,Y+
02B1 9119 LD R17,Y+
02B2 9129 LD R18,Y+
02B3 9139 LD R19,Y+
02B4 9189 LD R24,Y+
02B5 9199 LD R25,Y+
02B6 91A9 LD R26,Y+
02B7 91B9 LD R27,Y+
02B8 91E9 LD R30,Y+
02B9 91F9 LD R31,Y+
02BA 9508 RET
_putchar:
02BB DFBA RCALL push_gset1
02BC 2F40 MOV R20,R16
02BD 9020009C LDS R2,_textmode
02BF 9030009D LDS R3,_textmode+1
02C1 2022 TST R2
02C2 F411 BNE 0x02C5
02C3 2033 TST R3
02C4 F021 BEQ 0x02C9
02C5 304A CPI R20,0xA
02C6 F411 BNE 0x02C9
02C7 E00D LDI R16,0xD
02C8 DFF2 RCALL _putchar
02C9 9B5D SBIS 0x0B,5
02CA CFFE RJMP 0x02C9
02CB B94C OUT 0x0C,R20
02CC 2F04 MOV R16,R20
02CD 2711 CLR R17
02CE DFAA RCALL pop_gset1
02CF 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -