📄 main.lss
字号:
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 + -