📄 xllp_keypad.cod
字号:
0002c e3a0207f mov r2, #0x7F
00030 e3a0e07f mov lr, #0x7F
; 297 : *key = SCAN_CODE_SCROLL_UP; // Scroll Up
00034 e5802010 str r2, [r0, #0x10]
00038 e583e000 str lr, [r3]
0003c e5c14000 strb r4, [r1]
; 316 : {
; 317 : *key = SCAN_CODE_ACTION; // Action Key
; 318 : }
; 319 :
; 320 : retval = XLLP_TRUE; // Signal availability
00040 e3a00001 mov r0, #1
; 325 : }
; 326 :
; 327 : return(retval);
; 328 : }
00044 e8bd4010 ldmia sp!, {r4, lr}
00048 e12fff1e bx lr
0004c |$L787|
; 298 : }
; 299 : else if(SaveKpRotaryEncoderCountReg & UNDERFLOW_ROTARY_ENC_0)
0004c e3120901 tst r2, #1, 18
; 300 : {
; 301 : v_pKeyPadRegs->kpRotaryEncoderCountReg = START_VALUE;
; 302 : PrevCount = START_VALUE;
; 303 : *key = SCAN_CODE_SCROLL_DOWN; // Scroll Down
00050 13a0400b movne r4, #0xB
00054 1afffff3 bne |$L912|
; 304 : }
; 305 : else if(CurrCount > PrevCount)
00058 e59f2050 ldr r2, [pc, #0x50]
0005c e592e000 ldr lr, [r2]
00060 e153000e cmp r3, lr
00064 9a000005 bls |$L909|
; 306 : {
; 307 : *key = SCAN_CODE_SCROLL_UP;
00068 e3a0000a mov r0, #0xA
0006c |$L911|
0006c e5c10000 strb r0, [r1]
; 316 : {
; 317 : *key = SCAN_CODE_ACTION; // Action Key
; 318 : }
; 319 :
; 320 : retval = XLLP_TRUE; // Signal availability
00070 e3a00001 mov r0, #1
00074 e5823000 str r3, [r2]
; 325 : }
; 326 :
; 327 : return(retval);
; 328 : }
00078 e8bd4010 ldmia sp!, {r4, lr}
0007c e12fff1e bx lr
00080 |$L909|
; 311 : {
; 312 : *key = SCAN_CODE_SCROLL_DOWN;
00080 33a0000b movcc r0, #0xB
; 308 : PrevCount = CurrCount; // Scroll Up
; 309 : }
; 310 : else if(CurrCount < PrevCount)
00084 3afffff8 bcc |$L911|
; 313 : PrevCount = CurrCount; // Scroll Down
; 314 : }
; 315 : else if(v_pKeyPadRegs->kpDirectKeyReg & DIRECT_KEY_IN_2)
00088 e5903008 ldr r3, [r0, #8]
; 316 : {
; 317 : *key = SCAN_CODE_ACTION; // Action Key
; 318 : }
; 319 :
; 320 : retval = XLLP_TRUE; // Signal availability
0008c e3a00001 mov r0, #1
00090 e3130004 tst r3, #4
00094 13a0300c movne r3, #0xC
00098 15c13000 strneb r3, [r1]
; 325 : }
; 326 :
; 327 : return(retval);
; 328 : }
0009c e8bd4010 ldmia sp!, {r4, lr}
000a0 e12fff1e bx lr
000a4 |$L786|
; 321 : }
; 322 : else
; 323 : {
; 324 : retval = XLLP_FALSE;
000a4 e3a00000 mov r0, #0
; 325 : }
; 326 :
; 327 : return(retval);
; 328 : }
000a8 e8bd4010 ldmia sp!, {r4, lr}
000ac e12fff1e bx lr
000b0 |$L918|
000b0 00000000 DCD |?PrevCount@?1??ReadDirectKeys@@9@9|
000b4 00000000 DCD |KP_Status|
000b8 |$M914|
ENDP ; |ReadDirectKeys|
EXPORT |XllpReadScanCode|
00000 AREA |.text| { |XllpReadScanCode| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpReadScanCode|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpReadScanCode| } ; comdat associative
|$T929| DCD |$L928|
DCD 0x40001402
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpReadScanCode| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpReadScanCode| PROC
; 337 : {
00000 |$L928|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M926|
00008 e1a05001 mov r5, r1
0000c e1a04000 mov r4, r0
; 338 : // Initialise to NO Key scan code, same as key UP
; 339 : XLLP_UINT8_T key = NO_KEY;
00010 e3a030ff mov r3, #0xFF
; 340 :
; 341 : if(!ReadDirectKeys(v_pKeyPadRegs,&key))
00014 e28d1000 add r1, sp, #0
00018 e5cd3000 strb r3, [sp]
0001c eb000000 bl ReadDirectKeys
00020 e3500000 cmp r0, #0
; 342 : ReadScanCodeAutomatically(v_pKeyPadRegs,&key);
00024 028d1000 addeq r1, sp, #0
00028 01a00004 moveq r0, r4
0002c 0b000000 bleq ReadScanCodeAutomatically
; 343 :
; 344 : // Assign the Key Here
; 345 : *pui8Data = key;
00030 e5dd3000 ldrb r3, [sp]
; 346 :
; 347 : if(*pui8Data == NO_KEY)
00034 e35300ff cmp r3, #0xFF
; 348 : return(XLLP_FALSE);
00038 03a00000 moveq r0, #0
; 349 : else
; 350 : return(XLLP_TRUE); // Enjoy
0003c 13a00001 movne r0, #1
00040 e5c53000 strb r3, [r5]
; 351 : }
00044 e28dd004 add sp, sp, #4
00048 e8bd4030 ldmia sp!, {r4, r5, lr}
0004c e12fff1e bx lr
00050 |$M927|
ENDP ; |XllpReadScanCode|
EXPORT |XllpSetUpKeyPadInterrupts|
00000 AREA |.text| { |XllpSetUpKeyPadInterrupts| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpSetUpKeyPadInterrupts|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpSetUpKeyPadInterrupts| } ; comdat associative
|$T941| DCD |$L940|
DCD 0x40001100
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpSetUpKeyPadInterrupts| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpSetUpKeyPadInterrupts| PROC
; 359 : {
00000 |$L940|
00000 |$M938|
00000 e3510000 cmp r1, #0
; 360 : KP_Status = v_pKeyPadRegs->kpControlReg;
00004 e59f2034 ldr r2, [pc, #0x34]
00008 e5903000 ldr r3, [r0]
0000c e5823000 str r3, [r2]
; 361 :
; 362 : if(fEnDis)
; 363 : {
; 364 : EN_DIRECT_KEYS_INTR();
00010 e5903000 ldr r3, [r0]
00014 13833001 orrne r3, r3, #1
00018 15803000 strne r3, [r0]
; 365 : EN_MAT_KEYS_INTR();
0001c 15903000 ldrne r3, [r0]
00020 13833b02 orrne r3, r3, #2, 22
; 366 : }
; 367 : else
; 368 : {
; 369 : DISABLE_DIRECT_KEYS_INTR();
; 370 : DISABLE_MAT_KEYS_INTR();
00024 03c33001 biceq r3, r3, #1
00028 05803000 streq r3, [r0]
0002c 05903000 ldreq r3, [r0]
00030 03c33b02 biceq r3, r3, #2, 22
00034 e5803000 str r3, [r0]
; 371 : }
; 372 : return(XLLP_TRUE);
00038 e3a00001 mov r0, #1
; 373 : }
0003c e12fff1e bx lr
00040 |$L943|
00040 00000000 DCD |KP_Status|
00044 |$M939|
ENDP ; |XllpSetUpKeyPadInterrupts|
EXPORT |XllpKeyPadConfigure|
IMPORT |XllpGpioSetDirectionIn|
IMPORT |XllpGpioSetDirectionOut|
IMPORT |XllpGpioSetOutput0|
IMPORT |XllpGpioSetAlternateFn|
00000 AREA |.text| { |XllpKeyPadConfigure| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpKeyPadConfigure|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpKeyPadConfigure| } ; comdat associative
|$T954| DCD |$L953|
DCD 0x40008602
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpKeyPadConfigure| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpKeyPadConfigure| PROC
; 404 : {
00000 |$L953|
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 e24dd0d4 sub sp, sp, #0xD4
00008 |$M951|
00008 e1b04001 movs r4, r1
0000c e1a05000 mov r5, r0
; 405 : XLLP_BOOL_T retval=XLLP_FALSE;
; 406 : XLLP_UINT32_T GpioDirOutList[]={7,96,103,104,105,106,107,108};
; 407 : XLLP_UINT32_T GpioDirInList[]={9,93,94,95,97,98,99,100,101,102};
; 408 : XLLP_UINT32_T GpioAltFnPinList[]={16,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108};
; 409 : XLLP_UINT32_T GpioAltFnValList[]={16,1,1,3,3,3,3,3,1,1,1,2,2,2,2,2,2};
00010 e3a03007 mov r3, #7
00014 e58d3000 str r3, [sp]
00018 e3a0305f mov r3, #0x5F
0001c e58d302c str r3, [sp, #0x2C]
00020 e3a03061 mov r3, #0x61
00024 e58d3030 str r3, [sp, #0x30]
00028 e3a03062 mov r3, #0x62
0002c e58d3034 str r3, [sp, #0x34]
00030 e3a03063 mov r3, #0x63
00034 e58d3038 str r3, [sp, #0x38]
00038 e3a03064 mov r3, #0x64
0003c e58d303c str r3, [sp, #0x3C]
00040 e3a03065 mov r3, #0x65
00044 e58d3040 str r3, [sp, #0x40]
00048 e3a03066 mov r3, #0x66
0004c e58d3044 str r3, [sp, #0x44]
00050 e3a03010 mov r3, #0x10
00054 e58d3090 str r3, [sp, #0x90]
00058 e3a0305d mov r3, #0x5D
0005c e58d3094 str r3, [sp, #0x94]
00060 e3a0305e mov r3, #0x5E
00064 e58d3098 str r3, [sp, #0x98]
00068 e3a0305f mov r3, #0x5F
0006c e58d309c str r3, [sp, #0x9C]
00070 e3a03060 mov r3, #0x60
00074 e58d30a0 str r3, [sp, #0xA0]
00078 e3a03061 mov r3, #0x61
0007c e58d30a4 str r3, [sp, #0xA4]
00080 e3a03062 mov r3, #0x62
00084 e58d30a8 str r3, [sp, #0xA8]
00088 e3a03063 mov r3, #0x63
0008c e58d30ac str r3, [sp, #0xAC]
00090 e3a03064 mov r3, #0x64
00094 e58d30b0 str r3, [sp, #0xB0]
00098 e3a03065 mov r3, #0x65
0009c e58d30b4 str r3, [sp, #0xB4]
000a0 e3a03066 mov r3, #0x66
000a4 e58d30b8 str r3, [sp, #0xB8]
000a8 e3a03067 mov r3, #0x67
000ac e58d30bc str r3, [sp, #0xBC]
000b0 e3a03068 mov r3, #0x68
000b4 e58d30c0 str r3, [sp, #0xC0]
000b8 e3a03069 mov r3, #0x69
000bc e58d30c4 str r3, [sp, #0xC4]
000c0 e3a0306a mov r3, #0x6A
000c4 e58d30c8 str r3, [sp, #0xC8]
000c8 e3a0306b mov r3, #0x6B
000cc e58d30cc str r3, [sp, #0xCC]
000d0 e3a0306c mov r3, #0x6C
000d4 e58d30d0 str r3, [sp, #0xD0]
000d8 e3a03010 mov r3, #0x10
000dc e58d3048 str r3, [sp, #0x48]
000e0 e3a03001 mov r3, #1
000e4 e58d304c str r3, [sp, #0x4C]
000e8 e3a03001 mov r3, #1
000ec e58d3050 str r3, [sp, #0x50]
000f0 e3a03003 mov r3, #3
000f4 e3a02060 mov r2, #0x60
000f8 e3a01067 mov r1, #0x67
000fc e3a00068 mov r0, #0x68
00100 e3a0e069 mov lr, #0x69
00104 e3a0606a mov r6, #0x6A
00108 e3a0706b mov r7, #0x6B
0010c e3a0806c mov r8, #0x6C
00110 e3a09009 mov r9, #9
00114 e3a0a05d mov r10, #0x5D
00118 e3a0b05e mov r11, #0x5E
0011c e58d3054 str r3, [sp, #0x54]
00120 e58d2004 str r2, [sp, #4]
00124 e58d1008 str r1, [sp, #8]
00128 e58d000c str r0, [sp, #0xC]
0012c e58de010 str lr, [sp, #0x10]
00130 e58d6014 str r6, [sp, #0x14]
00134 e58d7018 str r7, [sp, #0x18]
00138 e58d801c str r8, [sp, #0x1C]
0013c e58d9020 str r9, [sp, #0x20]
00140 e58da024 str r10, [sp, #0x24]
00144 e58db028 str r11, [sp, #0x28]
00148 e3a03003 mov r3, #3
0014c e58d3058 str r3, [sp, #0x58]
00150 e3a03003 mov r3, #3
00154 e58d305c str r3, [sp, #0x5C]
00158 e3a03002 mov r3, #2
0015c e58d3084 str r3, [sp, #0x84]
00160 e3a03002 mov r3, #2
00164 e3a02003 mov r2, #3
00168 e3a01003 mov r1, #3
0016c e3a00001 mov r0, #1
00170 e3a0e001 mov lr, #1
00174 e3a07001 mov r7, #1
00178 e3a08002 mov r8, #2
0017c e3a09002 mov r9, #2
00180 e3a0a002 mov r10, #2
00184 e3a0b002 mov r11, #2
00188 e58d3088 str r3, [sp, #0x88]
0018c e3a06000 mov r6, #0
00190 e58d2060 str r2, [sp, #0x60]
00194 e58d1064 str r1, [sp, #0x64]
00198 e58d0068 str r0, [sp, #0x68]
0019c e58de06c str lr, [sp, #0x6C]
001a0 e58d7070 str r7, [sp, #0x70]
001a4 e58d8074 str r8, [sp, #0x74]
001a8 e58d9078 str r9, [sp, #0x78]
001ac e58da07c str r10, [sp, #0x7C]
001b0 e58db080 str r11, [sp, #0x80]
; 410 : if(v_pGPIOReg != 0)
001b4 0a00000c beq |$L823|
; 411 : {
; 412 : XllpGpioSetDirectionIn(v_pGPIOReg, GpioDirInList);
001b8 e28d1020 add r1, sp, #0x20
001bc e1a00004 mov r0, r4
001c0 eb000000 bl XllpGpioSetDirectionIn
; 413 : XllpGpioSetDirectionOut(v_pGPIOReg, GpioDirOutList);
001c4 e28d1000 add r1, sp, #0
001c8 e1a00004 mov r0, r4
001cc eb000000 bl XllpGpioSetDirectionOut
; 414 : XllpGpioSetOutput0(v_pGPIOReg, GpioDirOutList);
001d0 e28d1000 add r1, sp, #0
001d4 e1a00004 mov r0, r4
001d8 eb000000 bl XllpGpioSetOutput0
; 415 : XllpGpioSetAlternateFn(v_pGPIOReg, GpioAltFnPinList, GpioAltFnValList);
001dc e28d2048 add r2, sp, #0x48
001e0 e28d1090 add r1, sp, #0x90
001e4 e1a00004 mov r0, r4
001e8 eb000000 bl XllpGpioSetAlternateFn
001ec |$L823|
; 416 : }
; 417 :
; 418 :
; 419 : if(v_pKeyPadRegs != 0)
001ec e3550000 cmp r5, #0
; 420 : {
; 421 : // Init the control regs for direct keys
; 422 : v_pKeyPadRegs->kpControlReg = (MATRIX_KP_NUMBER_OF_ROWS | MATRIX_KP_NUMBER_OF_COLUMNS |
; 423 : MAT_SCAN_LINE0 | MAT_SCAN_LINE1 | MAT_SCAN_LINE2 |
; 424 : MAT_SCAN_LINE3 | MAT_SCAN_LINE4 | MAT_SCAN_LINE5 |
; 425 : MAT_SCAN_LINE6 | MAT_SCAN_LINE7 | //IGNORE_MULTIPLE_KEY_PRESS |
; 426 : AUTO_SCAN_ON_ACTIVITY | MATRIX_INTR_ENABLE |
; 427 : MATRIX_KP_ENABLE | ROTARY_ENCODER_ZERO_DEB |
; 428 : DIRECT_KP_INTR_ENABLE | DIRECT_KEY_NUMS |
; 429 : DIRECT_KP_ENABLE | ROTARY_ENCODER_0_ENABLE) ; //NMD
001f0 159f301c ldrne r3, [pc, #0x1C]
; 430 :
; 431 : v_pKeyPadRegs->kpRotaryEncoderCountReg = START_VALUE;
001f4 13a0207f movne r2, #0x7F
; 432 :
; 433 : retval = XLLP_TRUE;
001f8 13a06001 movne r6, #1
001fc 15853000 strne r3, [r5]
00200 15852010 strne r2, [r5, #0x10]
; 434 : }
; 435 : return(retval);
00204 e1a00006 mov r0, r6
; 436 : }
00208 e28dd0d4 add sp, sp, #0xD4
0020c e8bd4ff0 ldmia sp!, {r4 - r11, lr}
00210 e12fff1e bx lr
00214 |$L956|
00214 3f1ff8d7 DCD 0x3f1ff8d7
00218 |$M952|
ENDP ; |XllpKeyPadConfigure|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -