📄 bsp_button.txt
字号:
00004a 4288 CMP r0,r1
00004c da0a BGE |L10.100|
;;;395 {
;;;396 /* 发送按钮持续按下的消息 */
;;;397 if (++_pBtn->LongCount == _pBtn->LongTime)
00004e 88e0 LDRH r0,[r4,#6]
000050 1c40 ADDS r0,r0,#1
000052 b280 UXTH r0,r0
000054 80e0 STRH r0,[r4,#6]
000056 8921 LDRH r1,[r4,#8]
000058 4288 CMP r0,r1
00005a d12e BNE |L10.186|
;;;398 {
;;;399 /* 键值放入按键FIFO */
;;;400 bsp_PutKey(_pBtn->KeyCodeLong);
00005c 7b60 LDRB r0,[r4,#0xd]
00005e f7fffffe BL bsp_PutKey
000062 e02a B |L10.186|
|L10.100|
;;;401 }
;;;402 }
;;;403 else
;;;404 {
;;;405 if (_pBtn->RepeatSpeed > 0)
000064 7ba0 LDRB r0,[r4,#0xe]
000066 2800 CMP r0,#0
000068 dd27 BLE |L10.186|
;;;406 {
;;;407 if (++_pBtn->RepeatCount >= _pBtn->RepeatSpeed)
00006a 7be0 LDRB r0,[r4,#0xf]
00006c 1c40 ADDS r0,r0,#1
00006e b2c0 UXTB r0,r0
000070 73e0 STRB r0,[r4,#0xf]
000072 7ba1 LDRB r1,[r4,#0xe]
000074 4288 CMP r0,r1
000076 db20 BLT |L10.186|
;;;408 {
;;;409 _pBtn->RepeatCount = 0;
000078 2000 MOVS r0,#0
00007a 73e0 STRB r0,[r4,#0xf]
;;;410 /* 常按键后,每隔10ms发送1个按键 */
;;;411 bsp_PutKey(_pBtn->KeyCodeDown);
00007c 7b20 LDRB r0,[r4,#0xc]
00007e f7fffffe BL bsp_PutKey
000082 e01a B |L10.186|
|L10.132|
;;;412 }
;;;413 }
;;;414 }
;;;415 }
;;;416 }
;;;417 }
;;;418 else
;;;419 {
;;;420 if(_pBtn->Count > _pBtn->FilterTime)
000084 7920 LDRB r0,[r4,#4]
000086 7961 LDRB r1,[r4,#5]
000088 4288 CMP r0,r1
00008a dd02 BLE |L10.146|
;;;421 {
;;;422 _pBtn->Count = _pBtn->FilterTime;
00008c 7960 LDRB r0,[r4,#5]
00008e 7120 STRB r0,[r4,#4]
000090 e010 B |L10.180|
|L10.146|
;;;423 }
;;;424 else if(_pBtn->Count != 0)
000092 7920 LDRB r0,[r4,#4]
000094 b118 CBZ r0,|L10.158|
;;;425 {
;;;426 _pBtn->Count--;
000096 7920 LDRB r0,[r4,#4]
000098 1e40 SUBS r0,r0,#1
00009a 7120 STRB r0,[r4,#4]
00009c e00a B |L10.180|
|L10.158|
;;;427 }
;;;428 else
;;;429 {
;;;430 if (_pBtn->State == 1)
00009e 7aa0 LDRB r0,[r4,#0xa]
0000a0 2801 CMP r0,#1
0000a2 d107 BNE |L10.180|
;;;431 {
;;;432 _pBtn->State = 0;
0000a4 2000 MOVS r0,#0
0000a6 72a0 STRB r0,[r4,#0xa]
;;;433
;;;434 /* 发送按钮弹起的消息 */
;;;435 if (_pBtn->KeyCodeUp > 0)
0000a8 7ae0 LDRB r0,[r4,#0xb]
0000aa 2800 CMP r0,#0
0000ac dd02 BLE |L10.180|
;;;436 {
;;;437 /* 键值放入按键FIFO */
;;;438 bsp_PutKey(_pBtn->KeyCodeUp);
0000ae 7ae0 LDRB r0,[r4,#0xb]
0000b0 f7fffffe BL bsp_PutKey
|L10.180|
;;;439 }
;;;440 }
;;;441 }
;;;442
;;;443 _pBtn->LongCount = 0;
0000b4 2000 MOVS r0,#0
0000b6 80e0 STRH r0,[r4,#6]
;;;444 _pBtn->RepeatCount = 0;
0000b8 73e0 STRB r0,[r4,#0xf]
|L10.186|
;;;445 }
;;;446 }
0000ba bd10 POP {r4,pc}
;;;447
ENDP
AREA ||i.bsp_GetKey||, CODE, READONLY, ALIGN=2
bsp_GetKey PROC
;;;109 */
;;;110 uint8_t bsp_GetKey(void)
000000 480b LDR r0,|L11.48|
;;;111 {
;;;112 uint8_t ret;
;;;113
;;;114 if (s_Key.Read == s_Key.Write)
000002 7d00 LDRB r0,[r0,#0x14] ; s_Key
000004 4a0a LDR r2,|L11.48|
000006 7d52 LDRB r2,[r2,#0x15] ; s_Key
000008 4290 CMP r0,r2
00000a d101 BNE |L11.16|
;;;115 {
;;;116 return KEY_NONE;
00000c 2000 MOVS r0,#0
|L11.14|
;;;117 }
;;;118 else
;;;119 {
;;;120 ret = s_Key.Buf[s_Key.Read];
;;;121
;;;122 if (++s_Key.Read >= KEY_FIFO_SIZE)
;;;123 {
;;;124 s_Key.Read = 0;
;;;125 }
;;;126 return ret;
;;;127 }
;;;128 }
00000e 4770 BX lr
|L11.16|
000010 4807 LDR r0,|L11.48|
000012 7d00 LDRB r0,[r0,#0x14] ;120 ; s_Key
000014 4a06 LDR r2,|L11.48|
000016 5c11 LDRB r1,[r2,r0] ;120
000018 4610 MOV r0,r2 ;122
00001a 7d00 LDRB r0,[r0,#0x14] ;122 ; s_Key
00001c 1c40 ADDS r0,r0,#1 ;122
00001e b2c0 UXTB r0,r0 ;122
000020 7510 STRB r0,[r2,#0x14] ;122
000022 2814 CMP r0,#0x14 ;122
000024 db01 BLT |L11.42|
000026 2000 MOVS r0,#0 ;124
000028 7510 STRB r0,[r2,#0x14] ;124
|L11.42|
00002a 4608 MOV r0,r1 ;126
00002c e7ef B |L11.14|
;;;129
ENDP
00002e 0000 DCW 0x0000
|L11.48|
DCD s_Key
AREA ||i.bsp_InitButton||, CODE, READONLY, ALIGN=1
bsp_InitButton PROC
;;;77 */
;;;78 void bsp_InitButton(void)
000000 b510 PUSH {r4,lr}
;;;79 {
;;;80 bsp_InitButtonVar(); /* 初始化按键变量 */
000002 f7fffffe BL bsp_InitButtonVar
;;;81 bsp_InitButtonHard(); /* 初始化按键硬件 */
000006 f7fffffe BL bsp_InitButtonHard
;;;82 }
00000a bd10 POP {r4,pc}
;;;83
ENDP
AREA ||i.bsp_InitButtonHard||, CODE, READONLY, ALIGN=2
bsp_InitButtonHard PROC
;;;187 */
;;;188 static void bsp_InitButtonHard(void)
000000 b508 PUSH {r3,lr}
;;;189 {
;;;190 GPIO_InitTypeDef GPIO_InitStructure;
;;;191
;;;192 /*
;;;193 安富莱STM32F103ZE-EK 按键口线分配:
;;;194 USER键 : PG8 (低电平表示按下)
;;;195 TAMPEER键 : PC13 (低电平表示按下)
;;;196 WKUP键 : PA0 (!!!高电平表示按下)
;;;197 摇杆UP键 : PG15 (低电平表示按下)
;;;198 摇杆DOWN键 : PD3 (低电平表示按下)
;;;199 摇杆LEFT键 : PG14 (低电平表示按下)
;;;200 摇杆RIGHT键: PG13 (低电平表示按下)
;;;201 摇杆OK键 : PG7 (低电平表示按下)
;;;202 */
;;;203
;;;204 /* 第1步:打开GPIOA GPIOC GPIOD GPIOF GPIOG的时钟
;;;205 注意:这个地方可以一次性全打开
;;;206 */
;;;207 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC
000002 2101 MOVS r1,#1
000004 f44f709a MOV r0,#0x134
000008 f7fffffe BL RCC_APB2PeriphClockCmd
;;;208 | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOG, ENABLE);
;;;209
;;;210 /* 第2步:配置所有的按键GPIO为浮动输入模式(实际上CPU复位后就是输入状态) */
;;;211 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
00000c 2001 MOVS r0,#1
00000e f8ad0000 STRH r0,[sp,#0]
;;;212 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
000012 2004 MOVS r0,#4
000014 f88d0003 STRB r0,[sp,#3]
;;;213 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000018 2003 MOVS r0,#3
00001a f88d0002 STRB r0,[sp,#2]
;;;214 GPIO_Init(GPIOA, &GPIO_InitStructure); /* PA0 */
00001e 4669 MOV r1,sp
000020 480d LDR r0,|L13.88|
000022 f7fffffe BL GPIO_Init
;;;215
;;;216 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
000026 f44f5000 MOV r0,#0x2000
00002a f8ad0000 STRH r0,[sp,#0]
;;;217 GPIO_Init(GPIOC, &GPIO_InitStructure); /* PC13 */
00002e 4669 MOV r1,sp
000030 480a LDR r0,|L13.92|
000032 f7fffffe BL GPIO_Init
;;;218
;;;219 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
000036 2008 MOVS r0,#8
000038 f8ad0000 STRH r0,[sp,#0]
;;;220 GPIO_Init(GPIOD, &GPIO_InitStructure); /* PD3 */
00003c 4669 MOV r1,sp
00003e 4808 LDR r0,|L13.96|
000040 f7fffffe BL GPIO_Init
;;;221
;;;222 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_13
000044 f24e1080 MOV r0,#0xe180
000048 f8ad0000 STRH r0,[sp,#0]
;;;223 | GPIO_Pin_14 | GPIO_Pin_15;
;;;224 GPIO_Init(GPIOG, &GPIO_InitStructure); /* PG7,8,13,14,15 */
00004c 4669 MOV r1,sp
00004e 4805 LDR r0,|L13.100|
000050 f7fffffe BL GPIO_Init
;;;225 }
000054 bd08 POP {r3,pc}
;;;226
ENDP
000056 0000 DCW 0x0000
|L13.88|
DCD 0x40010800
|L13.92|
DCD 0x40011000
|L13.96|
DCD 0x40011400
|L13.100|
DCD 0x40012000
AREA ||i.bsp_InitButtonVar||, CODE, READONLY, ALIGN=2
bsp_InitButtonVar PROC
;;;235 */
;;;236 static void bsp_InitButtonVar(void)
000000 2000 MOVS r0,#0
;;;237 {
;;;238 /* 对按键FIFO读写指针清零 */
;;;239 s_Key.Read = 0;
000002 4970 LDR r1,|L14.452|
000004 7508 STRB r0,[r1,#0x14]
;;;240 s_Key.Write = 0;
000006 7548 STRB r0,[r1,#0x15]
;;;241
;;;242 /* 初始化USER按键变量,支持按下、弹起、长按 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -