📄 gui_mouse_driverps2.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\gui_mouse_driverps2.o --depend=.\Obj\gui_mouse_driverps2.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\GUI\Core\GUI_MOUSE_DriverPS2.c]
THUMB
AREA ||i.GUI_MOUSE_DRIVER_PS2_Init||, CODE, READONLY, ALIGN=2
GUI_MOUSE_DRIVER_PS2_Init PROC
;;;130 */
;;;131 void GUI_MOUSE_DRIVER_PS2_Init(void) {
000000 4901 LDR r1,|L1.8|
;;;132 _NumBytesInBuffer = 0;
000002 2000 MOVS r0,#0
;;;133 }
000004 60c8 STR r0,[r1,#0xc] ; _NumBytesInBuffer
000006 4770 BX lr
;;;134
ENDP
|L1.8|
DCD ||.data||
AREA ||i.GUI_MOUSE_DRIVER_PS2_OnRx||, CODE, READONLY, ALIGN=2
GUI_MOUSE_DRIVER_PS2_OnRx PROC
;;;109 */
;;;110 void GUI_MOUSE_DRIVER_PS2_OnRx(unsigned char Data) {
000000 b510 PUSH {r4,lr}
;;;111 if (!_NumBytesInBuffer) {
000002 4c0a LDR r4,|L2.44|
000004 68e1 LDR r1,[r4,#0xc] ; _NumBytesInBuffer
;;;112 /* check for start frame */
;;;113 if ((Data & 0x0c) == 0x08) {
;;;114 _abInBuffer[0] = Data;
000006 1c62 ADDS r2,r4,#1
000008 b931 CBNZ r1,|L2.24|
00000a f3c00181 UBFX r1,r0,#2,#2 ;113
00000e 2902 CMP r1,#2 ;113
000010 d10b BNE |L2.42|
000012 7010 STRB r0,[r2,#0]
;;;115 _NumBytesInBuffer++;
000014 2001 MOVS r0,#1
000016 e007 B |L2.40|
|L2.24|
;;;116 }
;;;117 } else {
;;;118 _abInBuffer[_NumBytesInBuffer] = Data;
000018 5450 STRB r0,[r2,r1]
;;;119 _NumBytesInBuffer++;
00001a 1c49 ADDS r1,r1,#1
;;;120 if (_NumBytesInBuffer >= 3) {
00001c 60e1 STR r1,[r4,#0xc] ; _NumBytesInBuffer
00001e 2903 CMP r1,#3
000020 db03 BLT |L2.42|
;;;121 _EvaPacket();
000022 f7fffffe BL _EvaPacket
;;;122 _NumBytesInBuffer = 0;
000026 2000 MOVS r0,#0
|L2.40|
000028 60e0 STR r0,[r4,#0xc] ;115 ; _NumBytesInBuffer
|L2.42|
;;;123 }
;;;124 }
;;;125 }
00002a bd10 POP {r4,pc}
;;;126
ENDP
|L2.44|
DCD ||.data||
AREA ||i._EvaPacket||, CODE, READONLY, ALIGN=2
_EvaPacket PROC
;;;57 */
;;;58 static void _EvaPacket(void) {
000000 b5fe PUSH {r1-r7,lr}
;;;59 char a;
;;;60 GUI_PID_STATE State;
;;;61 _Buttons = _abInBuffer[0] & 0x03;
000002 4d1e LDR r5,|L3.124|
000004 7829 LDRB r1,[r5,#0] ; _abInBuffer
000006 1e68 SUBS r0,r5,#1
000008 f0010403 AND r4,r1,#3
00000c 7004 STRB r4,[r0,#0]
00000e 4602 MOV r2,r0
;;;62 a = _abInBuffer[1];
000010 786b LDRB r3,[r5,#1] ; _abInBuffer
;;;63 /* test x move sign. */
;;;64 if(_abInBuffer[0] & 0x10) {
;;;65 a=-a;
;;;66 _ScreenX -= a;
000012 6852 LDR r2,[r2,#4]
000014 06ce LSLS r6,r1,#27 ;64
000016 d503 BPL |L3.32|
000018 425b RSBS r3,r3,#0 ;65
00001a b2db UXTB r3,r3 ;65
00001c 1ad2 SUBS r2,r2,r3
00001e e000 B |L3.34|
|L3.32|
;;;67 } /* direction is negative, move left */
;;;68 else {
;;;69 _ScreenX += a;
000020 441a ADD r2,r2,r3
|L3.34|
;;;70 }
;;;71 a = _abInBuffer[2];
;;;72 /* test y move sign. */
;;;73 if(_abInBuffer[0] & 0x20) {
000022 068b LSLS r3,r1,#26
000024 4915 LDR r1,|L3.124|
000026 6042 STR r2,[r0,#4] ;71 ; _ScreenX
000028 f1a10101 SUB r1,r1,#1 ;61
00002c 78aa LDRB r2,[r5,#2] ;71 ; _abInBuffer
;;;74 a=-a;
;;;75 _ScreenY += a;
00002e 6889 LDR r1,[r1,#8]
000030 d503 BPL |L3.58|
000032 4252 RSBS r2,r2,#0 ;74
000034 b2d2 UXTB r2,r2 ;74
000036 4411 ADD r1,r1,r2
000038 e000 B |L3.60|
|L3.58|
;;;76 } /* direction is negative, move down */ else {
;;;77 _ScreenY -= a;
00003a 1a89 SUBS r1,r1,r2
|L3.60|
;;;78 }
;;;79 /* check min/max positions */
;;;80 if (_ScreenX < 0) {
00003c 6081 STR r1,[r0,#8] ; _ScreenY
00003e 6841 LDR r1,[r0,#4] ; _ScreenX
;;;81 _ScreenX = 0;
000040 2200 MOVS r2,#0
000042 2900 CMP r1,#0 ;80
000044 da01 BGE |L3.74|
000046 6042 STR r2,[r0,#4] ; _ScreenX
000048 e005 B |L3.86|
|L3.74|
;;;82 } else if (_ScreenX > LCD_XSIZE-1) {
00004a f5b17fa0 CMP r1,#0x140
00004e db02 BLT |L3.86|
;;;83 _ScreenX = LCD_XSIZE-1;
000050 f240113f MOV r1,#0x13f
000054 6041 STR r1,[r0,#4] ; _ScreenX
|L3.86|
;;;84 } if (_ScreenY < 0) {
000056 6881 LDR r1,[r0,#8] ; _ScreenY
000058 2900 CMP r1,#0
00005a da01 BGE |L3.96|
;;;85 _ScreenY = 0;
00005c 6082 STR r2,[r0,#8] ; _ScreenY
00005e e003 B |L3.104|
|L3.96|
;;;86 } else if (_ScreenY > LCD_YSIZE-1) {
000060 29ef CMP r1,#0xef
000062 dd01 BLE |L3.104|
;;;87 _ScreenY = LCD_YSIZE-1;
000064 21ef MOVS r1,#0xef
000066 6081 STR r1,[r0,#8] ; _ScreenY
|L3.104|
;;;88 }
;;;89 /* signal new mouse data */
;;;90 State.x = _ScreenX;
000068 6841 LDR r1,[r0,#4] ; _ScreenX
;;;91 State.y = _ScreenY;
00006a 9100 STR r1,[sp,#0]
00006c 6880 LDR r0,[r0,#8] ; _ScreenY
;;;92 State.Pressed = _Buttons;
00006e 9001 STR r0,[sp,#4]
000070 f88d4008 STRB r4,[sp,#8]
;;;93 GUI_MOUSE_StoreState(&State);
000074 4668 MOV r0,sp
000076 f7fffffe BL GUI_MOUSE_StoreState
;;;94 }
00007a bdfe POP {r1-r7,pc}
;;;95
ENDP
|L3.124|
DCD ||.data||+0x1
AREA ||.data||, DATA, ALIGN=2
_Buttons
000000 00 DCB 0x00
_abInBuffer
000001 000000 DCB 0x00,0x00,0x00
_ScreenX
DCD 0x00000000
_ScreenY
DCD 0x00000000
_NumBytesInBuffer
DCD 0x00000000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -