📄 rd_useserialframe_proc.lis
字号:
003E ;
003E ;
003E ; if (!(*(pSFP->InputDataFunc))(&cTempData)) //利用函数指针调用函数
003E 8E01 movw R16,R28
0040 0C5F subi R16,252 ; offset = 4
0042 1F4F sbci R17,255
0044 A48D ldd R26,z+28
0046 B58D ldd R27,z+29
0048 FD01 movw R30,R26
004A 00D0 rcall xicall
004C 0023 tst R16
004E 09F4 brne L5
0050 X0:
0050 .dbline 152
0050 ; {
0050 .dbline 153
0050 ; return ;
0050 CAC0 rjmp L4
0052 L5:
0052 .dbline 156
0052 ; }
0052 ;
0052 ; if (cTempActionFlag == NULL)
0052 2B80 ldd R2,y+3
0054 2220 tst R2
0056 39F4 brne L7
0058 X1:
0058 .dbline 157
0058 ; {
0058 .dbline 158
0058 ; pSFP->cXORCheck = 0;
0058 2224 clr R2
005A FA01 movw R30,R20
005C 23A2 std z+35,R2
005E .dbline 159
005E ; pSFP->cFrameSize = 0;
005E 24A2 std z+36,R2
0060 .dbline 160
0060 ; SFP_WAIT_FOR_FRAME_HEAD = TRUE;
0060 8B81 ldd R24,y+3
0062 8160 ori R24,1
0064 8B83 std y+3,R24
0066 .dbline 161
0066 ; }
0066 L7:
0066 .dbline 163
0066 ;
0066 ; if (SFP_WAIT_FOR_FRAME_HEAD)
0066 FE01 movw R30,R28
0068 8381 ldd R24,z+3
006A 8170 andi R24,1
006C 09F4 brne X13
006E 24C0 rjmp L9
0070 X13:
0070 X2:
0070 .dbline 164
0070 ; {
0070 .dbline 165
0070 ; if (cTempData == pSFP->cHeadByte)
0070 FA01 movw R30,R20
0072 208C ldd R2,z+24
0074 3C80 ldd R3,y+4
0076 3214 cp R3,R2
0078 09F0 breq X14
007A B5C0 rjmp L4
007C X14:
007C X3:
007C .dbline 166
007C ; {
007C .dbline 167
007C ; ADT_ADD_DATA_TO_QUEUE((*pQueue),cTempData);
007C 232D mov R18,R3
007E 8B01 movw R16,R22
0080 CB01 movw R24,R22
0082 0A96 adiw R24,10
0084 FC01 movw R30,R24
0086 A081 ldd R26,z+0
0088 B181 ldd R27,z+1
008A FD01 movw R30,R26
008C 00D0 rcall xicall
008E .dbline 170
008E ;
008E ;
008E ; if (!(pSFP->cFixLength))
008E FA01 movw R30,R20
0090 228C ldd R2,z+26
0092 2220 tst R2
0094 21F4 brne L13
0096 X4:
0096 .dbline 171
0096 ; {
0096 .dbline 173
0096 ; //变长数据帧
0096 ; SFP_WAIT_FOR_FRAME_SIZE = TRUE;
0096 8B81 ldd R24,y+3
0098 8260 ori R24,2
009A 8B83 std y+3,R24
009C .dbline 174
009C ; }
009C 06C0 rjmp L14
009E L13:
009E .dbline 176
009E ; else
009E ; {
009E .dbline 178
009E ; //固定长度的数据帧
009E ; SFP_WAIT_FOR_ALL_DATA = TRUE;
009E 8B81 ldd R24,y+3
00A0 8460 ori R24,4
00A2 8B83 std y+3,R24
00A4 .dbline 179
00A4 ; pSFP->cFrameSize = pSFP->cFixLength;
00A4 FA01 movw R30,R20
00A6 228C ldd R2,z+26
00A8 24A2 std z+36,R2
00AA .dbline 180
00AA ; }
00AA L14:
00AA .dbline 182
00AA ;
00AA ; SFP_WAIT_FOR_FRAME_HEAD = FALSE;
00AA 8B81 ldd R24,y+3
00AC 8E7F andi R24,254
00AE 8B83 std y+3,R24
00B0 .dbline 183
00B0 ; pSFP->cActionFlag = cTempActionFlag;
00B0 282E mov R2,R24
00B2 FA01 movw R30,R20
00B4 22A2 std z+34,R2
00B6 .dbline 185
00B6 ;
00B6 ; }
00B6 .dbline 187
00B6 ;
00B6 ; return ;
00B6 97C0 rjmp L4
00B8 L9:
00B8 .dbline 190
00B8 ; }
00B8 ;
00B8 ; if (SFP_WAIT_FOR_FRAME_SIZE)
00B8 FE01 movw R30,R28
00BA 8381 ldd R24,z+3
00BC 8695 lsr R24
00BE 8170 andi R24,1
00C0 09F4 brne X15
00C2 2EC0 rjmp L15
00C4 X15:
00C4 X5:
00C4 .dbline 191
00C4 ; {
00C4 .dbline 193
00C4 ;
00C4 ; if (cTempData > (pQueue->nSize))
00C4 FB01 movw R30,R22
00C6 2280 ldd R2,z+2
00C8 3380 ldd R3,z+3
00CA 4C80 ldd R4,y+4
00CC 5524 clr R5
00CE 2414 cp R2,R4
00D0 3504 cpc R3,R5
00D2 50F4 brsh L17
00D4 X6:
00D4 .dbline 194
00D4 ; {
00D4 .dbline 197
00D4 ; //错误的数据帧长度
00D4 ;
00D4 ; ADT_QUEUE_LET_EMPTY((*pQueue)) //清空队列
00D4 .dbline 197
00D4 2224 clr R2
00D6 3324 clr R3
00D8 3582 std z+5,R3
00DA 2482 std z+4,R2
00DC .dbline 197
00DC 3782 std z+7,R3
00DE 2682 std z+6,R2
00E0 .dbline 197
00E0 3186 std z+9,R3
00E2 2086 std z+8,R2
00E4 .dbline 197
00E4 .dbline 199
00E4 ;
00E4 ; SFP_STOP_ALL_ACTION
00E4 2B82 std y+3,R2
00E6 .dbline 200
00E6 ; }
00E6 18C0 rjmp L18
00E8 L17:
00E8 .dbline 202
00E8 ; else
00E8 ; {
00E8 .dbline 204
00E8 ; //有效的数据帧长度
00E8 ; pSFP->cFrameSize = cTempData; //更新数据帧长度信息
00E8 2C80 ldd R2,y+4
00EA FA01 movw R30,R20
00EC 24A2 std z+36,R2
00EE .dbline 205
00EE ; pSFP->cXORCheck ^= cTempData;
00EE CF01 movw R24,R30
00F0 8396 adiw R24,35
00F2 FC01 movw R30,R24
00F4 3080 ldd R3,z+0
00F6 3224 eor R3,R2
00F8 3082 std z+0,R3
00FA .dbline 207
00FA ;
00FA ; ADT_ADD_DATA_TO_QUEUE((*pQueue),cTempData); //将该信息添加到缓冲区
00FA 222D mov R18,R2
00FC 8B01 movw R16,R22
00FE CB01 movw R24,R22
0100 0A96 adiw R24,10
0102 5C01 movw R10,R24
0104 FC01 movw R30,R24
0106 A081 ldd R26,z+0
0108 B181 ldd R27,z+1
010A FD01 movw R30,R26
010C 00D0 rcall xicall
010E .dbline 210
010E ;
010E ;
010E ; SFP_WAIT_FOR_ALL_DATA = TRUE;
010E 8B81 ldd R24,y+3
0110 8460 ori R24,4
0112 8B83 std y+3,R24
0114 .dbline 211
0114 ; SFP_WAIT_FOR_FRAME_SIZE = FALSE;
0114 8D7F andi R24,253
0116 8B83 std y+3,R24
0118 .dbline 212
0118 ; }
0118 L18:
0118 .dbline 214
0118 ;
0118 ; pSFP->cActionFlag = cTempActionFlag;
0118 2B80 ldd R2,y+3
011A FA01 movw R30,R20
011C 22A2 std z+34,R2
011E .dbline 215
011E ; return ;
011E 63C0 rjmp L4
0120 L15:
0120 .dbline 218
0120 ; }
0120 ;
0120 ; if (SFP_WAIT_FOR_ALL_DATA)
0120 FE01 movw R30,R28
0122 8381 ldd R24,z+3
0124 8695 lsr R24
0126 8695 lsr R24
0128 8170 andi R24,1
012A 09F4 brne X16
012C 5CC0 rjmp L19
012E X16:
012E X7:
012E .dbline 219
012E ; {
012E .dbline 220
012E ; if ((pQueue->nCount) < (pSFP->cFrameSize))
012E FA01 movw R30,R20
0130 24A0 ldd R2,z+36
0132 3324 clr R3
0134 FB01 movw R30,R22
0136 4084 ldd R4,z+8
0138 5184 ldd R5,z+9
013A 4214 cp R4,R2
013C 5304 cpc R5,R3
013E 88F4 brsh L21
0140 X8:
0140 .dbline 221
0140 ; {
0140 .dbline 222
0140 ; pSFP->cXORCheck ^= cTempData;
0140 CA01 movw R24,R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -