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

📄 main.lss

📁 基于CC1100和ATMEGA128的无线通信程序
💻 LSS
📖 第 1 页 / 共 5 页
字号:
 36e:	0e 94 c4 00 	call	0x188 <TI_CC_SpiStrobe>

    // Wait for GDO0 to be set -> sync transmitted
    //等待同步字节发出
    while (!GDO0_PIN);
 372:	80 9b       	sbis	0x10, 0	; 16
 374:	fe cf       	rjmp	.-4      	; 0x372 <TI_CC_RfSendPacket+0x12>
    // Wait for GDO0 to be cleared -> end of packet
    //等待数据包发送完毕
    while (GDO0_PIN);
 376:	80 99       	sbic	0x10, 0	; 16
 378:	fe cf       	rjmp	.-4      	; 0x376 <TI_CC_RfSendPacket+0x16>
    // Flush RX FIFO; 
    //清接收缓冲区
    TI_CC_SpiStrobe(CCxxx0_SFRX);
 37a:	8a e3       	ldi	r24, 0x3A	; 58
 37c:	0e 94 c4 00 	call	0x188 <TI_CC_SpiStrobe>
    // Flush TX FIFO; 
    //清发送缓冲区
    TI_CC_SpiStrobe(CCxxx0_SFTX);
 380:	8b e3       	ldi	r24, 0x3B	; 59
 382:	0e 94 c4 00 	call	0x188 <TI_CC_SpiStrobe>
 386:	08 95       	ret

00000388 <TI_CC_RfReceivePacket>:
}// TI_CC_RfSendPacket




//-------------------------------------------------------------------------------------------------------
//  BOOL TI_CC_RfReceivePacket(BYTE *rxBuffer, UINT8 *length)
//		接收一个数据包
// 最大数据包长度<63; GDO0 设置成监听数据包: TI_CC_SpiWriteReg(CCxxx0_IOCFG0, 0x06);
// 不定长数据包格式,数据包里的第一个字节为数据包长度
//  DESCRIPTION: 
//      This function can be used to receive a packet of variable packet length (first byte in the packet
//      must be the length byte). The packet length should not exceed the RX FIFO size.
//      To use this function, GD00 must be configured to be asserted when sync word is sent and 
//      de-asserted at the end of the packet => TI_CC_SpiWriteReg(CCxxx0_IOCFG0, 0x06);
//      Also, APPEND_STATUS in the PKTCTRL1 register must be enabled.
//      The function implements polling of GDO0. First it waits for GD00 to be set and then it waits
//      for it to be cleared.
//      After the GDO0 pin has been de-asserted, the RXBYTES register is read to make sure that there
//      are bytes in the FIFO. This is because the GDO signal will indicate sync received even if the
//      FIFO is flushed due to address filtering, CRC filtering, or packet length filtering. 
//  
//  ARGUMENTS:
//      BYTE *rxBuffer
//          Pointer to the buffer where the incoming data should be stored
//      UINT8 *length
//          Pointer to a variable containing the size of the buffer where the incoming data should be
//          stored. After this function returns, that variable holds the packet length.
//          
//  RETURN VALUE:
//      BOOL
//          TRUE:   CRC OK
//          FALSE:  CRC NOT OK (or no packet was put in the RX FIFO due to filtering)
//-------------------------------------------------------------------------------------------------------

BOOL TI_CC_RfReceivePacket(BYTE *rxBuffer, UINT8 length) 
{
 388:	df 92       	push	r13
 38a:	ef 92       	push	r14
 38c:	ff 92       	push	r15
 38e:	0f 93       	push	r16
 390:	1f 93       	push	r17
 392:	cf 93       	push	r28
 394:	df 93       	push	r29
 396:	cd b7       	in	r28, 0x3d	; 61
 398:	de b7       	in	r29, 0x3e	; 62
 39a:	22 97       	sbiw	r28, 0x02	; 2
 39c:	0f b6       	in	r0, 0x3f	; 63
 39e:	f8 94       	cli
 3a0:	de bf       	out	0x3e, r29	; 62
 3a2:	0f be       	out	0x3f, r0	; 63
 3a4:	cd bf       	out	0x3d, r28	; 61
 3a6:	7c 01       	movw	r14, r24
 3a8:	d6 2e       	mov	r13, r22
    BYTE status[2];
    UINT8 packetLength;
    //进入接收状态
    TI_CC_SpiStrobe(CCxxx0_SRX);
 3aa:	84 e3       	ldi	r24, 0x34	; 52
 3ac:	0e 94 c4 00 	call	0x188 <TI_CC_SpiStrobe>
    // Wait for GDO0 to be set -> sync received
    //等待同步字节到来
    while (!GDO0_PIN);
 3b0:	80 9b       	sbis	0x10, 0	; 16
 3b2:	fe cf       	rjmp	.-4      	; 0x3b0 <TI_CC_RfReceivePacket+0x28>
    // Wait for GDO0 to be cleared -> end of packet
    //等待数据包接收完毕
    while (GDO0_PIN);		
 3b4:	80 b3       	in	r24, 0x10	; 16
 3b6:	99 27       	eor	r25, r25
 3b8:	8c 01       	movw	r16, r24
 3ba:	01 70       	andi	r16, 0x01	; 1
 3bc:	10 70       	andi	r17, 0x00	; 0
 3be:	80 fd       	sbrc	r24, 0
 3c0:	f9 cf       	rjmp	.-14     	; 0x3b4 <TI_CC_RfReceivePacket+0x2c>
    //判断缓冲区里字节数
    if ((TI_CC_SpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) 
 3c2:	8b e3       	ldi	r24, 0x3B	; 59
 3c4:	0e 94 97 00 	call	0x12e <TI_CC_SpiReadStatus>
 3c8:	99 27       	eor	r25, r25
 3ca:	8f 77       	andi	r24, 0x7F	; 127
 3cc:	90 70       	andi	r25, 0x00	; 0
 3ce:	00 97       	sbiw	r24, 0x00	; 0
 3d0:	e9 f0       	breq	.+58     	; 0x40c <TI_CC_RfReceivePacket+0x84>
    {
			
        // Read length byte
        //读取缓冲区里字节数
        packetLength = TI_CC_SpiReadReg(CCxxx0_RXFIFO);
 3d2:	8f e3       	ldi	r24, 0x3F	; 63
 3d4:	0e 94 86 00 	call	0x10c <TI_CC_SpiReadReg>
 3d8:	48 2f       	mov	r20, r24
        // Read data from RX FIFO and store in rxBuffer
        //从接收缓冲区里读取数据
        if (packetLength <= length) 
 3da:	d8 16       	cp	r13, r24
 3dc:	98 f0       	brcs	.+38     	; 0x404 <TI_CC_RfReceivePacket+0x7c>
	   {
            TI_CC_SpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); 
 3de:	b7 01       	movw	r22, r14
 3e0:	8f e3       	ldi	r24, 0x3F	; 63
 3e2:	0e 94 a8 00 	call	0x150 <TI_CC_SpiReadBurstReg>

            // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
            //最后两位为数据包完整性校验字节;系统芯片自己加上
            TI_CC_SpiReadBurstReg(CCxxx0_RXFIFO, status, 2); 
 3e6:	42 e0       	ldi	r20, 0x02	; 2
 3e8:	be 01       	movw	r22, r28
 3ea:	6f 5f       	subi	r22, 0xFF	; 255
 3ec:	7f 4f       	sbci	r23, 0xFF	; 255
 3ee:	8f e3       	ldi	r24, 0x3F	; 63
 3f0:	0e 94 a8 00 	call	0x150 <TI_CC_SpiReadBurstReg>
            // Flush RX FIFO; 
            //清接收缓冲区
            TI_CC_SpiStrobe(CCxxx0_SFRX);
 3f4:	8a e3       	ldi	r24, 0x3A	; 58
 3f6:	0e 94 c4 00 	call	0x188 <TI_CC_SpiStrobe>
        		
            // MSB of LQI is the CRC_OK bit
            //回返校验位情况
            return (status[LQI] & CRC_OK);
 3fa:	8a 81       	ldd	r24, Y+2	; 0x02
 3fc:	99 27       	eor	r25, r25
 3fe:	80 78       	andi	r24, 0x80	; 128
 400:	90 70       	andi	r25, 0x00	; 0
 402:	04 c0       	rjmp	.+8      	; 0x40c <TI_CC_RfReceivePacket+0x84>
	   } 
       else{ length = packetLength;
	          // Flush RX FIFO
              //清接收缓冲区
              TI_CC_SpiStrobe(CCxxx0_SFRX);
 404:	8a e3       	ldi	r24, 0x3A	; 58
 406:	0e 94 c4 00 	call	0x188 <TI_CC_SpiStrobe>
              return FALSE;}
 40a:	c8 01       	movw	r24, r16
 40c:	22 96       	adiw	r28, 0x02	; 2
 40e:	0f b6       	in	r0, 0x3f	; 63
 410:	f8 94       	cli
 412:	de bf       	out	0x3e, r29	; 62
 414:	0f be       	out	0x3f, r0	; 63
 416:	cd bf       	out	0x3d, r28	; 61
 418:	df 91       	pop	r29
 41a:	cf 91       	pop	r28
 41c:	1f 91       	pop	r17
 41e:	0f 91       	pop	r16
 420:	ff 90       	pop	r15
 422:	ef 90       	pop	r14
 424:	df 90       	pop	r13
 426:	08 95       	ret

00000428 <Motion_Init>:
 
 
 void Motion_Init(void)  
  { UINT16 i=0,j=0,t=0,temp=0,temp1,temp2;
 428:	cf 92       	push	r12
 42a:	df 92       	push	r13
 42c:	ef 92       	push	r14
 42e:	ff 92       	push	r15
 430:	0f 93       	push	r16
 432:	1f 93       	push	r17
 434:	cf 93       	push	r28
 436:	df 93       	push	r29
 438:	00 e0       	ldi	r16, 0x00	; 0
 43a:	10 e0       	ldi	r17, 0x00	; 0
    TCCR1B = 0x02; //start Time
 43c:	82 e0       	ldi	r24, 0x02	; 2
 43e:	8e bd       	out	0x2e, r24	; 46
 440:	81 e0       	ldi	r24, 0x01	; 1
 442:	c8 2e       	mov	r12, r24
 444:	d1 2c       	mov	r13, r1
	for(t=0;t<50;t++)    
      { for(j=1;j<9;j++)	
 446:	61 e0       	ldi	r22, 0x01	; 1
 448:	70 e0       	ldi	r23, 0x00	; 0
 44a:	c4 ec       	ldi	r28, 0xC4	; 196
 44c:	d9 e0       	ldi	r29, 0x09	; 9
 44e:	ec ed       	ldi	r30, 0xDC	; 220
 450:	f5 e0       	ldi	r31, 0x05	; 5
 452:	df 01       	movw	r26, r30
 	    {  
		if(j<5)
 454:	65 30       	cpi	r22, 0x05	; 5
 456:	71 05       	cpc	r23, r1
 458:	78 f4       	brcc	.+30     	; 0x478 <Motion_Init+0x50>
		{PORTC|=(1<<(j-1));	
 45a:	61 50       	subi	r22, 0x01	; 1
 45c:	70 40       	sbci	r23, 0x00	; 0
 45e:	96 01       	movw	r18, r12
 460:	06 2e       	mov	r0, r22
 462:	02 c0       	rjmp	.+4      	; 0x468 <Motion_Init+0x40>
 464:	22 0f       	add	r18, r18
 466:	33 1f       	adc	r19, r19
 468:	0a 94       	dec	r0
 46a:	e2 f7       	brpl	.-8      	; 0x464 <Motion_Init+0x3c>
 46c:	6f 5f       	subi	r22, 0xFF	; 255
 46e:	7f 4f       	sbci	r23, 0xFF	; 255
 470:	85 b3       	in	r24, 0x15	; 21
 472:	82 2b       	or	r24, r18
 474:	85 bb       	out	0x15, r24	; 21
        temp2=1500+(j-1)*2500;
 476:	7d 01       	movw	r14, r26
		}
		PORTA|=(1<<(j-1));	
 478:	61 50       	subi	r22, 0x01	; 1
 47a:	70 40       	sbci	r23, 0x00	; 0
 47c:	96 01       	movw	r18, r12
 47e:	06 2e       	mov	r0, r22
 480:	02 c0       	rjmp	.+4      	; 0x486 <Motion_Init+0x5e>
 482:	22 0f       	add	r18, r18
 484:	33 1f       	adc	r19, r19
 486:	0a 94       	dec	r0
 488:	e2 f7       	brpl	.-8      	; 0x482 <Motion_Init+0x5a>
 48a:	6f 5f       	subi	r22, 0xFF	; 255
 48c:	7f 4f       	sbci	r23, 0xFF	; 255
 48e:	8b b3       	in	r24, 0x1b	; 27
 490:	82 2b       	or	r24, r18
 492:	8b bb       	out	0x1b, r24	; 27
 494:	20 95       	com	r18
        temp1=1500+(j-1)*2500;	
        do{ temp=TCNT1;	
 496:	4c b5       	in	r20, 0x2c	; 44
 498:	5d b5       	in	r21, 0x2d	; 45
 	    if(temp>temp1)PORTA&=~(1<<(j-1));	
 49a:	e4 17       	cp	r30, r20
 49c:	f5 07       	cpc	r31, r21
 49e:	18 f4       	brcc	.+6      	; 0x4a6 <Motion_Init+0x7e>
 4a0:	8b b3       	in	r24, 0x1b	; 27
 4a2:	82 23       	and	r24, r18
 4a4:	8b bb       	out	0x1b, r24	; 27
  		if(temp>temp2)PORTC&=~(1<<(j-1));
 4a6:	e4 16       	cp	r14, r20
 4a8:	f5 06       	cpc	r15, r21
 4aa:	18 f4       	brcc	.+6      	; 0x4b2 <Motion_Init+0x8a>
 4ac:	85 b3       	in	r24, 0x15	; 21
 4ae:	82 23       	and	r24, r18
 4b0:	85 bb       	out	0x15, r24	; 21
  	      }while(temp<j*2500);        
 4b2:	4c 17       	cp	r20, r28
 4b4:	5d 07       	cpc	r21, r29
 4b6:	78 f3       	brcs	.-34     	; 0x496 <Motion_Init+0x6e>
 4b8:	6f 5f       	subi	r22, 0xFF	; 255
 4ba:	7f 4f       	sbci	r23, 0xFF	; 255
 4bc:	ac 53       	subi	r26, 0x3C	; 60
 4be:	b6 4f       	sbci	r27, 0xF6	; 246
 4c0:	ec 53       	subi	r30, 0x3C	; 60
 4c2:	f6 4f       	sbci	r31, 0xF6	; 246
 4c4:	cc 53       	subi	r28, 0x3C	; 60
 4c6:	d6 4f       	sbci	r29, 0xF6	; 246
 4c8:	69 30       	cpi	r22, 0x09	; 9
 4ca:	71 05       	cpc	r23, r1
 4cc:	18 f2       	brcs	.-122    	; 0x454 <Motion_Init+0x2c>
  	   }
       TCNT1=0;  
 4ce:	1d bc       	out	0x2d, r1	; 45
 4d0:	1c bc       	out	0x2c, r1	; 44
 4d2:	0f 5f       	subi	r16, 0xFF	; 255
 4d4:	1f 4f       	sbci	r17, 0xFF	; 255
 4d6:	02 33       	cpi	r16, 0x32	; 50
 4d8:	11 05       	cpc	r17, r1
 4da:	08 f4       	brcc	.+2      	; 0x4de <Motion_Init+0xb6>
 4dc:	b4 cf       	rjmp	.-152    	; 0x446 <Motion_Init+0x1e>
       }  
    TCCR1B = 0x00; //start Time
 4de:	1e bc       	out	0x2e, r1	; 46
 4e0:	df 91       	pop	r29
 4e2:	cf 91       	pop	r28
 4e4:	1f 91       	pop	r17
 4e6:	0f 91       	pop	r16
 4e8:	ff 90       	pop	r15
 4ea:	ef 90       	pop	r14
 4ec:	df 90       	pop	r13
 4ee:	cf 90       	pop	r12
 4f0:	08 95       	ret

000004f2 <Motion_Excute>:
  } 
 
 
 void Motion_Excute(UINT8 (*angle)[13],UINT16 totalstep,UINT16 cycle_start,UINT16 cycle_number)
  { 
 4f2:	2f 92       	push	r2
 4f4:	3f 92       	push	r3
 4f6:	4f 92       	push	r4
 4f8:	5f 92       	push	r5
 4fa:	6f 92       	push	r6
 4fc:	7f 92       	push	r7
 4fe:	8f 92       	push	r8
 500:	9f 92       	push	r9
 502:	af 92       	push	r10
 504:	bf 92       	push	r11
 506:	cf 92       	push	r12
 508:	df 92       	push	r13
 50a:	ef 92       	push	r14
 50c:	ff 92       	push	r15
 50e:	0f 93       	push	r16
 510:	1f 93       	push	r17
 512:	cf 93       	push	r28
 514:	df 93       	push	r29
 516:	cd b7       	in	r28, 0x3d	; 61
 518:	de b7       	in	r29, 0x3e	; 62
 51a:	2e 97       	sbiw	r28, 0x0e	; 14
 51c:	0f b6       	in	r0, 0x3f	; 63
 51e:	f8 94       	cli
 520:	de bf       	out	0x3e, r29	; 62
 522:	0f be       	out	0x3f, r0	; 63
 524:	cd bf       	out	0x3d, r28	; 61
 526:	9a 83       	std	Y+2, r25	; 0x02
 528:	89 83       	std	Y+1, r24	; 0x01
 52a:	7c 83       	std	Y+4, r23	; 0x04
 52c:	6b 83       	std	Y+3, r22	; 0x03
 52e:	5e 83       	std	Y+6, r21	; 0x06
 530:	4d 83       	std	Y+5, r20	; 0x05
 532:	38 87       	std	Y+8, r19	; 0x08
 534:	2f 83       	std	Y+7, r18	; 0x07
  UINT16 i=0,t=0,j=0;
 536:	aa 24       	eor	r10, r10
 538:	bb 24       	eor	r11, r11
  UINT16 temp1=0,temp2=0,temp=0; 
 53a:	25 01       	movw	r4, r10
  
  TCCR1B = 0x02; //start Timer
 53c:	82 e0       	ldi	r24, 0x02	; 2
 53e:	8e bd       	out	0x2e, r24	; 46
  for(i=0;i<cycle_start;i++)
 540:	2d 81       	ldd	r18, Y+5	; 0x05
 542:	3e 81       	ldd	r19, Y+6	; 0x06
 544:	a2 16       	cp	r10, r18
 546:	b3 06       	cpc	r11, r19
 548:	08 f0       	brcs	.+2      	; 0x54c <Motion_Excute+0x5a>
 54a:	a0 c0       	rjmp	.+320    	; 0x68c <Motion_Excute+0x19a>
 54c:	bc 86       	std	Y+12, r11	; 0x0c
 54e:	ab 86       	std	Y+11, r10	; 0x0b
 550:	29 80       	ldd	r2, Y+1	; 0x01
 552:	3a 80       	ldd	r3, Y+2	; 0x02
  for(t=angle[i][0];t>0;t--)    
 554:	d1 01       	movw	r26, r2
 556:	8c 91       	ld	r24, X
 558:	ed e0       	ldi	r30, 0x0D	; 13
 55a:	f0 e0       	ldi	r31, 0x00	; 0

⌨️ 快捷键说明

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