📄 main.lss
字号:
7da: 15 1f adc r17, r21
diff = Channel - desiredFreq;
7dc: d8 01 movw r26, r16
7de: c7 01 movw r24, r14
7e0: 29 81 ldd r18, Y+1 ; 0x01
7e2: 3a 81 ldd r19, Y+2 ; 0x02
7e4: 4b 81 ldd r20, Y+3 ; 0x03
7e6: 5c 81 ldd r21, Y+4 ; 0x04
7e8: 82 1b sub r24, r18
7ea: 93 0b sbc r25, r19
7ec: a4 0b sbc r26, r20
7ee: b5 0b sbc r27, r21
if (diff < 0) {
7f0: b7 ff sbrs r27, 7
7f2: 07 c0 rjmp .+14 ; 0x802
diff = 0 - diff;
7f4: b0 95 com r27
7f6: a0 95 com r26
7f8: 90 95 com r25
7fa: 81 95 neg r24
7fc: 9f 4f sbci r25, 0xFF ; 255
7fe: af 4f sbci r26, 0xFF ; 255
800: bf 4f sbci r27, 0xFF ; 255
}
if (diff < Offset) {
802: 29 89 ldd r18, Y+17 ; 0x11
804: 3a 89 ldd r19, Y+18 ; 0x12
806: 4b 89 ldd r20, Y+19 ; 0x13
808: 5c 89 ldd r21, Y+20 ; 0x14
80a: 82 17 cp r24, r18
80c: 93 07 cpc r25, r19
80e: a4 07 cpc r26, r20
810: b5 07 cpc r27, r21
812: e4 f4 brge .+56 ; 0x84c
RXFreq = RXCalc;
814: 29 86 std Y+9, r2 ; 0x09
816: 3a 86 std Y+10, r3 ; 0x0a
818: 4b 86 std Y+11, r4 ; 0x0b
81a: 5c 86 std Y+12, r5 ; 0x0c
TXFreq = TXCalc;
81c: 6d 86 std Y+13, r6 ; 0x0d
81e: 7e 86 std Y+14, r7 ; 0x0e
820: 8f 86 std Y+15, r8 ; 0x0f
822: 98 8a std Y+16, r9 ; 0x10
ActualChannel = Channel;
824: ed 82 std Y+5, r14 ; 0x05
826: fe 82 std Y+6, r15 ; 0x06
828: 0f 83 std Y+7, r16 ; 0x07
82a: 18 87 std Y+8, r17 ; 0x08
FSep = CC1000ControlM_FSepTbl[i];
82c: 2b 8d ldd r18, Y+27 ; 0x1b
82e: 3c 8d ldd r19, Y+28 ; 0x1c
830: 20 50 subi r18, 0x00 ; 0
832: 3f 4f sbci r19, 0xFF ; 255
834: f9 01 movw r30, r18
836: 20 81 ld r18, Z
838: 31 81 ldd r19, Z+1 ; 0x01
83a: 2d 8f std Y+29, r18 ; 0x1d
83c: 3e 8f std Y+30, r19 ; 0x1e
RefDiv = i + 6;
83e: fe 89 ldd r31, Y+22 ; 0x16
840: fa 5f subi r31, 0xFA ; 250
842: fd 8b std Y+21, r31 ; 0x15
Offset = diff;
844: 89 8b std Y+17, r24 ; 0x11
846: 9a 8b std Y+18, r25 ; 0x12
848: ab 8b std Y+19, r26 ; 0x13
84a: bc 8b std Y+20, r27 ; 0x14
84c: 2e 89 ldd r18, Y+22 ; 0x16
84e: 2f 5f subi r18, 0xFF ; 255
850: 2e 8b std Y+22, r18 ; 0x16
852: 4b 8d ldd r20, Y+27 ; 0x1b
854: 5c 8d ldd r21, Y+28 ; 0x1c
856: 4e 5f subi r20, 0xFE ; 254
858: 5f 4f sbci r21, 0xFF ; 255
85a: 4b 8f std Y+27, r20 ; 0x1b
85c: 5c 8f std Y+28, r21 ; 0x1c
85e: 89 8d ldd r24, Y+25 ; 0x19
860: 9a 8d ldd r25, Y+26 ; 0x1a
862: 02 96 adiw r24, 0x02 ; 2
864: 89 8f std Y+25, r24 ; 0x19
866: 9a 8f std Y+26, r25 ; 0x1a
868: 29 30 cpi r18, 0x09 ; 9
86a: 08 f4 brcc .+2 ; 0x86e
86c: 1f cf rjmp .-450 ; 0x6ac
}
}
if (RefDiv != 0) {
86e: 9d 89 ldd r25, Y+21 ; 0x15
870: 99 23 and r25, r25
872: 09 f4 brne .+2 ; 0x876
874: 60 c0 rjmp .+192 ; 0x936
CC1000ControlM_gCurrentParameters[0x3] = (uint8_t )(RXFreq & 0xFF);
876: a9 85 ldd r26, Y+9 ; 0x09
878: a0 93 cf 01 sts 0x01CF, r26
CC1000ControlM_gCurrentParameters[0x2] = (uint8_t )((RXFreq >> 8) & 0xFF);
87c: 29 85 ldd r18, Y+9 ; 0x09
87e: 3a 85 ldd r19, Y+10 ; 0x0a
880: 4b 85 ldd r20, Y+11 ; 0x0b
882: 5c 85 ldd r21, Y+12 ; 0x0c
884: bb 27 eor r27, r27
886: a5 2f mov r26, r21
888: 94 2f mov r25, r20
88a: 83 2f mov r24, r19
88c: 80 93 ce 01 sts 0x01CE, r24
CC1000ControlM_gCurrentParameters[0x1] = (uint8_t )((RXFreq >> 16) & 0xFF);
890: ca 01 movw r24, r20
892: aa 27 eor r26, r26
894: bb 27 eor r27, r27
896: 80 93 cd 01 sts 0x01CD, r24
CC1000ControlM_gCurrentParameters[0x6] = (uint8_t )(TXFreq & 0xFF);
89a: 3d 85 ldd r19, Y+13 ; 0x0d
89c: 30 93 d2 01 sts 0x01D2, r19
CC1000ControlM_gCurrentParameters[0x5] = (uint8_t )((TXFreq >> 8) & 0xFF);
8a0: 2d 85 ldd r18, Y+13 ; 0x0d
8a2: 3e 85 ldd r19, Y+14 ; 0x0e
8a4: 4f 85 ldd r20, Y+15 ; 0x0f
8a6: 58 89 ldd r21, Y+16 ; 0x10
8a8: bb 27 eor r27, r27
8aa: a5 2f mov r26, r21
8ac: 94 2f mov r25, r20
8ae: 83 2f mov r24, r19
8b0: 80 93 d1 01 sts 0x01D1, r24
CC1000ControlM_gCurrentParameters[0x4] = (uint8_t )((TXFreq >> 16) & 0xFF);
8b4: ca 01 movw r24, r20
8b6: aa 27 eor r26, r26
8b8: bb 27 eor r27, r27
8ba: 80 93 d0 01 sts 0x01D0, r24
CC1000ControlM_gCurrentParameters[0x8] = (uint8_t )(FSep & 0xFF);
8be: 3d 8d ldd r19, Y+29 ; 0x1d
8c0: 30 93 d4 01 sts 0x01D4, r19
CC1000ControlM_gCurrentParameters[0x7] = (uint8_t )((FSep >> 8) & 0xFF);
8c4: 4d 8d ldd r20, Y+29 ; 0x1d
8c6: 5e 8d ldd r21, Y+30 ; 0x1e
8c8: 85 2f mov r24, r21
8ca: 99 27 eor r25, r25
8cc: 80 93 d3 01 sts 0x01D3, r24
if (ActualChannel < 500000000) {
8d0: 8d 81 ldd r24, Y+5 ; 0x05
8d2: 9e 81 ldd r25, Y+6 ; 0x06
8d4: af 81 ldd r26, Y+7 ; 0x07
8d6: b8 85 ldd r27, Y+8 ; 0x08
8d8: 80 30 cpi r24, 0x00 ; 0
8da: e5 e6 ldi r30, 0x65 ; 101
8dc: 9e 07 cpc r25, r30
8de: ed ec ldi r30, 0xCD ; 205
8e0: ae 07 cpc r26, r30
8e2: ed e1 ldi r30, 0x1D ; 29
8e4: be 07 cpc r27, r30
8e6: a8 f4 brcc .+42 ; 0x912
if (ActualChannel < 400000000) {
8e8: 80 50 subi r24, 0x00 ; 0
8ea: 94 48 sbci r25, 0x84 ; 132
8ec: a7 4d sbci r26, 0xD7 ; 215
8ee: b7 41 sbci r27, 0x17 ; 23
8f0: 28 f4 brcc .+10 ; 0x8fc
CC1000ControlM_gCurrentParameters[0x9] = (8 << 4) | (1 << 2);
8f2: 84 e8 ldi r24, 0x84 ; 132
8f4: 80 93 d5 01 sts 0x01D5, r24
CC1000ControlM_gCurrentParameters[0x1d] = (9 << 4) | (1 << 0);
8f8: 81 e9 ldi r24, 0x91 ; 145
8fa: 04 c0 rjmp .+8 ; 0x904
}
else {
CC1000ControlM_gCurrentParameters[0x9] = (4 << 4) | (1 << 2);
8fc: 84 e4 ldi r24, 0x44 ; 68
8fe: 80 93 d5 01 sts 0x01D5, r24
CC1000ControlM_gCurrentParameters[0x1d] = (8 << 4) | (1 << 0);
902: 81 e8 ldi r24, 0x81 ; 129
904: 80 93 e9 01 sts 0x01E9, r24
}
CC1000ControlM_gCurrentParameters[0xa] = 1 << 1;
908: 82 e0 ldi r24, 0x02 ; 2
90a: 80 93 d6 01 sts 0x01D6, r24
CC1000ControlM_gCurrentParameters[0x12] = 7 << 4;
90e: 80 e7 ldi r24, 0x70 ; 112
910: 0a c0 rjmp .+20 ; 0x926
}
else {
CC1000ControlM_gCurrentParameters[0x9] = (8 << 4) | (3 << 2);
912: 8c e8 ldi r24, 0x8C ; 140
914: 80 93 d5 01 sts 0x01D5, r24
CC1000ControlM_gCurrentParameters[0x1d] = (15 << 4) | (3 << 0);
918: 83 ef ldi r24, 0xF3 ; 243
91a: 80 93 e9 01 sts 0x01E9, r24
CC1000ControlM_gCurrentParameters[0xa] = ((1 << 5) | (2 << 3)) | (
91e: 82 e3 ldi r24, 0x32 ; 50
920: 80 93 d6 01 sts 0x01D6, r24
1 << 1);
CC1000ControlM_gCurrentParameters[0x12] = 2 << 4;
924: 80 e2 ldi r24, 0x20 ; 32
926: 80 93 de 01 sts 0x01DE, r24
}
CC1000ControlM_gCurrentParameters[0xc] = RefDiv << 3;
92a: 2d 89 ldd r18, Y+21 ; 0x15
92c: 22 0f add r18, r18
92e: 22 0f add r18, r18
930: 22 0f add r18, r18
932: 20 93 d8 01 sts 0x01D8, r18
}
CC1000ControlM_gCurrentChannel = ActualChannel;
936: 8d 81 ldd r24, Y+5 ; 0x05
938: 9e 81 ldd r25, Y+6 ; 0x06
93a: af 81 ldd r26, Y+7 ; 0x07
93c: b8 85 ldd r27, Y+8 ; 0x08
93e: 80 93 eb 01 sts 0x01EB, r24
942: 90 93 ec 01 sts 0x01EC, r25
946: a0 93 ed 01 sts 0x01ED, r26
94a: b0 93 ee 01 sts 0x01EE, r27
return ActualChannel;
}
94e: bc 01 movw r22, r24
950: cd 01 movw r24, r26
952: 6e 96 adiw r28, 0x1e ; 30
954: 0f b6 in r0, 0x3f ; 63
956: f8 94 cli
958: de bf out 0x3e, r29 ; 62
95a: 0f be out 0x3f, r0 ; 63
95c: cd bf out 0x3d, r28 ; 61
95e: df 91 pop r29
960: cf 91 pop r28
962: 1f 91 pop r17
964: 0f 91 pop r16
966: ff 90 pop r15
968: ef 90 pop r14
96a: df 90 pop r13
96c: cf 90 pop r12
96e: bf 90 pop r11
970: af 90 pop r10
972: 9f 90 pop r9
974: 8f 90 pop r8
976: 7f 90 pop r7
978: 6f 90 pop r6
97a: 5f 90 pop r5
97c: 4f 90 pop r4
97e: 3f 90 pop r3
980: 2f 90 pop r2
982: 08 95 ret
00000984 <CC1000HPLInit>:
uint32_t CC1000ControlTuneManual(uint32_t DesiredFreq)
{
uint32_t actualFreq;
actualFreq = CC1000ControlComputeFreq(DesiredFreq);
CC1000ControlCC1000SetFreq();
return actualFreq;
}
void CC1000ControlCC1000SetModem(void)
{
CC1000HPLWrite(0x0F, CC1000ControlM_gCurrentParameters[0x0f]);
CC1000HPLWrite(0x10, CC1000ControlM_gCurrentParameters[0x10]);
CC1000HPLWrite(0x11, CC1000ControlM_gCurrentParameters[0x11]);
return;
}
result_t CC1000HPLInit(void)
{
OSH_MAKE_CC_CHP_OUT_INPUT();
984: 0e 94 97 06 call 0xd2e
OSH_MAKE_CC_PALE_OUTPUT();
988: 0e 94 85 06 call 0xd0a
OSH_MAKE_CC_PCLK_OUTPUT();
98c: 0e 94 81 06 call 0xd02
OSH_MAKE_CC_PDATA_OUTPUT();
990: 0e 94 83 06 call 0xd06
OSH_SET_CC_PALE_PIN();
994: 0e 94 d2 06 call 0xda4
OSH_SET_CC_PDATA_PIN();
998: 0e 94 d0 06 call 0xda0
OSH_SET_CC_PCLK_PIN();
99c: 0e 94 ce 06 call 0xd9c
return SUCCESS;
}
9a0: 81 e0 ldi r24, 0x01 ; 1
9a2: 90 e0 ldi r25, 0x00 ; 0
9a4: 08 95 ret
000009a6 <CC1000HPLWrite>:
result_t CC1000ControlStdControlInit(void)
{
CC1000HPLInit();
CC1000HPLWrite(0x00, (((
1 << 5) | (1 << 4)) | (
1 << 3)) | (1 << 1));
CC1000HPLWrite(0x00, ((((
1 << 5) | (1 << 4)) | (
1 << 3)) | (1 << 1)) | (
1 << 0));
OSH_uwait(2000);
// CC1000ControlM_gCurrentParameters[0xb] = (8 << 4) | (0 << 0);
CC1000ControlM_gCurrentParameters[0xb] = 0xF0;
CC1000HPLWrite(0x0B, CC1000ControlM_gCurrentParameters[0xb]);
CC1000ControlM_gCurrentParameters[0xd] = 9 << 4;
CC1000HPLWrite(4, CC1000ControlM_gCurrentParameters[0xd]);
CC1000ControlM_gCurrentParameters[0xf] = 0;
CC1000ControlM_gCurrentParameters[0x10] = (((3 << 5) | (1 << 3)) | (
3 << 1)) | (1 << 0);
CC1000ControlM_gCurrentParameters[0x11] = ((5 << 4) | (1 << 2)) | (
1 << 0);
CC1000ControlCC1000SetModem();
CC1000ControlM_gCurrentParameters[0x13] = 1 << 0;
CC1000HPLWrite(0x13, CC1000ControlM_gCurrentParameters[0x13]);
CC1000ControlM_gCurrentParameters[0x1e] = TRUE;
CC1000ControlTuneManual(433300000);//914998000
return SUCCESS;
}
result_t CC1000ControlBIASOn(void)
{
CC1000HPLWrite(0x00, (((
1 << 5) | (1 << 4)) | (
1 << 3)) | (
1 << 0));
OSH_uwait(200);
return SUCCESS;
}
result_t CC1000ControlStdControlStart(void)
{
CC1000HPLWrite(0x00, ((((
1 << 5) | (1 << 4)) | (
1 << 3)) | (1 << 1)) | (
1 << 0));
OSH_uwait(2000);
return SUCCESS;
}
result_t CC1000ControlTxMode(void)
{
CC1000HPLWrite(0x00, (((
1 << 7) | (1 << 6)) | (1 << 5)) | (
1 << 0));
CC1000HPLWrite(0x09, CC1000ControlM_gCurrentParameters[29]);
OSH_uwait(250);
CC1000HPLWrite(0x0B, CC1000ControlM_gCurrentParameters[0xb]);
OSH_uwait(20);
return SUCCESS;
}
result_t CC1000ControlRxMode(void)
{
CC1000HPLWrite(0x00, (
1 << 4) | (1 << 0));
CC1000HPLWrite(0x09, CC1000ControlM_gCurrentParameters[0x09]);
CC1000HPLWrite(0x0B, 0x00);
OSH_uwait(250);
return SUCCESS;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -