📄 xllp_lcd.cod
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4345
TTL F:\wm520\PLATFORM\intel_dbpxa27x\Public\CSP\ARM\INTEL\PXA27X\XLLP\SOURCE\.\xllp_lcd.c
CODE32
00000 AREA |.drectve|, DRECTVE
DCB "-defaultlib:coredll.lib "
DCB "-defaultlib:corelibc.lib "
EXPORT |pOSTRegs| [ DATA ]
00000 AREA |.bss|, NOINIT
|pOSTRegs| % 0x4
EXPORT |XllpLCDLoadPalette|
; File f:\wm520\platform\intel_dbpxa27x\public\csp\arm\intel\pxa27x\xllp\source\xllp_lcd.c
00000 AREA |.text| { |XllpLCDLoadPalette| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpLCDLoadPalette|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpLCDLoadPalette| } ; comdat associative
|$T35495| DCD |$L35494|
DCD 0x40002c01
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpLCDLoadPalette| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpLCDLoadPalette| PROC
; 79 : {
00000 |$L35494|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M35492|
; 80 : volatile LCDRegs *p_LCDRegs;
; 81 :
; 82 : p_LCDRegs = (LCDRegs *) pXllpLCD->LCDC;
; 83 :
; 84 : // Reconfigure the second frame descriptor so that when loaded,
; 85 : // this descriptor loops to itself.
; 86 : pXllpLCD->frameDescriptorCh0fd2->FDADR = LCD_FDADR(pXllpLCD->frameDescriptorCh0fd2->PHYSADDR);
00004 e590206c ldr r2, [r0, #0x6C]
00008 e5901008 ldr r1, [r0, #8]
; 87 :
; 88 : // Reconfigure the palette frame descriptor so that it loads the second frame descriptor
; 89 : pXllpLCD->frameDescriptorPalette->FDADR = LCD_FDADR(pXllpLCD->frameDescriptorCh0fd2->FDADR);
; 90 : pXllpLCD->frameDescriptorPalette->FSADR = LCD_FSADR(pXllpLCD->_PALETTE_BUFFER_BASE_PHYSICAL);
; 91 : pXllpLCD->frameDescriptorPalette->FIDR = LCD_FIDR(0);
0000c e3a0e000 mov lr, #0
00010 e5923010 ldr r3, [r2, #0x10]
00014 e3c3300f bic r3, r3, #0xF
00018 e5823000 str r3, [r2]
0001c e590306c ldr r3, [r0, #0x6C]
00020 e5902074 ldr r2, [r0, #0x74]
00024 e5933000 ldr r3, [r3]
; 92 :
; 93 :
; 94 : if ( (p_LCDRegs->OVL1C1 & LCD_O1EN) || (p_LCDRegs->OVL2C1 & LCD_O2EN))
00028 e3c3300f bic r3, r3, #0xF
0002c e5823000 str r3, [r2]
00030 e5903038 ldr r3, [r0, #0x38]
00034 e5902074 ldr r2, [r0, #0x74]
00038 e3c33007 bic r3, r3, #7
0003c e5823004 str r3, [r2, #4]
00040 e5903074 ldr r3, [r0, #0x74]
00044 e583e008 str lr, [r3, #8]
00048 e5913050 ldr r3, [r1, #0x50]
; 95 : {
; 96 : // Overlays are enabled
; 97 : pXllpLCD->frameDescriptorPalette->LDCMD = LCD_Len(pXllpLCD->PaletteSize << 1) | LCD_Pal;
0004c e5902074 ldr r2, [r0, #0x74]
00050 e3130102 tst r3, #2, 2
00054 05913070 ldreq r3, [r1, #0x70]
00058 03130102 tsteq r3, #2, 2
; 98 : } else
; 99 : {
; 100 : // Overlays are disabled
; 101 : pXllpLCD->frameDescriptorPalette->LDCMD = LCD_Len(pXllpLCD->PaletteSize) | LCD_Pal;
0005c 05903024 ldreq r3, [r0, #0x24]
00060 03833301 orreq r3, r3, #1, 6
00064 15903024 ldrne r3, [r0, #0x24]
00068 13833402 orrne r3, r3, #2, 8
0006c 11a03083 movne r3, r3, lsl #1
00070 e582300c str r3, [r2, #0xC]
; 102 : }
; 103 :
; 104 : pXllpLCD->frameDescriptorPalette->PHYSADDR = LCD_FDADR(pXllpLCD->_PALETTE_FRAME_DESCRIPTOR_BASE_PHYSICAL);
00074 e5903058 ldr r3, [r0, #0x58]
00078 e5902074 ldr r2, [r0, #0x74]
0007c e3c3300f bic r3, r3, #0xF
00080 e5823010 str r3, [r2, #0x10]
; 105 :
; 106 : // Insert the palette descriptor into the descriptor chain to load the palette.
; 107 : // When this load completes, fd2 is automatically loaded next in the chain.
; 108 : // fd2 now loops to itself and continues to load frame data.
; 109 : pXllpLCD->frameDescriptorCh0fd1->FDADR = LCD_FDADR(pXllpLCD->_PALETTE_FRAME_DESCRIPTOR_BASE_PHYSICAL);
00084 e5903058 ldr r3, [r0, #0x58]
00088 e5902068 ldr r2, [r0, #0x68]
0008c e3c3300f bic r3, r3, #0xF
00090 e5823000 str r3, [r2]
; 110 :
; 111 : // swap frame descriptor pointers so that this operation is reversed the next time through
; 112 : pXllpLCD->frameDescriptorTemp = pXllpLCD->frameDescriptorCh0fd1;
00094 e5903068 ldr r3, [r0, #0x68]
; 113 : pXllpLCD->frameDescriptorCh0fd1 = pXllpLCD->frameDescriptorCh0fd2;
00098 e590206c ldr r2, [r0, #0x6C]
0009c e5803078 str r3, [r0, #0x78]
; 114 : pXllpLCD->frameDescriptorCh0fd2 = pXllpLCD->frameDescriptorTemp;
000a0 e5802068 str r2, [r0, #0x68]
000a4 e580306c str r3, [r0, #0x6C]
; 115 : }
000a8 e49de004 ldr lr, [sp], #4
000ac e12fff1e bx lr
000b0 |$M35493|
ENDP ; |XllpLCDLoadPalette|
EXPORT |XllpLCDSuspend|
00000 AREA |.text| { |XllpLCDSuspend| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpLCDSuspend|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpLCDSuspend| } ; comdat associative
|$T35508| DCD |$L35507|
DCD 0x40002301
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpLCDSuspend| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpLCDSuspend| PROC
; 118 : {
00000 |$L35507|
00000 e24dd004 sub sp, sp, #4
00004 |$M35505|
00004 e3510000 cmp r1, #0
; 119 : volatile unsigned int APB_Temp;
; 120 : volatile LCDRegs *p_LCDRegs;
; 121 : volatile XLLP_GPIO_T *p_GPIORegs;
; 122 :
; 123 : p_LCDRegs = (LCDRegs *) pXllpLCD->LCDC;
00008 e5902008 ldr r2, [r0, #8]
; 124 : p_GPIORegs = (XLLP_GPIO_T *) pXllpLCD->GPIO;
0000c e5900000 ldr r0, [r0]
; 125 :
; 126 : switch(SuspendType)
00010 0a000004 beq |$L35188|
00014 e3510001 cmp r1, #1
00018 1a000014 bne |$L35185|
; 144 : break;
; 145 : case Suspend_Immediate:
; 146 : p_LCDRegs->LCCR0 &= ~LCD_ENB;
0001c e5923000 ldr r3, [r2]
; 147 :
; 148 : //p_GPIORegs->GPDR1 |= XLLP_GPIO_BIT_PWR_EN;
; 149 : //p_GPIORegs->GAFR1_L &= ~XLLP_GPIO_AF_BIT_L_PWREN_MASK;
; 150 : //p_GPIORegs->GPCR1 |= XLLP_GPIO_BIT_PWR_EN;
; 151 : p_GPIORegs->GPDR2 |= XLLP_GPIO_BIT_L_PWR_EN;
00020 e3c33001 bic r3, r3, #1
; 152 : p_GPIORegs->GAFR2_U &= ~XLLP_GPIO_AF_BIT_L_PWR_EN_MASK;
; 153 : p_GPIORegs->GPSR2 |= XLLP_GPIO_BIT_L_PWR_EN;
; 154 : break;
00024 ea000007 b |$L35504|
00028 |$L35188|
; 127 : {
; 128 : case Suspend_Graceful:
; 129 : // Initiate power down sequence
; 130 : p_LCDRegs->LCCR0 |= LCD_DIS;
00028 e5923000 ldr r3, [r2]
0002c e3833b01 orr r3, r3, #1, 22
00030 e4823038 str r3, [r2], #0x38
00034 |$L35190|
; 131 :
; 132 : // Wait for LDD bit to get set once the last DMA transfer has completed
; 133 : while(!(p_LCDRegs->LCSR0 & LCD_LDD));
00034 e5923000 ldr r3, [r2]
00038 e3130001 tst r3, #1
0003c 0afffffc beq |$L35190|
; 134 :
; 135 : // Clear the sticky LDD bit
; 136 : p_LCDRegs->LCSR0 |= LCD_LDD;
00040 e5923000 ldr r3, [r2]
; 137 :
; 138 : //p_GPIORegs->GPDR1 |= XLLP_GPIO_BIT_PWR_EN;
; 139 : //p_GPIORegs->GAFR1_L &= ~XLLP_GPIO_AF_BIT_L_PWREN_MASK;
; 140 : //p_GPIORegs->GPCR1 |= XLLP_GPIO_BIT_PWR_EN;
; 141 : p_GPIORegs->GPDR2 |= XLLP_GPIO_BIT_L_PWR_EN;
; 142 : p_GPIORegs->GAFR2_U &= ~XLLP_GPIO_AF_BIT_L_PWR_EN_MASK;
00044 e3833001 orr r3, r3, #1
00048 |$L35504|
00048 e5823000 str r3, [r2]
0004c e5903014 ldr r3, [r0, #0x14]
; 143 : p_GPIORegs->GPSR2 |= XLLP_GPIO_BIT_L_PWR_EN;
00050 e3833502 orr r3, r3, #2, 10
00054 e5803014 str r3, [r0, #0x14]
00058 e5903068 ldr r3, [r0, #0x68]
0005c e3c33903 bic r3, r3, #3, 18
00060 e5803068 str r3, [r0, #0x68]
00064 e5903020 ldr r3, [r0, #0x20]
00068 e3833502 orr r3, r3, #2, 10
0006c e5803020 str r3, [r0, #0x20]
00070 |$L35185|
; 155 : default :
; 156 : break;
; 157 : }
; 158 :
; 159 : // don't use lock/unlock here because system call may be unavailable.
; 160 : ////p_GPIORegs->GPCR0 = XLLP_GPIO_BIT_PWM_OUT0;
; 161 : p_GPIORegs->GPCR0 |= XLLP_GPIO_BIT_LED_EN;
00070 e5903024 ldr r3, [r0, #0x24]
00074 e3833801 orr r3, r3, #1, 16
00078 e5803024 str r3, [r0, #0x24]
; 162 :
; 163 : //
; 164 : // Ensure GPIO writes that have posted complete
; 165 : //
; 166 : APB_Temp = p_GPIORegs->GPCR0;
0007c e5903024 ldr r3, [r0, #0x24]
00080 e58d3000 str r3, [sp]
; 167 :
; 168 : }
00084 e28dd004 add sp, sp, #4
00088 e12fff1e bx lr
0008c |$M35506|
ENDP ; |XllpLCDSuspend|
EXPORT |XllpLCDSetDisplayPage|
EXPORT |??_C@_1FK@OFIOPECM@?$AAZ?$AAG?$AAB?$AA?3?$AA?5?$AAX?$AAl?$AAl?$AAp?$AAL?$AAC?$AAD?$AAS?$AAe?$AAt?$AAD?$AAi?$AAs?$AAp?$AAl@| [ DATA ] ; `string'
IMPORT |NKDbgPrintfW|
00000 AREA |.text| { |XllpLCDSetDisplayPage| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpLCDSetDisplayPage|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpLCDSetDisplayPage| } ; comdat associative
|$T35519| DCD |$L35518|
DCD 0x40000f01
00000 AREA |.rdata| { |??_C@_1FK@OFIOPECM@?$AAZ?$AAG?$AAB?$AA?3?$AA?5?$AAX?$AAl?$AAl?$AAp?$AAL?$AAC?$AAD?$AAS?$AAe?$AAt?$AAD?$AAi?$AAs?$AAp?$AAl@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1FK@OFIOPECM@?$AAZ?$AAG?$AAB?$AA?3?$AA?5?$AAX?$AAl?$AAl?$AAp?$AAL?$AAC?$AAD?$AAS?$AAe?$AAt?$AAD?$AAi?$AAs?$AAp?$AAl@| DCB "Z"
DCB 0x0, "G", 0x0, "B", 0x0, ":", 0x0, " ", 0x0, "X", 0x0, "l"
DCB 0x0, "l", 0x0, "p", 0x0, "L", 0x0, "C", 0x0, "D", 0x0, "S"
DCB 0x0, "e", 0x0, "t", 0x0, "D", 0x0, "i", 0x0, "s", 0x0, "p"
DCB 0x0, "l", 0x0, "a", 0x0, "y", 0x0, "P", 0x0, "a", 0x0, "g"
DCB 0x0, "e", 0x0, ":", 0x0, " ", 0x0, "%", 0x0, "d", 0x0, ","
DCB 0x0, " ", 0x0, "a", 0x0, "d", 0x0, "d", 0x0, "r", 0x0, ":"
DCB 0x0, " ", 0x0, "%", 0x0, "0", 0x0, "8", 0x0, "x", 0x0, 0xd
DCB 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpLCDSetDisplayPage| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpLCDSetDisplayPage| PROC
; 176 : {
00000 |$L35518|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M35516|
00004 e1a05002 mov r5, r2
00008 e3510000 cmp r1, #0
0000c e1a04000 mov r4, r0
; 177 : unsigned long page_addr;
; 178 :
; 179 : // Set the physical address of the frame buffer for all three frame descriptors //哪三个FRAME?
; 180 : // Make sure that you've initialized FrameBufferSize before calling this function either manually or through a call to XllpLCDInit().
; 181 : pXllpLCD->CurrentPage = page;
; 182 : //page_addr = pXllpLCD->_FRAME_BUFFER_BASE_PHYSICAL + ( pXllpLCD->CurrentPage * pXllpLCD->FrameBufferSize ); //有在SRAM中,有在SDRAM中,可以这样算?
; 183 : if(page==0)
; 184 : page_addr = pXllpLCD->_FRAME_BUFFER_BASE_PHYSICAL;
00010 05945034 ldreq r5, [r4, #0x34]
; 185 : else
; 186 : page_addr = pageaddr;//baseframe2?
; 187 : RETAILMSG(ZGB_MSG, (TEXT("ZGB: XllpLCDSetDisplayPage: %d, addr: %08x\r\n"),page, page_addr));
00014 e59f001c ldr r0, [pc, #0x1C]
00018 e5841030 str r1, [r4, #0x30]
0001c e1a02005 mov r2, r5
00020 eb000000 bl NKDbgPrintfW
; 188 :
; 189 : pXllpLCD->frameDescriptorCh0fd1->FSADR = LCD_FSADR( page_addr );
00024 e5942068 ldr r2, [r4, #0x68]
00028 e3c53007 bic r3, r5, #7
0002c e5823004 str r3, [r2, #4]
; 190 :
; 191 : }
00030 e8bd4030 ldmia sp!, {r4, r5, lr}
00034 e12fff1e bx lr
00038 |$L35521|
00038 00000000 DCD |??_C@_1FK@OFIOPECM@?$AAZ?$AAG?$AAB?$AA?3?$AA?5?$AAX?$AAl?$AAl?$AAp?$AAL?$AAC?$AAD?$AAS?$AAe?$AAt?$AAD?$AAi?$AAs?$AAp?$AAl@|
0003c |$M35517|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -