📄 tft_lcd.txt
字号:
ENDP
00005a 0000 DCW 0x0000
|L10.92|
DCD ||.data||
AREA ||i.LCD_DrawMonoPict||, CODE, READONLY, ALIGN=2
LCD_DrawMonoPict PROC
;;;707 */
;;;708 void LCD_DrawMonoPict(const uint32_t *Pict)
000000 b570 PUSH {r4-r6,lr}
;;;709 {
000002 4604 MOV r4,r0
;;;710 uint32_t index = 0, i = 0;
000004 2500 MOVS r5,#0
000006 2600 MOVS r6,#0
;;;711
;;;712 LCD_SetCursor(0, 400);
000008 f44f71c8 MOV r1,#0x190
00000c 2000 MOVS r0,#0
00000e f7fffffe BL LCD_SetCursor
;;;713
;;;714 LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
000012 f7fffffe BL LCD_WriteRAM_Prepare
;;;715 for (index = 0; index < 2400; index++)
000016 bf00 NOP
000018 e015 B |L11.70|
|L11.26|
;;;716 {
;;;717 for (i = 0; i < 32; i++)
00001a 2600 MOVS r6,#0
00001c e010 B |L11.64|
|L11.30|
;;;718 {
;;;719 if ((Pict[index] & (1 << i)) == 0x00)
00001e f8541025 LDR r1,[r4,r5,LSL #2]
000022 2001 MOVS r0,#1
000024 40b0 LSLS r0,r0,r6
000026 4201 TST r1,r0
000028 d104 BNE |L11.52|
;;;720 {
;;;721 LCD_WriteRAM(s_BackColor);
00002a 4809 LDR r0,|L11.80|
00002c 8800 LDRH r0,[r0,#0] ; s_BackColor
00002e f7fffffe BL LCD_WriteRAM
000032 e004 B |L11.62|
|L11.52|
;;;722 }
;;;723 else
;;;724 {
;;;725 LCD_WriteRAM(s_TextColor);
000034 4806 LDR r0,|L11.80|
000036 1e80 SUBS r0,r0,#2
000038 8800 LDRH r0,[r0,#0] ; s_TextColor
00003a f7fffffe BL LCD_WriteRAM
|L11.62|
00003e 1c76 ADDS r6,r6,#1 ;717
|L11.64|
000040 2e20 CMP r6,#0x20 ;717
000042 d3ec BCC |L11.30|
000044 1c6d ADDS r5,r5,#1 ;715
|L11.70|
000046 f5b56f16 CMP r5,#0x960 ;715
00004a d3e6 BCC |L11.26|
;;;726 }
;;;727 }
;;;728 }
;;;729 }
00004c bd70 POP {r4-r6,pc}
;;;730
ENDP
00004e 0000 DCW 0x0000
|L11.80|
DCD ||.data||+0x2
AREA ||i.LCD_DrawPoints||, CODE, READONLY, ALIGN=1
LCD_DrawPoints PROC
;;;590 */
;;;591 void LCD_DrawPoints(uint16_t *x, uint16_t *y, uint16_t Size, uint16_t Color)
000000 e92d41f8 PUSH {r3-r8,lr}
;;;592 {
000004 4604 MOV r4,r0
000006 460d MOV r5,r1
000008 4616 MOV r6,r2
00000a 461f MOV r7,r3
;;;593 #if 1
;;;594 uint16_t i;
;;;595
;;;596 for (i = 0 ; i < Size - 1; i++)
00000c f04f0800 MOV r8,#0
000010 e010 B |L12.52|
|L12.18|
;;;597 {
;;;598 LCD_BresenhamLine(x[i], y[i], x[i + 1], y[i + 1], Color);
000012 f1080c01 ADD r12,r8,#1
000016 9700 STR r7,[sp,#0]
000018 f835301c LDRH r3,[r5,r12,LSL #1]
00001c f834201c LDRH r2,[r4,r12,LSL #1]
000020 f8351018 LDRH r1,[r5,r8,LSL #1]
000024 f8340018 LDRH r0,[r4,r8,LSL #1]
000028 f7fffffe BL LCD_BresenhamLine
00002c f1080001 ADD r0,r8,#1 ;596
000030 fa1ff880 UXTH r8,r0 ;596
|L12.52|
000034 1e70 SUBS r0,r6,#1 ;596
000036 4540 CMP r0,r8 ;596
000038 dceb BGT |L12.18|
;;;599 }
;;;600 #else
;;;601 uint16_t i;
;;;602
;;;603 for (i = 0 ; i < Size; i++)
;;;604 {
;;;605 LCD_PutPixel(x[i], y[i], Color);
;;;606 }
;;;607 #endif
;;;608
;;;609 }
00003a e8bd81f8 POP {r3-r8,pc}
;;;610
ENDP
AREA ||i.LCD_DrawRect||, CODE, READONLY, ALIGN=1
LCD_DrawRect PROC
;;;619 */
;;;620 void LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width)
000000 b5f0 PUSH {r4-r7,lr}
;;;621 {
000002 4604 MOV r4,r0
000004 460e MOV r6,r1
000006 4615 MOV r5,r2
000008 461f MOV r7,r3
;;;622 /*
;;;623 ---------------->---
;;;624 |(Xpos,Ypos) |
;;;625 V V Height
;;;626 | |
;;;627 ---------------->---
;;;628 Width
;;;629 */
;;;630
;;;631 LCD_DrawLine(Xpos, Ypos, Width, Horizontal); /* 顶 */
00000a 2300 MOVS r3,#0
00000c 463a MOV r2,r7
00000e 4631 MOV r1,r6
000010 4620 MOV r0,r4
000012 f7fffffe BL LCD_DrawLine
;;;632 LCD_DrawLine(Xpos, Ypos + Height, Width, Horizontal); /* 底 */
000016 1970 ADDS r0,r6,r5
000018 b281 UXTH r1,r0
00001a 2300 MOVS r3,#0
00001c 463a MOV r2,r7
00001e 4620 MOV r0,r4
000020 f7fffffe BL LCD_DrawLine
;;;633
;;;634 LCD_DrawLine(Xpos, Ypos, Height, Vertical); /* 左 */
000024 2301 MOVS r3,#1
000026 462a MOV r2,r5
000028 4631 MOV r1,r6
00002a 4620 MOV r0,r4
00002c f7fffffe BL LCD_DrawLine
;;;635 LCD_DrawLine(Xpos + Width, Ypos, Height + 1, Vertical); /* 右 */
000030 19e1 ADDS r1,r4,r7
000032 b288 UXTH r0,r1
000034 2301 MOVS r3,#1
000036 1c6a ADDS r2,r5,#1
000038 4631 MOV r1,r6
00003a f7fffffe BL LCD_DrawLine
;;;636 }
00003e bdf0 POP {r4-r7,pc}
;;;637
ENDP
AREA ||i.LCD_FSMCConfig||, CODE, READONLY, ALIGN=1
LCD_FSMCConfig PROC
;;;925 */
;;;926 static void LCD_FSMCConfig(void)
000000 b500 PUSH {lr}
;;;927 {
000002 b095 SUB sp,sp,#0x54
;;;928 FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
;;;929 FSMC_NORSRAMTimingInitTypeDef FSMC_NORSRAMTimingInitStructure;
;;;930
;;;931 /*-- FSMC Configuration ------------------------------------------------------*/
;;;932 /*----------------------- SRAM Bank 4 ----------------------------------------*/
;;;933 /* FSMC_Bank1_NORSRAM4 configuration */
;;;934 FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 1;
000004 2001 MOVS r0,#1
000006 9000 STR r0,[sp,#0]
;;;935 FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 0;
000008 2000 MOVS r0,#0
00000a 9001 STR r0,[sp,#4]
;;;936 FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 2;
00000c 2002 MOVS r0,#2
00000e 9002 STR r0,[sp,#8]
;;;937 FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0;
000010 2000 MOVS r0,#0
000012 9003 STR r0,[sp,#0xc]
;;;938 FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 0;
000014 9004 STR r0,[sp,#0x10]
;;;939 FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 0;
000016 9005 STR r0,[sp,#0x14]
;;;940 FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_B;
000018 f04f5080 MOV r0,#0x10000000
00001c 9006 STR r0,[sp,#0x18]
;;;941
;;;942 /* Color LCD configuration ------------------------------------
;;;943 LCD configured as follow:
;;;944 - Data/Address MUX = Disable
;;;945 - Memory Type = SRAM
;;;946 - Data Width = 16bit
;;;947 - Write Operation = Enable
;;;948 - Extended Mode = Enable
;;;949 - Asynchronous Wait = Disable */
;;;950 FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;
00001e 2006 MOVS r0,#6
000020 9007 STR r0,[sp,#0x1c]
;;;951 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
000022 2000 MOVS r0,#0
000024 9008 STR r0,[sp,#0x20]
;;;952 FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
000026 9009 STR r0,[sp,#0x24]
;;;953 FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
000028 2010 MOVS r0,#0x10
00002a 900a STR r0,[sp,#0x28]
;;;954 FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
00002c 2000 MOVS r0,#0
00002e 900b STR r0,[sp,#0x2c]
;;;955 FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
000030 900c STR r0,[sp,#0x30]
;;;956 FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
000032 900d STR r0,[sp,#0x34]
;;;957 FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
000034 900e STR r0,[sp,#0x38]
;;;958 FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
000036 f44f5080 MOV r0,#0x1000
00003a 900f STR r0,[sp,#0x3c]
;;;959 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
00003c 2000 MOVS r0,#0
00003e 9010 STR r0,[sp,#0x40]
;;;960 FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
000040 9011 STR r0,[sp,#0x44]
;;;961 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
000042 9012 STR r0,[sp,#0x48]
;;;962 FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;
000044 f8cdd04c STR sp,[sp,#0x4c]
;;;963 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;
000048 f8cdd050 STR sp,[sp,#0x50]
;;;964
;;;965 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
00004c a807 ADD r0,sp,#0x1c
00004e f7fffffe BL FSMC_NORSRAMInit
;;;966
;;;967 /* - BANK 3 (of NOR/SRAM Bank 0~3) is enabled */
;;;968 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
000052 2101 MOVS r1,#1
000054 2006 MOVS r0,#6
000056 f7fffffe BL FSMC_NORSRAMCmd
;;;969 }
00005a b015 ADD sp,sp,#0x54
00005c bd00 POP {pc}
;;;970
ENDP
AREA ||i.LCD_Init||, CODE, READONLY, ALIGN=1
LCD_Init PROC
;;;47 */
;;;48 void LCD_Init(void)
000000 b510 PUSH {r4,lr}
;;;49 {
;;;50 /* 配置LCD控制口线GPIO */
;;;51 LCD_CtrlLinesConfig();
000002 f7fffffe BL LCD_CtrlLinesConfig
;;;52
;;;53 /* 配置FSMC接口,数据总线 */
;;;54 LCD_FSMCConfig();
000006 f7fffffe BL LCD_FSMCConfig
;;;55
;;;56 /* FSMC重置后必须加延迟才能访问总线设备 */
;;;57 DelayMS(20);
00000a 2014 MOVS r0,#0x14
00000c f7fffffe BL DelayMS
;;;58
;;;59 /* 初始化LCD,写LCD寄存器进行配置 */
;;;60 LCD_WriteReg(0x0000, 0x0000);
000010 2100 MOVS r1,#0
000012 4608 MOV r0,r1
000014 f7fffffe BL LCD_WriteReg
;;;61 LCD_WriteReg(0x0001, 0x0100);
000018 f44f7180 MOV r1,#0x100
00001c 2001 MOVS r0,#1
00001e f7fffffe BL LCD_WriteReg
;;;62 LCD_WriteReg(0x0002, 0x0100);
000022 f44f7180 MOV r1,#0x100
000026 2002 MOVS r0,#2
000028 f7fffffe BL LCD_WriteReg
;;;63
;;;64 /*
;;;65 R003H 寄存器很关键, Entry Mode ,决定了扫描方向
;;;66 参见:SPFD5420A.pdf 第15页
;;;67
;;;68 240x400屏幕物理坐标(px,py)如下:
;;;69 R003 = 0x1018 R003 = 0x1008
;;;70 ------------------- -------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -