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

📄 gui_mouse_driverps2.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 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 + -