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

📄 smsspicommon.cod

📁 这是mobile6.0下的DMB驱动
💻 COD
📖 第 1 页 / 共 2 页
字号:
; 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 + -