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

📄 xllp_keypad.cod

📁 pxa270为硬件平台的wince操作系统XLLP驱动源码
💻 COD
📖 第 1 页 / 共 3 页
字号:
; 166  : 			}		
; 167  : 			*key = (unsigned char) ((C<<4) | RthBit);

  00170	e1833202	 orr         r3, r3, r2, lsl #4

; 168  :    		}
; 169  : 		else

  00174	ea000009	 b           |$L865|
  00178		 |$L712|

; 157  : 					else
; 158  : 					   RthBit = 0x4; 
; 159  : 				}else		
; 160  : 				{
; 161  : 			 		if (c4 > 0x2)

  00178	e3530002	 cmp         r3, #2

; 162  : 					   RthBit = 0x1; 
; 163  : 					else

  0017c	eaffffee	 b           |$L872|
  00180		 |$L716|

; 164  : 					   RthBit = 0x0; 

  00180	e3a03000	 mov         r3, #0

; 165  : 				}		
; 166  : 			}		
; 167  : 			*key = (unsigned char) ((C<<4) | RthBit);

  00184	e1833202	 orr         r3, r3, r2, lsl #4

; 168  :    		}
; 169  : 		else

  00188	ea000004	 b           |$L865|
  0018c		 |$L849|

; 164  : 					   RthBit = 0x0; 

  0018c	e59d2000	 ldr         r2, [sp]
  00190	e59d3000	 ldr         r3, [sp]

; 165  : 				}		
; 166  : 			}		
; 167  : 			*key = (unsigned char) ((C<<4) | RthBit);

  00194	e1833202	 orr         r3, r3, r2, lsl #4

; 168  :    		}
; 169  : 		else

  00198	ea000000	 b           |$L865|
  0019c		 |$L668|

; 170  : 			*key = NO_KEY;

  0019c	e3a030ff	 mov         r3, #0xFF
  001a0		 |$L865|
  001a0	e5c83000	 strb        r3, [r8]

; 171  : 
; 172  : // 		 RETAILMSG(1,(TEXT("R is %x C is %x key is %x\r\n"), RthBit,C,*key));
; 173  : 
; 174  : 		retval = XLLP_TRUE;

  001a4	e3a00001	 mov         r0, #1
  001a8		 |$L664|

; 175  : 	}
; 176  : //    RETAILMSG(1,(TEXT("ReadScanCodeAutomatically<\r\n")));
; 177  :   	return(retval);
; 178  : }

  001a8	e28dd004	 add         sp, sp, #4
  001ac	e8bd41f0	 ldmia       sp!, {r4 - r8, lr}
  001b0	e12fff1e	 bx          lr
  001b4		 |$L880|
  001b4	00000000	 DCD         |KP_Status|
  001b8		 |$M876|

			 ENDP  ; |ReadScanCodeAutomatically|

	EXPORT	|XllpKpKeypressIsInProgress|

  00004			 AREA	 |.bss|, NOINIT
|?gplr0_InPinMask@?1??XllpKpKeypressIsInProgress@@9@9| % 0x4 ; `XllpKpKeypressIsInProgress'::`2'::gplr0_InPinMask
|?gplr0_OutPinMask@?1??XllpKpKeypressIsInProgress@@9@9| % 0x4 ; `XllpKpKeypressIsInProgress'::`2'::gplr0_OutPinMask
|?gplr0_AllPinsMask@?1??XllpKpKeypressIsInProgress@@9@9| % 0x4 ; `XllpKpKeypressIsInProgress'::`2'::gplr0_AllPinsMask
|?gplr1_InPinMask@?1??XllpKpKeypressIsInProgress@@9@9| % 0x4 ; `XllpKpKeypressIsInProgress'::`2'::gplr1_InPinMask
|?gplr1_OutPinMask@?1??XllpKpKeypressIsInProgress@@9@9| % 0x4 ; `XllpKpKeypressIsInProgress'::`2'::gplr1_OutPinMask
|?gplr1_AllPinsMask@?1??XllpKpKeypressIsInProgress@@9@9| % 0x4 ; `XllpKpKeypressIsInProgress'::`2'::gplr1_AllPinsMask
|?gplr2_InPinMask@?1??XllpKpKeypressIsInProgress@@9@9| % 0x4 ; `XllpKpKeypressIsInProgress'::`2'::gplr2_InPinMask
|?gplr2_OutPinMask@?1??XllpKpKeypressIsInProgress@@9@9| % 0x4 ; `XllpKpKeypressIsInProgress'::`2'::gplr2_OutPinMask
|?gplr2_AllPinsMask@?1??XllpKpKeypressIsInProgress@@9@9| % 0x4 ; `XllpKpKeypressIsInProgress'::`2'::gplr2_AllPinsMask
|?gplr3_InPinMask@?1??XllpKpKeypressIsInProgress@@9@9| % 0x4 ; `XllpKpKeypressIsInProgress'::`2'::gplr3_InPinMask
|?gplr3_OutPinMask@?1??XllpKpKeypressIsInProgress@@9@9| % 0x4 ; `XllpKpKeypressIsInProgress'::`2'::gplr3_OutPinMask
|?gplr3_AllPinsMask@?1??XllpKpKeypressIsInProgress@@9@9| % 0x4 ; `XllpKpKeypressIsInProgress'::`2'::gplr3_AllPinsMask

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

  00000			 AREA	 |.pdata$$XllpKpKeypressIsInProgress|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpKpKeypressIsInProgress| } ; comdat associative
|$T897|	DCD	|$L896|
	DCD	0x40009302
; Function compile flags: /Ogsy

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

  00000		 |XllpKpKeypressIsInProgress| PROC

; 195  : {

  00000		 |$L896|
  00000	e92d4ff0	 stmdb       sp!, {r4 - r11, lr}
  00004	e24dd014	 sub         sp, sp, #0x14
  00008		 |$M894|
  00008	e1a02000	 mov         r2, r0
  0000c	e58d2010	 str         r2, [sp, #0x10]

; 196  :     // Note that GPIOs used here only include MKOUTs, MKINs and non-rotary DKINs.
; 197  : 
; 198  :     static XLLP_BOOL_T xllpKpKIP_Initialized = XLLP_FALSE;
; 199  :     static XLLP_UINT32_T gplr0_InPinMask, gplr0_OutPinMask, gplr0_AllPinsMask,
; 200  :                          gplr1_InPinMask, gplr1_OutPinMask, gplr1_AllPinsMask,
; 201  :                          gplr2_InPinMask, gplr2_OutPinMask, gplr2_AllPinsMask,
; 202  :                          gplr3_InPinMask, gplr3_OutPinMask, gplr3_AllPinsMask;
; 203  : 
; 204  :     XLLP_UINT32_T i;
; 205  :     XLLP_UINT32_T gpioRegTmp;
; 206  :     XLLP_UINT32_T activity  = 0;
; 207  : 
; 208  :     // Set up masks only once.  Do this in code rather than precalculation to expose
; 209  :     //  the algorithm and make it easily re-usable.  Perform full init because fairly
; 210  :     //  fast and only done once.
; 211  : 
; 212  :     if (!xllpKpKIP_Initialized)

  00010	e59f1230	 ldr         r1, [pc, #0x230]
  00014	e5913030	 ldr         r3, [r1, #0x30]
  00018	e3530000	 cmp         r3, #0
  0001c	1a00007a	 bne         |$L888|

; 213  :     {
; 214  :         gplr0_InPinMask = gplr0_OutPinMask = gplr0_AllPinsMask =
; 215  :         gplr1_InPinMask = gplr1_OutPinMask = gplr1_AllPinsMask =
; 216  :         gplr2_InPinMask = gplr2_OutPinMask = gplr2_AllPinsMask =
; 217  :         gplr3_InPinMask = gplr3_OutPinMask = gplr3_AllPinsMask = 0;
; 218  : 
; 219  :         for (i=1 ;i<(XllpKpdGpioDirNonScrollWheelInList[0]+1) ;i++ )

  00020	e59fe21c	 ldr         lr, [pc, #0x21C]
  00024	e3a04000	 mov         r4, #0
  00028	e3a07000	 mov         r7, #0
  0002c	e59e3000	 ldr         r3, [lr]
  00030	e3a05000	 mov         r5, #0
  00034	e3a0a000	 mov         r10, #0
  00038	e2833001	 add         r3, r3, #1
  0003c	e3a08000	 mov         r8, #0
  00040	e3a0b000	 mov         r11, #0
  00044	e3a09000	 mov         r9, #0
  00048	e3a06000	 mov         r6, #0
  0004c	e3530001	 cmp         r3, #1
  00050	e58d7004	 str         r7, [sp, #4]
  00054	e58da008	 str         r10, [sp, #8]
  00058	e58db00c	 str         r11, [sp, #0xC]
  0005c	e58d6000	 str         r6, [sp]
  00060	e5814008	 str         r4, [r1, #8]
  00064	e5817020	 str         r7, [r1, #0x20]
  00068	e581502c	 str         r5, [r1, #0x2C]
  0006c	e581a014	 str         r10, [r1, #0x14]
  00070	e5818018	 str         r8, [r1, #0x18]
  00074	e581b000	 str         r11, [r1]
  00078	e5819028	 str         r9, [r1, #0x28]
  0007c	e5816024	 str         r6, [r1, #0x24]
  00080	9a00002b	 bls         |$L755|
  00084	e28e0004	 add         r0, lr, #4
  00088	e3a0e000	 mov         lr, #0
  0008c	e2436001	 sub         r6, r3, #1
  00090	e3a09001	 mov         r9, #1
  00094	e3a08001	 mov         r8, #1
  00098	e3a05001	 mov         r5, #1
  0009c	e3a04001	 mov         r4, #1
  000a0		 |$L753|

; 220  :         {
; 221  :             switch (XllpKpdGpioDirNonScrollWheelInList[i] / 32) // 32 pins per level register

  000a0	e5902000	 ldr         r2, [r0]
  000a4	e1b032a2	 movs        r3, r2, lsr #5
  000a8	0a000010	 beq         |$L760|
  000ac	e3530001	 cmp         r3, #1
  000b0	0a00000a	 beq         |$L761|
  000b4	e3530002	 cmp         r3, #2
  000b8	0a000004	 beq         |$L762|
  000bc	e3530003	 cmp         r3, #3
  000c0	1a00000d	 bne         |$L754|

; 232  :                 case 3:
; 233  :                     gplr3_InPinMask |= (1u << (XllpKpdGpioDirNonScrollWheelInList[i] &31));

  000c4	e202301f	 and         r3, r2, #0x1F
  000c8	e1877319	 orr         r7, r7, r9, lsl r3

; 234  :                     break;

  000cc	ea00000a	 b           |$L754|
  000d0		 |$L762|

; 229  :                 case 2:
; 230  :                     gplr2_InPinMask |= (1u << (XllpKpdGpioDirNonScrollWheelInList[i] &31));

  000d0	e202301f	 and         r3, r2, #0x1F
  000d4	e18aa318	 orr         r10, r10, r8, lsl r3
  000d8	e581a014	 str         r10, [r1, #0x14]

; 231  :                     break;

  000dc	ea000006	 b           |$L754|
  000e0		 |$L761|

; 225  :                     break;
; 226  :                 case 1:
; 227  :                     gplr1_InPinMask |= (1u << (XllpKpdGpioDirNonScrollWheelInList[i] &31));

  000e0	e202301f	 and         r3, r2, #0x1F
  000e4	e18bb315	 orr         r11, r11, r5, lsl r3
  000e8	e581b000	 str         r11, [r1]

; 228  :                     break;

  000ec	ea000002	 b           |$L754|
  000f0		 |$L760|

; 222  :             {
; 223  :                 case 0:
; 224  :                     gplr0_InPinMask |= (1u << (XllpKpdGpioDirNonScrollWheelInList[i] &31));

  000f0	e202301f	 and         r3, r2, #0x1F
  000f4	e18ee314	 orr         lr, lr, r4, lsl r3
  000f8	e581e024	 str         lr, [r1, #0x24]
  000fc		 |$L754|
  000fc	e2800004	 add         r0, r0, #4
  00100	e2566001	 subs        r6, r6, #1
  00104	1affffe5	 bne         |$L753|
  00108	e58de000	 str         lr, [sp]
  0010c	e59fe130	 ldr         lr, [pc, #0x130]
  00110	e59d6000	 ldr         r6, [sp]

; 225  :                     break;
; 226  :                 case 1:
; 227  :                     gplr1_InPinMask |= (1u << (XllpKpdGpioDirNonScrollWheelInList[i] &31));

  00114	e58db00c	 str         r11, [sp, #0xC]

; 229  :                 case 2:
; 230  :                     gplr2_InPinMask |= (1u << (XllpKpdGpioDirNonScrollWheelInList[i] &31));

  00118	e58da008	 str         r10, [sp, #8]

; 232  :                 case 3:
; 233  :                     gplr3_InPinMask |= (1u << (XllpKpdGpioDirNonScrollWheelInList[i] &31));

  0011c	e58d7004	 str         r7, [sp, #4]
  00120	e5817020	 str         r7, [r1, #0x20]
  00124	e3a04000	 mov         r4, #0
  00128	e3a05000	 mov         r5, #0
  0012c	e3a08000	 mov         r8, #0
  00130	e3a09000	 mov         r9, #0
  00134		 |$L755|

; 235  :             }
; 236  :         }  // Input pin masks
; 237  : 
; 238  :         for (i=1 ;i<XllpKpdGpioDirOutList[0]+1 ;i++ )

  00134	e59e3020	 ldr         r3, [lr, #0x20]
  00138	e2832001	 add         r2, r3, #1
  0013c	e3520001	 cmp         r2, #1
  00140	9a000025	 bls         |$L766|
  00144	e28e3020	 add         r3, lr, #0x20
  00148	e2830004	 add         r0, r3, #4
  0014c	e242e001	 sub         lr, r2, #1
  00150	e3a06001	 mov         r6, #1
  00154	e3a0a001	 mov         r10, #1
  00158	e3a0b001	 mov         r11, #1
  0015c	e3a07001	 mov         r7, #1
  00160		 |$L764|

; 239  :         {
; 240  :             switch (XllpKpdGpioDirOutList[i] / 32) // 32 pins per level register

  00160	e5903000	 ldr         r3, [r0]
  00164	e1b022a3	 movs        r2, r3, lsr #5
  00168	0a000010	 beq         |$L771|
  0016c	e3520001	 cmp         r2, #1
  00170	0a00000a	 beq         |$L772|
  00174	e3520002	 cmp         r2, #2
  00178	0a000004	 beq         |$L773|
  0017c	e3520003	 cmp         r2, #3
  00180	1a00000d	 bne         |$L765|

; 251  :                 case 3:
; 252  :                     gplr3_OutPinMask |= (1u << (XllpKpdGpioDirOutList[i] &31));

  00184	e203301f	 and         r3, r3, #0x1F
  00188	e1844316	 orr         r4, r4, r6, lsl r3

; 253  :                     break;

  0018c	ea00000a	 b           |$L765|
  00190		 |$L773|

; 248  :                 case 2:
; 249  :                     gplr2_OutPinMask |= (1u << (XllpKpdGpioDirOutList[i] &31));

  00190	e203301f	 and         r3, r3, #0x1F
  00194	e185531a	 orr         r5, r5, r10, lsl r3
  00198	e581502c	 str         r5, [r1, #0x2C]

; 250  :                     break;

  0019c	ea000006	 b           |$L765|
  001a0		 |$L772|

; 244  :                     break;
; 245  :                 case 1:
; 246  :                     gplr1_OutPinMask |= (1u << (XllpKpdGpioDirOutList[i] &31));

  001a0	e203301f	 and         r3, r3, #0x1F
  001a4	e188831b	 orr         r8, r8, r11, lsl r3
  001a8	e5818018	 str         r8, [r1, #0x18]

; 247  :                     break;

  001ac	ea000002	 b           |$L765|
  001b0		 |$L771|

; 241  :             {
; 242  :                 case 0:
; 243  :                     gplr0_OutPinMask |= (1u << (XllpKpdGpioDirOutList[i] &31));

  001b0	e203301f	 and         r3, r3, #0x1F
  001b4	e1899317	 orr         r9, r9, r7, lsl r3
  001b8	e5819028	 str         r9, [r1, #0x28]
  001bc		 |$L765|
  001bc	e2800004	 add         r0, r0, #4
  001c0	e25ee001	 subs        lr, lr, #1
  001c4	1affffe5	 bne         |$L764|
  001c8	e59d7004	 ldr         r7, [sp, #4]
  001cc	e59da008	 ldr         r10, [sp, #8]
  001d0	e59db00c	 ldr         r11, [sp, #0xC]
  001d4	e59d6000	 ldr         r6, [sp]

; 251  :                 case 3:
; 252  :                     gplr3_OutPinMask |= (1u << (XllpKpdGpioDirOutList[i] &31));

  001d8	e5814008	 str         r4, [r1, #8]
  001dc		 |$L766|

; 254  :             }
; 255  :         }  // Output pin masks
; 256  : 
; 257  :         gplr0_AllPinsMask = gplr0_InPinMask | gplr0_OutPinMask; 

  001dc	e1893006	 orr         r3, r9, r6

; 258  :         gplr1_AllPinsMask = gplr1_InPinMask | gplr1_OutPinMask; 

  001e0	e188200b	 orr         r2, r8, r11

; 259  :         gplr2_AllPinsMask = gplr2_InPinMask | gplr2_OutPinMask; 
; 260  :         gplr3_AllPinsMask = gplr3_InPinMask | gplr3_OutPinMask; 
; 261  : 
; 262  :         xllpKpKIP_Initialized = XLLP_TRUE;    

  001e4	e3a06001	 mov         r6, #1
  001e8	e185000a	 orr         r0, r5, r10
  001ec	e184e007	 orr         lr, r4, r7
  001f0	e581200c	 str         r2, [r1, #0xC]
  001f4	e59d2010	 ldr         r2, [sp, #0x10]
  001f8	e5816030	 str         r6, [r1, #0x30]
  001fc	e5813004	 str         r3, [r1, #4]
  00200	e5810010	 str         r0, [r1, #0x10]
  00204	e581e01c	 str         lr, [r1, #0x1C]
  00208	ea000003	 b           |$L752|
  0020c		 |$L888|
  0020c	e591502c	 ldr         r5, [r1, #0x2C]
  00210	e5910010	 ldr         r0, [r1, #0x10]
  00214	e5914008	 ldr         r4, [r1, #8]
  00218	e591e01c	 ldr         lr, [r1, #0x1C]
  0021c		 |$L752|

; 263  :     }
; 264  : 
; 265  :     // Main calculation
; 266  :     // Platform-specific optimization: For Mainstone, no keypad pins in GPLR[1:0].
; 267  : 
; 268  :     gpioRegTmp = v_pGPIOReg->GPLR2 ;

  0021c	e5923008	 ldr         r3, [r2, #8]

; 269  :     activity =  (gpioRegTmp ^ gplr2_OutPinMask) & gplr2_AllPinsMask;
; 270  : 
; 271  :     gpioRegTmp = v_pGPIOReg->GPLR3 ;

  00220	e5922100	 ldr         r2, [r2, #0x100]
  00224	e0253003	 eor         r3, r5, r3
  00228	e0031000	 and         r1, r3, r0

; 272  :     activity |= (gpioRegTmp ^ gplr3_OutPinMask) & gplr3_AllPinsMask;

  0022c	e0243002	 eor         r3, r4, r2
  00230	e003300e	 and         r3, r3, lr
  00234	e1830001	 orr         r0, r3, r1

; 273  : 
; 274  :     return(activity);
; 275  : 
; 276  : } // XllpKpKeypressIsInProgress()

  00238	e28dd014	 add         sp, sp, #0x14
  0023c	e8bd4ff0	 ldmia       sp!, {r4 - r11, lr}
  00240	e12fff1e	 bx          lr
  00244		 |$L899|
  00244	00000000	 DCD         |XllpKpdGpioDirNonScrollWheelInList|
  00248	00000000	 DCD         |?gplr1_InPinMask@?1??XllpKpKeypressIsInProgress@@9@9|
  0024c		 |$M895|

			 ENDP  ; |XllpKpKeypressIsInProgress|

	EXPORT	|ReadDirectKeys|

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

  00000			 AREA	 |.pdata$$ReadDirectKeys|, PDATA, SELECTION=5, ASSOC=|.text| { |ReadDirectKeys| } ; comdat associative
|$T916|	DCD	|$L915|
	DCD	0x40002e01
; Function compile flags: /Ogsy

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

  00000		 |ReadDirectKeys| PROC

; 285  : {

  00000		 |$L915|
  00000	e92d4010	 stmdb       sp!, {r4, lr}
  00004		 |$M913|

; 286  : 	XLLP_UINT32_T CurrCount,SaveKpRotaryEncoderCountReg;
; 287  : 	static XLLP_UINT32_T PrevCount=START_VALUE;
; 288  : 	XLLP_BOOL_T retval;
; 289  : 	if(KP_Status & DIRECT_INTR_BIT)

  00004	e59f30a8	 ldr         r3, [pc, #0xA8]
  00008	e5933000	 ldr         r3, [r3]
  0000c	e3130020	 tst         r3, #0x20
  00010	0a000023	 beq         |$L786|

; 290  : 	{
; 291  : 		SaveKpRotaryEncoderCountReg = v_pKeyPadRegs->kpRotaryEncoderCountReg; 

  00014	e5902010	 ldr         r2, [r0, #0x10]

; 292  : 		CurrCount = SaveKpRotaryEncoderCountReg & COUNT_MASK;

  00018	e20230ff	 and         r3, r2, #0xFF

; 293  : 		if(SaveKpRotaryEncoderCountReg & OVERFLOW_ROTARY_ENC_0)

  0001c	e3120902	 tst         r2, #2, 18
  00020	0a000009	 beq         |$L787|

; 297  : 			*key	= SCAN_CODE_SCROLL_UP;					// Scroll Up

  00024	e3a0400a	 mov         r4, #0xA
  00028		 |$L912|

; 294  : 		{
; 295  : 			v_pKeyPadRegs->kpRotaryEncoderCountReg = START_VALUE;
; 296  : 			PrevCount	= START_VALUE;

  00028	e59f3080	 ldr         r3, [pc, #0x80]

⌨️ 快捷键说明

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