📄 tft_lcd.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\tft_lcd.o --depend=.\Obj\tft_lcd.d --device=DARMSTM --apcs=interwork -O0 -Otime -I..\..\Libraries\CMSIS\Core\CM3 -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Source\inc -Id:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER ..\..\Source\src\tft_lcd.c]
THUMB
AREA ||i.LCD_BresenhamLine||, CODE, READONLY, ALIGN=1
LCD_BresenhamLine PROC
;;;468 */
;;;469 void LCD_BresenhamLine (uint16_t x1 , uint16_t y1 , uint16_t x2 , uint16_t y2 , int c)
000000 e92d4ff0 PUSH {r4-r11,lr}
;;;470 {
000004 b087 SUB sp,sp,#0x1c
000006 4604 MOV r4,r0
000008 460d MOV r5,r1
00000a 4616 MOV r6,r2
00000c 461f MOV r7,r3
00000e f8dd8040 LDR r8,[sp,#0x40]
;;;471 int dx , dy ;
;;;472 int tx , ty ;
;;;473 int inc1 , inc2 ;
;;;474 int d , iTag ;
;;;475 int x , y ;
;;;476
;;;477 LCD_PutPixel(x1 , y1 , c);
000012 fa1ff288 UXTH r2,r8
000016 4629 MOV r1,r5
000018 4620 MOV r0,r4
00001a f7fffffe BL LCD_PutPixel
;;;478
;;;479 /* 如果两点重合,结束后面的动作。*/
;;;480 if ( x1 == x2 && y1 == y2 )
00001e 42b4 CMP r4,r6
000020 d104 BNE |L1.44|
000022 42bd CMP r5,r7
000024 d102 BNE |L1.44|
|L1.38|
;;;481 {
;;;482 return;
;;;483 }
;;;484
;;;485 iTag = 0 ;
;;;486 /* dx = abs ( x2 - x1 ); */
;;;487 if (x2 >= x1)
;;;488 {
;;;489 dx = x2 - x1;
;;;490 }
;;;491 else
;;;492 {
;;;493 dx = x1 - x2;
;;;494 }
;;;495
;;;496 /* dy = abs ( y2 - y1 ); */
;;;497 if (y2 >= y1)
;;;498 {
;;;499 dy = y2 - y1;
;;;500 }
;;;501 else
;;;502 {
;;;503 dy = y1 - y2;
;;;504 }
;;;505
;;;506 if ( dx < dy ) /*如果dy为计长方向,则交换纵横坐标。*/
;;;507 {
;;;508 uint16_t temp;
;;;509
;;;510 iTag = 1 ;
;;;511 temp = x1; x1 = y1; y1 = temp;
;;;512 temp = x2; x2 = y2; y2 = temp;
;;;513 temp = dx; dx = dy; dy = temp;
;;;514 }
;;;515 tx = x2 > x1 ? 1 : -1 ; /*确定是增1还是减1*/
;;;516 ty = y2 > y1 ? 1 : -1 ;
;;;517 x = x1 ;
;;;518 y = y1 ;
;;;519 inc1 = 2 * dy ;
;;;520 inc2 = 2 * ( dy - dx );
;;;521 d = inc1 - dx ;
;;;522 while ( x != x2 ) /*循环画点*/
;;;523 {
;;;524 if ( d < 0 )
;;;525 {
;;;526 d += inc1 ;
;;;527 }
;;;528 else
;;;529 {
;;;530 y += ty ;
;;;531 d += inc2 ;
;;;532 }
;;;533 if ( iTag )
;;;534 {
;;;535 LCD_PutPixel ( y , x , c ) ;
;;;536 }
;;;537 else
;;;538 {
;;;539 LCD_PutPixel ( x , y , c ) ;
;;;540 }
;;;541 x += tx ;
;;;542 }
;;;543 return;
;;;544 }
000026 b007 ADD sp,sp,#0x1c
000028 e8bd8ff0 POP {r4-r11,pc}
|L1.44|
00002c 2000 MOVS r0,#0 ;485
00002e 9000 STR r0,[sp,#0] ;485
000030 42a6 CMP r6,r4 ;487
000032 db02 BLT |L1.58|
000034 eba60904 SUB r9,r6,r4 ;489
000038 e001 B |L1.62|
|L1.58|
00003a eba40906 SUB r9,r4,r6 ;493
|L1.62|
00003e 42af CMP r7,r5 ;497
000040 db02 BLT |L1.72|
000042 1b78 SUBS r0,r7,r5 ;499
000044 9006 STR r0,[sp,#0x18] ;499
000046 e001 B |L1.76|
|L1.72|
000048 1be8 SUBS r0,r5,r7 ;503
00004a 9006 STR r0,[sp,#0x18] ;503
|L1.76|
00004c 9806 LDR r0,[sp,#0x18] ;506
00004e 4581 CMP r9,r0 ;506
000050 da0d BGE |L1.110|
000052 2101 MOVS r1,#1 ;510
000054 9100 STR r1,[sp,#0] ;510
000056 4620 MOV r0,r4 ;511
000058 462c MOV r4,r5 ;511
00005a 4605 MOV r5,r0 ;511
00005c 4630 MOV r0,r6 ;512
00005e 463e MOV r6,r7 ;512
000060 4607 MOV r7,r0 ;512
000062 fa1ff089 UXTH r0,r9 ;513
000066 f8dd9018 LDR r9,[sp,#0x18] ;513
00006a 9006 STR r0,[sp,#0x18] ;513
00006c bf00 NOP ;514
|L1.110|
00006e 42a6 CMP r6,r4 ;515
000070 dd01 BLE |L1.118|
000072 2001 MOVS r0,#1 ;515
000074 e001 B |L1.122|
|L1.118|
000076 f04f30ff MOV r0,#0xffffffff ;515
|L1.122|
00007a 9005 STR r0,[sp,#0x14] ;515
00007c 42af CMP r7,r5 ;516
00007e dd01 BLE |L1.132|
000080 2001 MOVS r0,#1 ;516
000082 e001 B |L1.136|
|L1.132|
000084 f04f30ff MOV r0,#0xffffffff ;516
|L1.136|
000088 9004 STR r0,[sp,#0x10] ;516
00008a 46a2 MOV r10,r4 ;517
00008c 46ab MOV r11,r5 ;518
00008e 9806 LDR r0,[sp,#0x18] ;519
000090 0040 LSLS r0,r0,#1 ;519
000092 9003 STR r0,[sp,#0xc] ;519
000094 9806 LDR r0,[sp,#0x18] ;520
000096 eba00009 SUB r0,r0,r9 ;520
00009a 0040 LSLS r0,r0,#1 ;520
00009c 9002 STR r0,[sp,#8] ;520
00009e 9803 LDR r0,[sp,#0xc] ;521
0000a0 eba00009 SUB r0,r0,r9 ;521
0000a4 9001 STR r0,[sp,#4] ;521
0000a6 e022 B |L1.238|
|L1.168|
0000a8 9801 LDR r0,[sp,#4] ;524
0000aa 2800 CMP r0,#0 ;524
0000ac da04 BGE |L1.184|
0000ae 9903 LDR r1,[sp,#0xc] ;526
0000b0 9801 LDR r0,[sp,#4] ;526
0000b2 4408 ADD r0,r0,r1 ;526
0000b4 9001 STR r0,[sp,#4] ;526
0000b6 e005 B |L1.196|
|L1.184|
0000b8 9804 LDR r0,[sp,#0x10] ;530
0000ba 4483 ADD r11,r11,r0 ;530
0000bc e9dd0101 LDRD r0,r1,[sp,#4] ;531
0000c0 4408 ADD r0,r0,r1 ;531
0000c2 9001 STR r0,[sp,#4] ;531
|L1.196|
0000c4 9800 LDR r0,[sp,#0] ;533
0000c6 b140 CBZ r0,|L1.218|
0000c8 fa1ff288 UXTH r2,r8 ;535
0000cc fa1ff18a UXTH r1,r10 ;535
0000d0 fa1ff08b UXTH r0,r11 ;535
0000d4 f7fffffe BL LCD_PutPixel
0000d8 e007 B |L1.234|
|L1.218|
0000da fa1ff288 UXTH r2,r8 ;539
0000de fa1ff18b UXTH r1,r11 ;539
0000e2 fa1ff08a UXTH r0,r10 ;539
0000e6 f7fffffe BL LCD_PutPixel
|L1.234|
0000ea 9805 LDR r0,[sp,#0x14] ;541
0000ec 4482 ADD r10,r10,r0 ;541
|L1.238|
0000ee 45b2 CMP r10,r6 ;522
0000f0 d1da BNE |L1.168|
0000f2 e798 B |L1.38|
;;;545
ENDP
AREA ||i.LCD_Clear||, CODE, READONLY, ALIGN=2
LCD_Clear PROC
;;;218 */
;;;219 void LCD_Clear(uint16_t Color)
000000 b530 PUSH {r4,r5,lr}
;;;220 {
000002 4605 MOV r5,r0
;;;221 uint32_t index = 0;
000004 2400 MOVS r4,#0
;;;222
;;;223 LCD_SetCursor(0, 0); /* 设置光标位置 */
000006 2100 MOVS r1,#0
000008 4608 MOV r0,r1
00000a f7fffffe BL LCD_SetCursor
;;;224
;;;225 LCD_WriteRAM_Prepare(); /* 准备写显存 */
00000e f7fffffe BL LCD_WriteRAM_Prepare
;;;226
;;;227 for (index = 0; index < 400 * 240; index++)
000012 bf00 NOP
000014 e003 B |L2.30|
|L2.22|
;;;228 {
;;;229 LCD->LCD_RAM = Color;
000016 f04f40d8 MOV r0,#0x6c000000
00001a 8045 STRH r5,[r0,#2]
00001c 1c64 ADDS r4,r4,#1 ;227
|L2.30|
00001e 4802 LDR r0,|L2.40|
000020 4284 CMP r4,r0 ;227
000022 d3f8 BCC |L2.22|
;;;230 }
;;;231 }
000024 bd30 POP {r4,r5,pc}
;;;232
ENDP
000026 0000 DCW 0x0000
|L2.40|
DCD 0x00017700
AREA ||i.LCD_ClearLine||, CODE, READONLY, ALIGN=2
LCD_ClearLine PROC
;;;207 */
;;;208 void LCD_ClearLine(uint8_t Line)
000000 b510 PUSH {r4,lr}
;;;209 {
000002 4604 MOV r4,r0
;;;210 LCD_DisplayString(0, Line, " ");
000004 a202 ADR r2,|L3.16|
000006 4621 MOV r1,r4
000008 2000 MOVS r0,#0
00000a f7fffffe BL LCD_DisplayString
;;;211 }
00000e bd10 POP {r4,pc}
;;;212
ENDP
|L3.16|
000010 202020202020202020202020202020202020202000 DCB " ",0
000025 00 DCB 0
000026 00 DCB 0
000027 00 DCB 0
AREA ||i.LCD_CtrlLinesConfig||, CODE, READONLY, ALIGN=2
LCD_CtrlLinesConfig PROC
;;;880 */
;;;881 static void LCD_CtrlLinesConfig(void)
000000 b508 PUSH {r3,lr}
;;;882 {
;;;883 GPIO_InitTypeDef GPIO_InitStructure;
;;;884
;;;885 /* 使能 FSMC, GPIOD, GPIOE, GPIOF, GPIOG 和 AFIO 时钟 */
;;;886 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
000002 2101 MOVS r1,#1
000004 0208 LSLS r0,r1,#8
000006 f7fffffe BL RCC_AHBPeriphClockCmd
;;;887
;;;888 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |
00000a 2101 MOVS r1,#1
00000c f24010e1 MOV r0,#0x1e1
000010 f7fffffe BL RCC_APB2PeriphClockCmd
;;;889 RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG |
;;;890 RCC_APB2Periph_AFIO, ENABLE);
;;;891
;;;892 /* 设置 PD.00(D2), PD.01(D3), PD.04(NOE), PD.05(NWE), PD.08(D13), PD.09(D14),
;;;893 PD.10(D15), PD.14(D0), PD.15(D1) 为复用推挽输出 */
;;;894 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
000014 f24c7033 MOV r0,#0xc733
000018 f8ad0000 STRH r0,[sp,#0]
;;;895 GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 |
;;;896 GPIO_Pin_15; // | GPIO_Pin_7;
;;;897 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
00001c 2003 MOVS r0,#3
00001e f88d0002 STRB r0,[sp,#2]
;;;898 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
000022 2018 MOVS r0,#0x18
000024 f88d0003 STRB r0,[sp,#3]
;;;899 GPIO_Init(GPIOD, &GPIO_InitStructure);
000028 4669 MOV r1,sp
00002a 480d LDR r0,|L4.96|
00002c f7fffffe BL GPIO_Init
;;;900
;;;901 /* 设置 PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
;;;902 PE.14(D11), PE.15(D12) 为复用推挽输出 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -