📄 smsspicommon.cod
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4345
TTL E:\WM604\PLATFORM\SEUICBSP\SRC\DRIVERS\DMBDRV\SpiDrv\.\smsspicommon.c
CODE32
00000 AREA |.drectve|, DRECTVE
DCB "-defaultlib:coredll.lib "
DCB "-defaultlib:corelibc.lib "
IMPORT |memcpy|
; File e:\wm604\platform\seuicbsp\src\drivers\dmbdrv\spidrv\smsspicommon.c
00000 AREA |.text| { |smsspi_common_find_msg| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$smsspi_common_find_msg|, PDATA, SELECTION=5, ASSOC=|.text| { |smsspi_common_find_msg| } ; comdat associative
|$T37746| DCD |$L37745|
DCD 0x40009a01
; Function compile flags: /Ogsy
00000 AREA |.text| { |smsspi_common_find_msg| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |smsspi_common_find_msg| PROC
; 8 : {
00000 |$L37745|
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 |$M37743|
00004 e1a09002 mov r9, r2
00008 e1a07001 mov r7, r1
0000c e1a04000 mov r4, r0
; 9 : int i, missing_bytes;
; 10 :
; 11 : int TmpLen;
; 12 : //DBGMSG(ZONE_INFO, (TEXT("entering with %d bytes.\n"), len));
; 13 :
; 14 : missing_bytes = 0;
00010 e3a06000 mov r6, #0
; 15 : for(i=0;i<len;i++)
00014 e3a05000 mov r5, #0
00018 e3590000 cmp r9, #0
0001c da00008e ble |$L37613|
00020 e3a0a000 mov r10, #0
00024 e3a01001 mov r1, #1
00028 e3a00002 mov r0, #2
0002c e3a0e003 mov lr, #3
00030 e3a08004 mov r8, #4
00034 e3a0ba01 mov r11, #1, 20
00038 |$L37611|
; 16 : {
; 17 : switch(dev->rxState)
00038 e5942014 ldr r2, [r4, #0x14]
0003c e352000a cmp r2, #0xA
00040 8a000082 bhi |$L37612|
00044 e1a03082 mov r3, r2, lsl #1
00048 e083300f add r3, r3, pc
0004c e1d330b4 ldrh r3, [r3, #4]
00050 e08ff003 add pc, pc, r3
00054 |$L37742|
00054 |$L37741|
00054 0014 DCW 0x14
00056 002c DCW 0x2c
00058 0048 DCW 0x48
0005a 005c DCW 0x5c
0005c 0074 DCW 0x74
0005e 008c DCW 0x8c
00060 00a0 DCW 0xa0
00062 00b4 DCW 0xb4
00064 00d8 DCW 0xd8
00066 0108 DCW 0x108
00068 017c DCW 0x17c
; 135 : }
0006a 017c DCW 0x17c
0006c |$L37618|
; 18 : {
; 19 : case RxsWait_a5:
; 20 : if((buf[i] & 0xff)== 0xa5)
0006c e7d53007 ldrb r3, [r5, +r7]
00070 e35300a5 cmp r3, #0xA5
00074 1a000054 bne |$L37738|
; 21 : {
; 22 : dev->rxState = RxsWait_5a;
00078 e5841014 str r1, [r4, #0x14]
; 23 : missing_bytes = SPI_PACKET_SIZE;
0007c e3a06c01 mov r6, #1, 24
; 24 : //DBGMSG(ZONE_DETAILED, (TEXT("state %d. missing_bytes = %d\n"), dev->rxState, missing_bytes));
; 25 : }
; 26 : else
00080 ea000072 b |$L37612|
00084 |$L37621|
; 27 : {
; 28 : missing_bytes = 0;
; 29 : }
; 30 : break;
; 31 : case RxsWait_5a:
; 32 : if((buf[i] & 0xff) == 0x5a)
00084 e7d53007 ldrb r3, [r5, +r7]
00088 e353005a cmp r3, #0x5A
; 33 : dev->rxState = RxsWait_e7;
0008c 05840014 streq r0, [r4, #0x14]
00090 0a00006e beq |$L37612|
00094 |$L37622|
; 34 : else
; 35 : {
; 36 : dev->rxState = RxsWait_a5;
00094 e584a014 str r10, [r4, #0x14]
; 95 :
; 96 : if(dev->rxPacket.len>RX_PACKET_SIZE)
; 97 : {
; 98 : dev->rxPacket.len=RX_PACKET_SIZE;
; 99 : }
; 100 : //DataCnt counts the remaining bytes of the message which is the length - the header already taken.
; 101 : dev->rxPacket.cnt = dev->rxPacket.len - 6;
; 102 : missing_bytes = ((dev->rxPacket.cnt - (len - i) + SPI_PACKET_SIZE) & 0xffffff00);
; 103 : if (missing_bytes < 0)
; 104 : missing_bytes = 0;
00098 e3a06000 mov r6, #0
; 105 : //DBGMSG(ZONE_DETAILED, (TEXT("state %d msglen = %d, missing %d .\n"), dev->rxState, dev->rxPacket.cnt, missing_bytes));
; 106 : break;
0009c ea00006b b |$L37612|
000a0 |$L37624|
; 37 : missing_bytes = 0;
; 38 : }
; 39 : //DBGMSG(ZONE_DETAILED, (TEXT("state %d.\n"), dev->rxState));
; 40 : break;
; 41 : case RxsWait_e7:
; 42 : if((buf[i] & 0xff) == 0xe7)
000a0 e7d53007 ldrb r3, [r5, +r7]
000a4 e35300e7 cmp r3, #0xE7
000a8 1afffff9 bne |$L37622|
; 43 : dev->rxState = RxsWait_7e;
000ac e584e014 str lr, [r4, #0x14]
; 44 : else
000b0 ea000066 b |$L37612|
000b4 |$L37627|
; 45 : {
; 46 : dev->rxState = RxsWait_a5;
; 47 : missing_bytes = 0;
; 48 : }
; 49 : //DBGMSG(ZONE_DETAILED, (TEXT("state %d.\n"), dev->rxState));
; 50 : break;
; 51 : case RxsWait_7e:
; 52 : if((buf[i] & 0xff) == 0x7e)
000b4 e7d53007 ldrb r3, [r5, +r7]
000b8 e353007e cmp r3, #0x7E
; 53 : dev->rxState = RxsTypeH;
000bc 05848014 streq r8, [r4, #0x14]
000c0 0a000062 beq |$L37612|
; 54 : else
; 55 : dev->rxState = RxsWait_a5;
000c4 e584a014 str r10, [r4, #0x14]
; 56 : //DBGMSG(ZONE_DETAILED, (TEXT("state %d.\n"), dev->rxState));
; 57 : break;
000c8 ea000060 b |$L37612|
000cc |$L37630|
; 58 : case RxsTypeH:
; 59 : dev->rxPacket.pos = dev->rxbuf;
000cc e5942010 ldr r2, [r4, #0x10]
000d0 e5842018 str r2, [r4, #0x18]
; 60 : *dev->rxPacket.pos = (buf[i] & 0xff);
000d4 e19530d7 ldrsb r3, [r5, +r7]
000d8 e5c23000 strb r3, [r2]
; 61 : dev->rxPacket.pos++;
; 62 : dev->rxState = RxsTypeL;
000dc e3a02005 mov r2, #5
; 63 : //DBGMSG(ZONE_DETAILED, (TEXT("state %d.\n"), dev->rxState));
; 64 : break;
000e0 ea00000d b |$L37740|
000e4 |$L37631|
; 65 : case RxsTypeL:
; 66 : *dev->rxPacket.pos = (buf[i] & 0xff);
000e4 e5942018 ldr r2, [r4, #0x18]
000e8 e19530d7 ldrsb r3, [r5, +r7]
000ec e5c23000 strb r3, [r2]
; 67 : dev->rxPacket.pos++;
; 68 : dev->rxState = RxsGetSrcId;
000f0 e3a02006 mov r2, #6
; 69 : //DBGMSG(ZONE_DETAILED, (TEXT("state %d.\n"), dev->rxState));
; 70 : break;
000f4 ea000008 b |$L37740|
000f8 |$L37632|
; 71 : case RxsGetSrcId:
; 72 : *dev->rxPacket.pos = (buf[i] & 0xff);
000f8 e5942018 ldr r2, [r4, #0x18]
000fc e19530d7 ldrsb r3, [r5, +r7]
00100 e5c23000 strb r3, [r2]
; 73 : dev->rxPacket.pos++;
; 74 : dev->rxState = RxsGetDstId;
00104 e3a02007 mov r2, #7
; 75 : //DBGMSG(ZONE_DETAILED, (TEXT("state %d.\n"), dev->rxState));
; 76 : break;
00108 ea000003 b |$L37740|
0010c |$L37633|
; 77 : case RxsGetDstId:
; 78 : *dev->rxPacket.pos = (buf[i] & 0xff);
0010c e5942018 ldr r2, [r4, #0x18]
00110 e19530d7 ldrsb r3, [r5, +r7]
00114 e5c23000 strb r3, [r2]
; 79 : dev->rxPacket.pos++;
; 80 : dev->rxState = RxsGetLenL;
00118 e3a02008 mov r2, #8
0011c |$L37740|
0011c e5943018 ldr r3, [r4, #0x18]
00120 e5842014 str r2, [r4, #0x14]
00124 e2833001 add r3, r3, #1
00128 e5843018 str r3, [r4, #0x18]
; 81 : //DBGMSG(ZONE_DETAILED_SET, (TEXT("state %d.\n"), dev->rxState));
; 82 : break;
0012c ea000047 b |$L37612|
00130 |$L37634|
; 83 : case RxsGetLenL:
; 84 : *dev->rxPacket.pos = (buf[i] & 0xff);
00130 e1a01005 mov r1, r5
00134 e1b120d7 ldrsb r2, [r1, +r7]!
00138 e5943018 ldr r3, [r4, #0x18]
0013c e5c32000 strb r2, [r3]
; 85 : dev->rxPacket.pos++;
00140 e5943018 ldr r3, [r4, #0x18]
; 86 : dev->rxState = RxsGetLenH;
00144 e3a02009 mov r2, #9
00148 e5842014 str r2, [r4, #0x14]
0014c e2833001 add r3, r3, #1
00150 e5843018 str r3, [r4, #0x18]
; 87 : dev->rxPacket.len = (buf[i] & 0xff);
00154 e5d13000 ldrb r3, [r1]
00158 e584301c str r3, [r4, #0x1C]
; 88 : //DBGMSG(ZONE_DETAILED, (TEXT("state %d.\n"), dev->rxState));
; 89 : break;
0015c ea00003a b |$L37737|
00160 |$L37635|
; 90 : case RxsGetLenH:
; 91 : *dev->rxPacket.pos = (buf[i] & 0xff);
00160 e1a01005 mov r1, r5
00164 e1b120d7 ldrsb r2, [r1, +r7]!
00168 e5943018 ldr r3, [r4, #0x18]
0016c e5c32000 strb r2, [r3]
; 92 : dev->rxPacket.pos++;
00170 e5943018 ldr r3, [r4, #0x18]
; 93 : dev->rxState = RxsData;
00174 e3a0200a mov r2, #0xA
00178 e5842014 str r2, [r4, #0x14]
; 94 : dev->rxPacket.len |= ((unsigned short)(buf[i] & 0xff))<<8;
0017c e2833001 add r3, r3, #1
00180 e5843018 str r3, [r4, #0x18]
00184 e1d130d0 ldrsb r3, [r1]
00188 e594201c ldr r2, [r4, #0x1C]
; 105 : //DBGMSG(ZONE_DETAILED, (TEXT("state %d msglen = %d, missing %d .\n"), dev->rxState, dev->rxPacket.cnt, missing_bytes));
; 106 : break;
0018c e3a01001 mov r1, #1
00190 e1a03803 mov r3, r3, lsl #16
00194 e1a03823 mov r3, r3, lsr #16
00198 e20330ff and r3, r3, #0xFF
0019c e1823403 orr r3, r2, r3, lsl #8
001a0 e3530a01 cmp r3, #1, 20
001a4 e584301c str r3, [r4, #0x1C]
001a8 c584b01c strgt r11, [r4, #0x1C]
001ac e594301c ldr r3, [r4, #0x1C]
001b0 e2432006 sub r2, r3, #6
001b4 e0423009 sub r3, r2, r9
001b8 e0833005 add r3, r3, r5
001bc e2833c01 add r3, r3, #1, 24
001c0 e3d360ff bics r6, r3, #0xFF
001c4 e5842020 str r2, [r4, #0x20]
001c8 5a000020 bpl |$L37612|
001cc |$L37738|
; 95 :
; 96 : if(dev->rxPacket.len>RX_PACKET_SIZE)
; 97 : {
; 98 : dev->rxPacket.len=RX_PACKET_SIZE;
; 99 : }
; 100 : //DataCnt counts the remaining bytes of the message which is the length - the header already taken.
; 101 : dev->rxPacket.cnt = dev->rxPacket.len - 6;
; 102 : missing_bytes = ((dev->rxPacket.cnt - (len - i) + SPI_PACKET_SIZE) & 0xffffff00);
; 103 : if (missing_bytes < 0)
; 104 : missing_bytes = 0;
001cc e3a06000 mov r6, #0
; 105 : //DBGMSG(ZONE_DETAILED, (TEXT("state %d msglen = %d, missing %d .\n"), dev->rxState, dev->rxPacket.cnt, missing_bytes));
; 106 : break;
001d0 ea00001e b |$L37612|
001d4 |$L37639|
; 107 : case RxsData:
; 108 :
; 109 : //copying the Data of the packet
; 110 : TmpLen = len - i;
; 111 : TmpLen = min(TmpLen, dev->rxPacket.cnt);
001d4 e5943020 ldr r3, [r4, #0x20]
001d8 e0498005 sub r8, r9, r5
; 112 : memcpy(dev->rxPacket.pos,&buf[i],TmpLen);
001dc e5940018 ldr r0, [r4, #0x18]
001e0 e1580003 cmp r8, r3
001e4 a1a08003 movge r8, r3
001e8 e1a02008 mov r2, r8
001ec e0851007 add r1, r5, r7
001f0 eb000000 bl memcpy
; 113 : //DBGMSG(ZONE_DETAILED, (TEXT("found %d bytes of data.\n"), TmpLen));
; 114 : //dec Data count
; 115 : dev->rxPacket.cnt-=TmpLen;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -