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

📄 xllp_gpio.cod

📁 pxa270为硬件平台的wince操作系统XLLP驱动源码
💻 COD
📖 第 1 页 / 共 5 页
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4345 

	TTL	F:\wm520\PLATFORM\intel_dbpxa27x\Public\CSP\ARM\INTEL\PXA27X\XLLP\SOURCE\.\xllp_gpio.c
	CODE32

  00000			 AREA	 |.drectve|, DRECTVE
	DCB	"-defaultlib:coredll.lib "
	DCB	"-defaultlib:corelibc.lib "

	EXPORT	|XllpGpioGetState|
; File f:\wm520\platform\intel_dbpxa27x\public\csp\arm\intel\pxa27x\xllp\source\xllp_gpio.c

  00000			 AREA	 |.text| { |XllpGpioGetState| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$XllpGpioGetState|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioGetState| } ; comdat associative
|$T1224| DCD	|$L1223|
	DCD	0x40000f01
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |XllpGpioGetState| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |XllpGpioGetState| PROC

; 57   : 	{

  00000		 |$L1223|
  00000	e52de004	 str         lr, [sp, #-4]!
  00004		 |$M1221|

; 58   : 	XLLP_UINT32_T aGpioPinMask;
; 59   : 
; 60   : 	aGpioPinMask = 0x1 << (aGpioPin & 0x1F);
; 61   : 
; 62   : 	if(aGpioPin > 95)

  00004	e351005f	 cmp         r1, #0x5F

; 63   : 		return (pGPIO->GPLR3 & aGpioPinMask);

  00008	85903100	 ldrhi       r3, [r0, #0x100]
  0000c	e201201f	 and         r2, r1, #0x1F
  00010	e3a0e001	 mov         lr, #1
  00014	8a000005	 bhi         |$L1220|

; 64   : 	else if(aGpioPin > 63) 

  00018	e351003f	 cmp         r1, #0x3F

; 65   : 		return (pGPIO->GPLR2 & aGpioPinMask);

  0001c	85903008	 ldrhi       r3, [r0, #8]
  00020	8a000002	 bhi         |$L1220|

; 66   : 	else if(aGpioPin > 31) 

  00024	e351001f	 cmp         r1, #0x1F

; 67   : 		return (pGPIO->GPLR1 & aGpioPinMask);

  00028	85903004	 ldrhi       r3, [r0, #4]

; 68   : 	else return (pGPIO->GPLR0 & aGpioPinMask);

  0002c	95903000	 ldrls       r3, [r0]
  00030		 |$L1220|
  00030	e003021e	 and         r0, r3, lr, lsl r2

; 69   : 	}

  00034	e49de004	 ldr         lr, [sp], #4
  00038	e12fff1e	 bx          lr
  0003c		 |$M1222|

			 ENDP  ; |XllpGpioGetState|

	EXPORT	|XllpGpioGetDirection|

  00000			 AREA	 |.text| { |XllpGpioGetDirection| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$XllpGpioGetDirection|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioGetDirection| } ; comdat associative
|$T1237| DCD	|$L1236|
	DCD	0x40000f01
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |XllpGpioGetDirection| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |XllpGpioGetDirection| PROC

; 81   :     {

  00000		 |$L1236|
  00000	e52de004	 str         lr, [sp, #-4]!
  00004		 |$M1234|

; 82   : 	XLLP_UINT32_T aGpioPinMask;
; 83   : 
; 84   : 	aGpioPinMask = 0x1 << (aGpioPin & 0x1F);
; 85   : 
; 86   : 	if(aGpioPin > 95)

  00004	e351005f	 cmp         r1, #0x5F

; 87   : 		return (pGPIO->GPDR3 & aGpioPinMask);

  00008	8590310c	 ldrhi       r3, [r0, #0x10C]
  0000c	e201201f	 and         r2, r1, #0x1F
  00010	e3a0e001	 mov         lr, #1
  00014	8a000005	 bhi         |$L1233|

; 88   : 	else if(aGpioPin > 63) 

  00018	e351003f	 cmp         r1, #0x3F

; 89   : 		return (pGPIO->GPDR2 & aGpioPinMask);

  0001c	85903014	 ldrhi       r3, [r0, #0x14]
  00020	8a000002	 bhi         |$L1233|

; 90   : 	else if(aGpioPin > 31) 

  00024	e351001f	 cmp         r1, #0x1F

; 91   : 		return (pGPIO->GPDR1 & aGpioPinMask);

  00028	85903010	 ldrhi       r3, [r0, #0x10]

; 92   : 	else return (pGPIO->GPDR0 & aGpioPinMask);

  0002c	9590300c	 ldrls       r3, [r0, #0xC]
  00030		 |$L1233|
  00030	e003021e	 and         r0, r3, lr, lsl r2

; 93   :     }

  00034	e49de004	 ldr         lr, [sp], #4
  00038	e12fff1e	 bx          lr
  0003c		 |$M1235|

			 ENDP  ; |XllpGpioGetDirection|

	EXPORT	|XllpGpioSetDirectionIn|
	IMPORT	|XllpLock|
	IMPORT	|XllpUnlock|

  00000			 AREA	 |.text| { |XllpGpioSetDirectionIn| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$XllpGpioSetDirectionIn|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioSetDirectionIn| } ; comdat associative
|$T1262| DCD	|$L1261|
	DCD	0x40004902
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |XllpGpioSetDirectionIn| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |XllpGpioSetDirectionIn| PROC

; 104  :     {

  00000		 |$L1261|
  00000	e92d4ff0	 stmdb       sp!, {r4 - r11, lr}
  00004	e24dd004	 sub         sp, sp, #4
  00008		 |$M1259|
  00008	e1a04000	 mov         r4, r0
  0000c	e58d4000	 str         r4, [sp]

; 105  : 	XLLP_UINT32_T LockID;
; 106  : 	XLLP_UINT32_T aGpioPinMask;
; 107  : 	XLLP_UINT32_T aSizeArray;
; 108  : 	XLLP_UINT32_T aMask0, aMask1, aMask2, aMask3;
; 109  : 	XLLP_BOOL_T aSet0, aSet1, aSet2, aSet3;
; 110  : 	XLLP_UINT32_T i;
; 111  : 
; 112  : 	//determine size of array
; 113  : 	aSizeArray = aGpioPinArray[0];

  00010	e5910000	 ldr         r0, [r1]

; 114  : 	aMask0=aMask1=aMask2=aMask3=0;

  00014	e3a0b000	 mov         r11, #0
  00018	e3a07000	 mov         r7, #0

; 115  : 	aSet0=aSet1=aSet2=aSet3=XLLP_FALSE;
; 116  : 
; 117  : 	for(i=1; i<=aSizeArray; i++)

  0001c	e3500001	 cmp         r0, #1
  00020	e3a09000	 mov         r9, #0
  00024	e3a0a000	 mov         r10, #0
  00028	e3a0e000	 mov         lr, #0
  0002c	e3a05000	 mov         r5, #0
  00030	e3a06000	 mov         r6, #0
  00034	e3a08000	 mov         r8, #0
  00038	3a000036	 bcc         |$L754|
  0003c	e2811004	 add         r1, r1, #4
  00040	e3a04001	 mov         r4, #1
  00044		 |$L742|

; 118  : 	{
; 119  : 		aGpioPinMask = 0x1u << (aGpioPinArray[i] & 0x1F);

  00044	e5913000	 ldr         r3, [r1]
  00048	e203201f	 and         r2, r3, #0x1F

; 120  : 		if(aGpioPinArray[i] > 95)

  0004c	e353005f	 cmp         r3, #0x5F

; 121  : 		{
; 122  : 			aMask3 |= aGpioPinMask;

  00050	818bb214	 orrhi       r11, r11, r4, lsl r2

; 123  : 			aSet3=XLLP_TRUE;

  00054	83a0e001	 movhi       lr, #1
  00058	8a000009	 bhi         |$L743|

; 124  : 		}
; 125  : 		else if(aGpioPinArray[i] > 63)

  0005c	e5913000	 ldr         r3, [r1]
  00060	e353003f	 cmp         r3, #0x3F

; 126  : 		{
; 127  : 			aMask2 |= aGpioPinMask;

  00064	81877214	 orrhi       r7, r7, r4, lsl r2

; 128  : 			aSet2=XLLP_TRUE;

  00068	83a05001	 movhi       r5, #1
  0006c	8a000004	 bhi         |$L743|

; 129  : 		}
; 130  : 		else if(aGpioPinArray[i] > 31)

  00070	e353001f	 cmp         r3, #0x1F

; 131  : 		{ 
; 132  : 			aMask1 |= aGpioPinMask;

  00074	81899214	 orrhi       r9, r9, r4, lsl r2

; 133  : 			aSet1=XLLP_TRUE;

  00078	83a06001	 movhi       r6, #1

; 134  : 		}
; 135  : 		else
; 136  : 		{
; 137  : 			aMask0 |= aGpioPinMask;

  0007c	918aa214	 orrls       r10, r10, r4, lsl r2

; 138  : 			aSet0=XLLP_TRUE;

  00080	93a08001	 movls       r8, #1
  00084		 |$L743|
  00084	e2811004	 add         r1, r1, #4
  00088	e2500001	 subs        r0, r0, #1
  0008c	1affffec	 bne         |$L742|

; 139  : 		}
; 140  : 			
; 141  : 	}
; 142  : 	
; 143  : 	if(aSet3)

  00090	e59d4000	 ldr         r4, [sp]
  00094	e35e0000	 cmp         lr, #0
  00098	0a000006	 beq         |$L751|

; 144  : 	{
; 145  : 		LockID = XllpLock(GPDR3);

  0009c	e3a0001f	 mov         r0, #0x1F
  000a0	eb000000	 bl          XllpLock

; 146  : 		pGPIO->GPDR3=((pGPIO->GPDR3&~aMask3)&~XLLP_GPIO_PIN_RESERVED_BITS);

  000a4	e594310c	 ldr         r3, [r4, #0x10C]
  000a8	e1c3300b	 bic         r3, r3, r11
  000ac	e3c334fe	 bic         r3, r3, #0xFE, 8
  000b0	e584310c	 str         r3, [r4, #0x10C]

; 147  : 		XllpUnlock(LockID);

  000b4	eb000000	 bl          XllpUnlock
  000b8		 |$L751|

; 148  : 	}
; 149  : 	if(aSet2)

  000b8	e3550000	 cmp         r5, #0
  000bc	0a000005	 beq         |$L752|

; 150  : 	{
; 151  : 		LockID = XllpLock(GPDR2);

  000c0	e3a00006	 mov         r0, #6
  000c4	eb000000	 bl          XllpLock

; 152  : 		pGPIO->GPDR2=((pGPIO->GPDR2)&~aMask2);

  000c8	e5943014	 ldr         r3, [r4, #0x14]
  000cc	e1c33007	 bic         r3, r3, r7
  000d0	e5843014	 str         r3, [r4, #0x14]

; 153  : 		XllpUnlock(LockID);

  000d4	eb000000	 bl          XllpUnlock
  000d8		 |$L752|

; 154  : 	}
; 155  : 	if(aSet1)

  000d8	e3560000	 cmp         r6, #0
  000dc	0a000005	 beq         |$L753|

; 156  : 	{
; 157  : 		LockID = XllpLock(GPDR1);

  000e0	e3a00005	 mov         r0, #5
  000e4	eb000000	 bl          XllpLock

; 158  : 		pGPIO->GPDR1=((pGPIO->GPDR1)&~aMask1);

  000e8	e5943010	 ldr         r3, [r4, #0x10]
  000ec	e1c33009	 bic         r3, r3, r9
  000f0	e5843010	 str         r3, [r4, #0x10]

; 159  : 		XllpUnlock(LockID);

  000f4	eb000000	 bl          XllpUnlock
  000f8		 |$L753|

; 160  : 	}
; 161  : 	if(aSet0)

  000f8	e3580000	 cmp         r8, #0
  000fc	0a000005	 beq         |$L754|

; 162  : 	{
; 163  : 		LockID = XllpLock(GPDR0);

  00100	e3a00004	 mov         r0, #4
  00104	eb000000	 bl          XllpLock

; 164  : 		pGPIO->GPDR0=((pGPIO->GPDR0)&~aMask0);

  00108	e594300c	 ldr         r3, [r4, #0xC]
  0010c	e1c3300a	 bic         r3, r3, r10
  00110	e584300c	 str         r3, [r4, #0xC]

; 165  : 		XllpUnlock(LockID);

  00114	eb000000	 bl          XllpUnlock
  00118		 |$L754|

; 166  : 	}
; 167  :     }

  00118	e28dd004	 add         sp, sp, #4
  0011c	e8bd4ff0	 ldmia       sp!, {r4 - r11, lr}
  00120	e12fff1e	 bx          lr
  00124		 |$M1260|

			 ENDP  ; |XllpGpioSetDirectionIn|

	EXPORT	|XllpGpioSetDirectionOut|

  00000			 AREA	 |.text| { |XllpGpioSetDirectionOut| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$XllpGpioSetDirectionOut|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpGpioSetDirectionOut| } ; comdat associative
|$T1287| DCD	|$L1286|
	DCD	0x40004902
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |XllpGpioSetDirectionOut| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |XllpGpioSetDirectionOut| PROC

; 178  :     {

  00000		 |$L1286|
  00000	e92d4ff0	 stmdb       sp!, {r4 - r11, lr}
  00004	e24dd004	 sub         sp, sp, #4
  00008		 |$M1284|
  00008	e1a04000	 mov         r4, r0
  0000c	e58d4000	 str         r4, [sp]

; 179  : 	XLLP_UINT32_T LockID;
; 180  : 	XLLP_UINT32_T aGpioPinMask;
; 181  : 	XLLP_UINT32_T aSizeArray;
; 182  : 	XLLP_UINT32_T aMask0, aMask1, aMask2, aMask3;
; 183  : 	XLLP_BOOL_T aSet0, aSet1, aSet2, aSet3;
; 184  : 	XLLP_UINT32_T i;
; 185  : 
; 186  : 	//determine size of array
; 187  : 	aSizeArray = aGpioPinArray[0];

  00010	e5910000	 ldr         r0, [r1]

; 188  : 	aMask0=aMask1=aMask2=aMask3=0;

  00014	e3a0b000	 mov         r11, #0
  00018	e3a08000	 mov         r8, #0

; 189  : 	aSet0=aSet1=aSet2=aSet3=XLLP_FALSE;
; 190  : 	
; 191  : 	for(i=1; i<=aSizeArray; i++)

  0001c	e3500001	 cmp         r0, #1
  00020	e3a0a000	 mov         r10, #0
  00024	e3a09000	 mov         r9, #0
  00028	e3a0e000	 mov         lr, #0
  0002c	e3a05000	 mov         r5, #0
  00030	e3a06000	 mov         r6, #0
  00034	e3a07000	 mov         r7, #0
  00038	3a000036	 bcc         |$L784|
  0003c	e2811004	 add         r1, r1, #4
  00040	e3a04001	 mov         r4, #1
  00044		 |$L772|

; 192  : 	{
; 193  : 		aGpioPinMask = 0x1u << (aGpioPinArray[i] & 0x1F);

  00044	e5913000	 ldr         r3, [r1]
  00048	e203201f	 and         r2, r3, #0x1F

; 194  : 		if(aGpioPinArray[i] > 95)

  0004c	e353005f	 cmp         r3, #0x5F

; 195  : 		{
; 196  : 			aMask3 |= aGpioPinMask;

  00050	818bb214	 orrhi       r11, r11, r4, lsl r2

; 197  : 			aSet3=XLLP_TRUE;

  00054	83a0e001	 movhi       lr, #1
  00058	8a000009	 bhi         |$L773|

; 198  : 		}
; 199  : 		else if(aGpioPinArray[i] > 63)

  0005c	e5913000	 ldr         r3, [r1]
  00060	e353003f	 cmp         r3, #0x3F

; 200  : 		{
; 201  : 			aMask2 |= aGpioPinMask;

  00064	81888214	 orrhi       r8, r8, r4, lsl r2

; 202  : 			aSet2=XLLP_TRUE;

  00068	83a05001	 movhi       r5, #1
  0006c	8a000004	 bhi         |$L773|

; 203  : 		}
; 204  : 		else if(aGpioPinArray[i] > 31)

  00070	e353001f	 cmp         r3, #0x1F

; 205  : 		{
; 206  : 			aMask1 |= aGpioPinMask;

  00074	818aa214	 orrhi       r10, r10, r4, lsl r2

; 207  : 			aSet1=XLLP_TRUE;

  00078	83a06001	 movhi       r6, #1

; 208  : 		}
; 209  : 		else
; 210  : 		{
; 211  : 			aMask0 |= aGpioPinMask;

  0007c	91899214	 orrls       r9, r9, r4, lsl r2

; 212  : 			aSet0=XLLP_TRUE;

  00080	93a07001	 movls       r7, #1
  00084		 |$L773|
  00084	e2811004	 add         r1, r1, #4
  00088	e2500001	 subs        r0, r0, #1
  0008c	1affffec	 bne         |$L772|

; 213  : 		}
; 214  : 	}
; 215  : 	if(aSet3)

  00090	e59d4000	 ldr         r4, [sp]
  00094	e35e0000	 cmp         lr, #0
  00098	0a000006	 beq         |$L781|

; 216  : 	{
; 217  : 		LockID = XllpLock(GPDR3);

  0009c	e3a0001f	 mov         r0, #0x1F

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -