📄 lcd.txt
字号:
000034 805a STRH r2,[r3,#2]
000036 1c49 ADDS r1,r1,#1 ;535
|L21.56|
000038 42a1 CMP r1,r4 ;535
00003a d3f9 BCC |L21.48|
00003c 801d STRH r5,[r3,#0] ;535
00003e f2410018 MOV r0,#0x1018 ;535
000042 8058 STRH r0,[r3,#2] ;535
;;;538 BmpAddress += 2;
;;;539 }
;;;540
;;;541 /* Set GRAM write direction and BGR = 1 */
;;;542 /* I/D = 01 (Horizontal : increment, Vertical : decrement) */
;;;543 /* AM = 1 (address is updated in vertical writing direction) */
;;;544 LCD_WriteReg(R3, 0x1018);
;;;545 }
000044 bd30 POP {r4,r5,pc}
;;;546
ENDP
AREA ||i.LCD_DrawBMP||, CODE, READONLY, ALIGN=2
LCD_DrawBMP PROC
;;;554 void LCD_DrawBMP(u32 BmpAddress)
;;;555 {
000000 e92d41fc PUSH {r2-r8,lr}
;;;556 u32 i = 0, size = 0;
000004 2700 MOVS r7,#0
000006 4604 MOV r4,r0 ;555
;;;557
;;;558 /* Read bitmap size */
;;;559 SPI_FLASH_BufferRead((u8*)&size, BmpAddress + 2, 4);
000008 1c81 ADDS r1,r0,#2
00000a 9701 STR r7,[sp,#4] ;556
00000c 2204 MOVS r2,#4
00000e 4668 MOV r0,sp
000010 9700 STR r7,[sp,#0]
000012 f7fffffe BL SPI_FLASH_BufferRead
;;;560
;;;561 /* get bitmap data address offset */
;;;562 SPI_FLASH_BufferRead((u8*)&i, BmpAddress + 10, 4);
000016 2204 MOVS r2,#4
000018 f104010a ADD r1,r4,#0xa
00001c a801 ADD r0,sp,#4
00001e f7fffffe BL SPI_FLASH_BufferRead
;;;563
;;;564 size = (size - i)/2;
000022 e9dd1000 LDRD r1,r0,[sp,#0]
000026 1a09 SUBS r1,r1,r0
000028 0849 LSRS r1,r1,#1
;;;565
;;;566 SPI_FLASH_StartReadSequence(BmpAddress + i);
00002a 4420 ADD r0,r0,r4
00002c 9100 STR r1,[sp,#0]
00002e f7fffffe BL SPI_FLASH_StartReadSequence
;;;567
;;;568 /* Disable SPI1 */
;;;569 SPI_Cmd(SPI1, DISABLE);
000032 4d1e LDR r5,|L22.172|
000034 2100 MOVS r1,#0
000036 4628 MOV r0,r5
000038 f7fffffe BL SPI_Cmd
;;;570 /* SPI in 16-bit mode */
;;;571 SPI_DataSizeConfig(SPI1, SPI_DataSize_16b);
00003c 14e9 ASRS r1,r5,#19
00003e 4628 MOV r0,r5
000040 f7fffffe BL SPI_DataSizeConfig
;;;572
;;;573 /* Enable SPI1 */
;;;574 SPI_Cmd(SPI1, ENABLE);
000044 2101 MOVS r1,#1
000046 4628 MOV r0,r5
000048 f7fffffe BL SPI_Cmd
00004c 2603 MOVS r6,#3
00004e f04f44d8 MOV r4,#0x6c000000
000052 8026 STRH r6,[r4,#0]
000054 f2410008 MOV r0,#0x1008
000058 8060 STRH r0,[r4,#2]
00005a 2022 MOVS r0,#0x22
00005c 8020 STRH r0,[r4,#0]
;;;575
;;;576 /* Set GRAM write direction and BGR = 1 */
;;;577 /* I/D=00 (Horizontal : decrement, Vertical : decrement) */
;;;578 /* AM=1 (address is updated in vertical writing direction) */
;;;579 LCD_WriteReg(R3, 0x1008);
;;;580
;;;581 LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;582
;;;583 /* Read bitmap data from SPI Flash and send them to LCD */
;;;584 for(i = 0; i < size; i++)
00005e 9701 STR r7,[sp,#4]
000060 f24a57a5 MOV r7,#0xa5a5
000064 9801 LDR r0,[sp,#4]
000066 e008 B |L22.122|
|L22.104|
;;;585 {
;;;586 LCD_WriteRAM(__REV_HalfWord(SPI_FLASH_SendHalfWord(0xA5A5)));
000068 4638 MOV r0,r7
00006a f7fffffe BL SPI_FLASH_SendHalfWord
00006e f7fffffe BL __REV_HalfWord
000072 8060 STRH r0,[r4,#2]
000074 9801 LDR r0,[sp,#4] ;584
000076 1c40 ADDS r0,r0,#1 ;584
000078 9001 STR r0,[sp,#4] ;584
|L22.122|
00007a 9900 LDR r1,[sp,#0] ;584
00007c 4288 CMP r0,r1 ;584
00007e d3f3 BCC |L22.104|
;;;587 }
;;;588
;;;589 /* Deselect the FLASH: Chip Select high */
;;;590 SPI_FLASH_CS_HIGH();
000080 2101 MOVS r1,#1
000082 480b LDR r0,|L22.176|
000084 f7fffffe BL GPIO_SetBits
;;;591
;;;592 /* Disable SPI1 */
;;;593 SPI_Cmd(SPI1, DISABLE);
000088 2100 MOVS r1,#0
00008a 4628 MOV r0,r5
00008c f7fffffe BL SPI_Cmd
;;;594 /* SPI in 8-bit mode */
;;;595 SPI_DataSizeConfig(SPI1, SPI_DataSize_8b);
000090 2100 MOVS r1,#0
000092 4628 MOV r0,r5
000094 f7fffffe BL SPI_DataSizeConfig
;;;596
;;;597 /* Enable SPI1 */
;;;598 SPI_Cmd(SPI1, ENABLE);
000098 2101 MOVS r1,#1
00009a 4628 MOV r0,r5
00009c f7fffffe BL SPI_Cmd
0000a0 8026 STRH r6,[r4,#0]
0000a2 f2410018 MOV r0,#0x1018
0000a6 8060 STRH r0,[r4,#2]
;;;599
;;;600 /* Set GRAM write direction and BGR = 1 */
;;;601 /* I/D = 01 (Horizontal : increment, Vertical : decrement) */
;;;602 /* AM = 1 (address is updated in vertical writing direction) */
;;;603 LCD_WriteReg(R3, 0x1018);
;;;604 }
0000a8 e8bd81fc POP {r2-r8,pc}
;;;605
ENDP
|L22.172|
0000ac 40013000 DCD 0x40013000
|L22.176|
0000b0 40010c00 DCD 0x40010c00
AREA ||i.LCD_ReadReg||, CODE, READONLY, ALIGN=1
LCD_ReadReg PROC
;;;631 /* Write 16-bit Index (then Read Reg) */
;;;632 LCD->LCD_REG = LCD_Reg;
000000 f04f41d8 MOV r1,#0x6c000000
000004 8008 STRH r0,[r1,#0]
;;;633 /* Read 16-bit Reg */
;;;634 return (LCD->LCD_RAM);
000006 8848 LDRH r0,[r1,#2]
;;;635 }
000008 4770 BX lr
;;;636
ENDP
AREA ||i.LCD_ReadRAM||, CODE, READONLY, ALIGN=1
LCD_ReadRAM PROC
;;;671 /* Write 16-bit Index (then Read Reg) */
;;;672 LCD->LCD_REG = R34; /* Select GRAM Reg */
000000 2122 MOVS r1,#0x22
000002 f04f40d8 MOV r0,#0x6c000000
000006 8001 STRH r1,[r0,#0]
;;;673 /* Read 16-bit Reg */
;;;674 return LCD->LCD_RAM;
000008 8840 LDRH r0,[r0,#2]
;;;675 }
00000a 4770 BX lr
;;;676
ENDP
AREA ||i.LCD_PowerOn||, CODE, READONLY, ALIGN=1
LCD_PowerOn PROC
;;;684 void LCD_PowerOn(void)
;;;685 {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 2710 MOVS r7,#0x10
000006 f04f44d8 MOV r4,#0x6c000000
00000a 8027 STRH r7,[r4,#0]
00000c 2000 MOVS r0,#0
00000e 8060 STRH r0,[r4,#2]
000010 f04f0811 MOV r8,#0x11
000014 f8a48000 STRH r8,[r4,#0]
000018 8060 STRH r0,[r4,#2]
00001a 2612 MOVS r6,#0x12
00001c 8026 STRH r6,[r4,#0]
00001e 8060 STRH r0,[r4,#2]
000020 2513 MOVS r5,#0x13
000022 8025 STRH r5,[r4,#0]
000024 8060 STRH r0,[r4,#2]
;;;686 /* Power On sequence ---------------------------------------------------------*/
;;;687 LCD_WriteReg(R16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
;;;688 LCD_WriteReg(R17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
;;;689 LCD_WriteReg(R18, 0x0000); /* VREG1OUT voltage */
;;;690 LCD_WriteReg(R19, 0x0000); /* VDV[4:0] for VCOM amplitude*/
;;;691 Delay(20); /* Dis-charge capacitor power voltage (200ms) */
000026 2014 MOVS r0,#0x14
000028 f7fffffe BL Delay
00002c 8027 STRH r7,[r4,#0]
00002e f24170b0 MOV r0,#0x17b0
000032 8060 STRH r0,[r4,#2]
000034 f8a48000 STRH r8,[r4,#0]
000038 f2401037 MOV r0,#0x137
00003c 8060 STRH r0,[r4,#2]
;;;692 LCD_WriteReg(R16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
;;;693 LCD_WriteReg(R17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
;;;694 Delay(5); /* Delay 50 ms */
00003e 2005 MOVS r0,#5
000040 f7fffffe BL Delay
000044 8026 STRH r6,[r4,#0]
000046 f2401039 MOV r0,#0x139
00004a 8060 STRH r0,[r4,#2]
;;;695 LCD_WriteReg(R18, 0x0139); /* VREG1OUT voltage */
;;;696 Delay(5); /* Delay 50 ms */
00004c 2005 MOVS r0,#5
00004e f7fffffe BL Delay
000052 8025 STRH r5,[r4,#0]
000054 f44f50e8 MOV r0,#0x1d00
000058 8060 STRH r0,[r4,#2]
00005a 2029 MOVS r0,#0x29
00005c 8020 STRH r0,[r4,#0]
00005e 8065 STRH r5,[r4,#2]
;;;697 LCD_WriteReg(R19, 0x1d00); /* VDV[4:0] for VCOM amplitude */
;;;698 LCD_WriteReg(R41, 0x0013); /* VCM[4:0] for VCOMH */
;;;699 Delay(5); /* Delay 50 ms */
000060 2005 MOVS r0,#5
000062 f7fffffe BL Delay
000066 2007 MOVS r0,#7
000068 8020 STRH r0,[r4,#0]
00006a f2401073 MOV r0,#0x173
00006e 8060 STRH r0,[r4,#2]
;;;700 LCD_WriteReg(R7, 0x0173); /* 262K color and display ON */
;;;701 }
000070 e8bd81f0 POP {r4-r8,pc}
;;;702
ENDP
AREA ||i.LCD_DisplayOn||, CODE, READONLY, ALIGN=1
LCD_DisplayOn PROC
;;;616 /* Write 16-bit Index, then Write Reg */
;;;617 LCD->LCD_REG = LCD_Reg;
000000 2107 MOVS r1,#7
000002 f04f40d8 MOV r0,#0x6c000000
000006 8001 STRH r1,[r0,#0]
;;;618 /* Write 16-bit Reg */
;;;619 LCD->LCD_RAM = LCD_RegValue;
000008 f2401173 MOV r1,#0x173
00000c 8041 STRH r1,[r0,#2]
;;;620 }
;;;621
;;;622 /*******************************************************************************
;;;623 * Function Name : LCD_ReadReg
;;;624 * Description : Reads the selected LCD Register.
;;;625 * Input : None
;;;626 * Output : None
;;;627 * Return : LCD Register Value.
;;;628 *******************************************************************************/
;;;629 u16 LCD_ReadReg(u8 LCD_Reg)
;;;630 {
;;;631 /* Write 16-bit Index (then Read Reg) */
;;;632 LCD->LCD_REG = LCD_Reg;
;;;633 /* Read 16-bit Reg */
;;;634 return (LCD->LCD_RAM);
;;;635 }
;;;636
;;;637 /*******************************************************************************
;;;638 * Function Name : LCD_WriteRAM_Prepare
;;;639 * Description : Prepare to write to the LCD RAM.
;;;640 * Input : None
;;;641 * Output : None
;;;642 * Return : None
;;;643 *******************************************************************************/
;;;644 void LCD_WriteRAM_Prepare(void)
;;;645 {
;;;646 LCD->LCD_REG = R34;
;;;647 }
;;;648
;;;649 /*******************************************************************************
;;;650 * Function Name : LCD_WriteRAM
;;;651 * Description : Writes to the LCD RAM.
;;;652 * Input : - RGB_Code: the pixel color in RGB mode (5-6-5).
;;;653 * Output : None
;;;654 * Return : None
;;;655 *******************************************************************************/
;;;656 void LCD_WriteRAM(u16 RGB_Code)
;;;657 {
;;;658 /* Write 16-bit GRAM Reg */
;;;659 LCD->LCD_RAM = RGB_Code;
;;;660 }
;;;661
;;;662 /*******
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -