📄 xllp_dvm.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_dvm.c
CODE32
00000 AREA |.drectve|, DRECTVE
DCB "-defaultlib:coredll.lib "
DCB "-defaultlib:corelibc.lib "
EXPORT |XllpDvmInit|
; File f:\wm520\platform\intel_dbpxa27x\public\csp\arm\intel\pxa27x\xllp\source\xllp_dvm.c
00000 AREA |.text| { |XllpDvmInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpDvmInit|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpDvmInit| } ; comdat associative
|$T1061| DCD |$L1060|
DCD 0x40001000
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpDvmInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpDvmInit| PROC
; 23 : {
00000 |$L1060|
00000 |$M1058|
; 24 : v_pClkReg->cken |= XLLP_CLKEN_PWRI2C;
00000 e5913004 ldr r3, [r1, #4]
; 25 : v_pClkReg->cken |= XLLP_CLKEN_I2C;
; 26 : v_pPmgrReg->PCFR |= XLLP_PCFR_PI2C_EN; //unncessary for XLLP_PCFR_SYSEN_EN
; 27 :
; 28 : gpio->GPDR3 |= (XLLP_GPIO_BIT_SCL | XLLP_GPIO_BIT_SDA);
00004 e3833902 orr r3, r3, #2, 18
00008 e5813004 str r3, [r1, #4]
0000c e5913004 ldr r3, [r1, #4]
; 29 : gpio->GAFR3_U |= ( XLLP_GPIO_AF_BIT_SCL | XLLP_GPIO_AF_BIT_SDA);
00010 e3833901 orr r3, r3, #1, 18
00014 e5813004 str r3, [r1, #4]
00018 e590301c ldr r3, [r0, #0x1C]
0001c e3833040 orr r3, r3, #0x40
00020 e580301c str r3, [r0, #0x1C]
00024 e592310c ldr r3, [r2, #0x10C]
00028 e3833606 orr r3, r3, #6, 12
0002c e582310c str r3, [r2, #0x10C]
00030 e5923070 ldr r3, [r2, #0x70]
00034 e3833b05 orr r3, r3, #5, 22
00038 e5823070 str r3, [r2, #0x70]
; 30 : }
0003c e12fff1e bx lr
00040 |$M1059|
ENDP ; |XllpDvmInit|
EXPORT |XLLPGetCurrentFreqSetting|
IMPORT |XllpXSC1ReadCLKCFG|
00000 AREA |.text| { |XLLPGetCurrentFreqSetting| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XLLPGetCurrentFreqSetting|, PDATA, SELECTION=5, ASSOC=|.text| { |XLLPGetCurrentFreqSetting| } ; comdat associative
|$T1077| DCD |$L1076|
DCD 0x40001901
; Function compile flags: /Ogsy
00000 AREA |.text| { |XLLPGetCurrentFreqSetting| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XLLPGetCurrentFreqSetting| PROC
; 51 : {
00000 |$L1076|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M1074|
00004 e1a04001 mov r4, r1
00008 e1a05000 mov r5, r0
; 52 : XLLP_FREQ_PARAM freq_status;
; 53 : XLLP_UINT32_T CLKCFGValue = 0;
; 54 : XLLP_UINT32_T LMulti;
; 55 : XLLP_UINT32_T NMulti;
; 56 :
; 57 : CLKCFGValue = XllpXSC1ReadCLKCFG();
0000c eb000000 bl XllpXSC1ReadCLKCFG
; 58 : freq_status.turbo_mode = (CLKCFGValue & XLLP_CLKCFG_T);
; 59 : freq_status.fastbus_mode = (CLKCFGValue & XLLP_CLKCFG_B) >>3;
; 60 :
; 61 : LMulti = v_pClkReg->ccsr & XLLP_CCCR_L;
00010 e594e00c ldr lr, [r4, #0xC]
; 62 : NMulti = ((v_pClkReg->ccsr & XLLP_CCCR_2N)>>7);
00014 e594300c ldr r3, [r4, #0xC]
00018 e1a02e00 mov r2, r0, lsl #28
0001c e1a02fa2 mov r2, r2, lsr #31
00020 e1a03a83 mov r3, r3, lsl #21
00024 e2001001 and r1, r0, #1
00028 e585200c str r2, [r5, #0xC]
0002c e1a03e23 mov r3, r3, lsr #28
00030 e20e201f and r2, lr, #0x1F
; 63 :
; 64 : if (freq_status.turbo_mode == 1)
00034 e3510001 cmp r1, #1
; 65 : freq_status.frequency = (PRIMARY_CLOCK_FREQ * LMulti * NMulti)/2;
00038 00020293 muleq r2, r3, r2
0003c e5851010 str r1, [r5, #0x10]
; 66 : else
; 67 : freq_status.frequency = (PRIMARY_CLOCK_FREQ * LMulti);
; 68 : //read coprocessor
; 69 : return freq_status;
00040 e1a00005 mov r0, r5
00044 00823082 addeq r3, r2, r2, lsl #1
00048 00823103 addeq r3, r2, r3, lsl #2
0004c 01a030a3 moveq r3, r3, lsr #1
00050 10823082 addne r3, r2, r2, lsl #1
00054 10823103 addne r3, r2, r3, lsl #2
00058 e5853008 str r3, [r5, #8]
; 70 : }
0005c e8bd4030 ldmia sp!, {r4, r5, lr}
00060 e12fff1e bx lr
00064 |$M1075|
ENDP ; |XLLPGetCurrentFreqSetting|
EXPORT |XLLPSetCoreRunFrequency|
IMPORT |XllpIntcDisableInts|
IMPORT |XllpXSC1FreqChange|
IMPORT |XllpIntcRestoreInts|
00000 AREA |.text| { |XLLPSetCoreRunFrequency| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XLLPSetCoreRunFrequency|, PDATA, SELECTION=5, ASSOC=|.text| { |XLLPSetCoreRunFrequency| } ; comdat associative
|$T1089| DCD |$L1088|
DCD 0x40001403
; Function compile flags: /Ogsy
00000 AREA |.text| { |XLLPSetCoreRunFrequency| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XLLPSetCoreRunFrequency| PROC
; 93 : {
00000 |$L1088|
00000 e1a0c00d mov r12, sp
00004 e92d000e stmdb sp!, {r1 - r3}
00008 e92d5010 stmdb sp!, {r4, r12, lr}
0000c |$M1086|
; 94 : //set up the new frequency mulitipliers, N and L
; 95 : XLLP_UINT32_T newCLKCFGValue = 0;
; 96 : XLLP_UINT32_T CLKCFGValue = 0;
; 97 : XLLP_UINT32_T Int_num;
; 98 : XLLP_UINT32_T LMulti, NMulti;
; 99 :
; 100 : LMulti = freq_param.frequency / PRIMARY_CLOCK_FREQ;
0000c e59f2038 ldr r2, [pc, #0x38]
00010 e0821293 umull r1, r2, r3, r2
00014 e1a02122 mov r2, r2, lsr #2
; 101 : NMulti = 2; //run mode N=2
; 102 : v_pClkReg->cccr = (NMulti<<7) | LMulti;
00018 e3822c01 orr r2, r2, #1, 24
0001c e5802000 str r2, [r0]
; 103 : newCLKCFGValue =(XLLP_CLKCFG_F | (freq_param.fastbus_mode<<3) );
; 104 : Int_num = XllpIntcDisableInts();
00020 eb000000 bl XllpIntcDisableInts
00024 e59d3018 ldr r3, [sp, #0x18]
00028 e1a04000 mov r4, r0
0002c e1a03183 mov r3, r3, lsl #3
00030 e3830002 orr r0, r3, #2
; 105 : XllpXSC1FreqChange(newCLKCFGValue);
00034 eb000000 bl XllpXSC1FreqChange
; 106 : XllpIntcRestoreInts(Int_num);
00038 e1a00004 mov r0, r4
0003c eb000000 bl XllpIntcRestoreInts
; 107 : return XLLP_TRUE;
00040 e3a00001 mov r0, #1
; 108 : }
00044 e89d6010 ldmia sp, {r4, sp, lr}
00048 e12fff1e bx lr
0004c |$L1091|
0004c 4ec4ec4f DCD 0x4ec4ec4f
00050 |$M1087|
ENDP ; |XLLPSetCoreRunFrequency|
EXPORT |XllpSetCoreVoltage|
00000 AREA |.text| { |XllpSetCoreVoltage| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpSetCoreVoltage|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpSetCoreVoltage| } ; comdat associative
|$T1104| DCD |$L1103|
DCD 0x40003101
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpSetCoreVoltage| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpSetCoreVoltage| PROC
; 131 : {
00000 |$L1103|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M1101|
; 132 :
; 133 : // lpWriteDebugStringFunc(TEXT("SetCoreVoltage...\r\n"));
; 134 : v_pI2CReg->ISAR = 0x0; // Set Slave address
00004 e3a0e000 mov lr, #0
00008 e580e020 str lr, [r0, #0x20]
; 135 : v_pI2CReg->ICR = 0x0; // Clear interrupts in ICR
; 136 : v_pI2CReg->ICR = (XLLP_ICR_UIE | XLLP_ICR_SCLEA); // Enable I2C unit, and enable clock output
0000c e3a03060 mov r3, #0x60
00010 e580e010 str lr, [r0, #0x10]
00014 e5803010 str r3, [r0, #0x10]
; 137 : v_pI2CReg->IDBR = 0x40; // Set D/A's slave address and enable write mode
00018 e3a02040 mov r2, #0x40
; 138 : v_pI2CReg->ICR = (XLLP_ICR_UIE | XLLP_ICR_SCLEA | XLLP_ICR_START | XLLP_ICR_TB); // Send START and then TRANSMIT the byte.
0001c e3a03069 mov r3, #0x69
00020 e5802008 str r2, [r0, #8]
00024 e5803010 str r3, [r0, #0x10]
00028 |$L983|
; 139 :
; 140 :
; 141 : while((v_pI2CReg->ISR & XLLP_ISR_ITE) != XLLP_ISR_ITE); // Wait for ITE to go high
00028 e5903018 ldr r3, [r0, #0x18]
0002c e2033040 and r3, r3, #0x40
00030 e3530040 cmp r3, #0x40
00034 1afffffb bne |$L983|
; 142 :
; 143 : v_pI2CReg->ISR = XLLP_ISR_ITE; // Write the ITE bit to clear it.
00038 e5802018 str r2, [r0, #0x18]
; 144 :
; 145 : v_pI2CReg->IDBR = 0x0; // Command
0003c e580e008 str lr, [r0, #8]
; 146 : v_pI2CReg->ICR = (XLLP_ICR_UIE | XLLP_ICR_SCLEA | XLLP_ICR_TB); // Clear START, STOP, set TB
00040 e3a0e068 mov lr, #0x68
00044 e580e010 str lr, [r0, #0x10]
00048 |$L986|
; 147 : while((v_pI2CReg->ISR & XLLP_ISR_ITE) != XLLP_ISR_ITE); // Wait for ITE to go high
00048 e5903018 ldr r3, [r0, #0x18]
0004c e2033040 and r3, r3, #0x40
00050 e3530040 cmp r3, #0x40
00054 1afffffb bne |$L986|
; 148 : v_pI2CReg->ISR = XLLP_ISR_ITE; // Write the ITE bit to clear it.
; 149 :
; 150 : v_pI2CReg->IDBR = dacValue & 0x000000FF; // LSB
00058 e20130ff and r3, r1, #0xFF
0005c e5802018 str r2, [r0, #0x18]
00060 e5803008 str r3, [r0, #8]
; 151 : // EdbgOutputDebugString("Enters here - LSB I2C->IDBR = %x\r\n",I2C->IDBR);
; 152 : v_pI2CReg->ICR = (XLLP_ICR_UIE | XLLP_ICR_SCLEA | XLLP_ICR_TB); // Clear START, STOP, set TB
00064 e580e010 str lr, [r0, #0x10]
00068 |$L989|
; 153 : while((v_pI2CReg->ISR & XLLP_ISR_ITE) != XLLP_ISR_ITE); // Wait for ITE to go high
00068 e5903018 ldr r3, [r0, #0x18]
0006c e2033040 and r3, r3, #0x40
00070 e3530040 cmp r3, #0x40
00074 1afffffb bne |$L989|
; 154 : v_pI2CReg->ISR = XLLP_ISR_ITE; // Write the ITE bit to clear it.
; 155 : v_pI2CReg->IDBR = (dacValue & 0x0000FF00) >> 8; // MSB
00078 e1a03801 mov r3, r1, lsl #16
0007c e1a03c23 mov r3, r3, lsr #24
00080 e5802018 str r2, [r0, #0x18]
00084 e5803008 str r3, [r0, #8]
; 156 :
; 157 : // EdbgOutputDebugString("Enters here - MSB I2C->IDBR = %x\r\n",I2C->IDBR);
; 158 : v_pI2CReg->ICR = (XLLP_ICR_UIE | XLLP_ICR_SCLEA | XLLP_ICR_TB); // Clear START, STOP, set TB
00088 e580e010 str lr, [r0, #0x10]
0008c |$L992|
; 159 : while((v_pI2CReg->ISR & XLLP_ISR_ITE) != XLLP_ISR_ITE); // Wait for ITE to go high
0008c e5903018 ldr r3, [r0, #0x18]
00090 e2033040 and r3, r3, #0x40
00094 e3530040 cmp r3, #0x40
00098 1afffffb bne |$L992|
; 160 : v_pI2CReg->ISR = XLLP_ISR_ITE; // Write the ITE bit to clear it.
; 161 :
; 162 :
; 163 :
; 164 : v_pI2CReg->ICR = (XLLP_ICR_UIE | XLLP_ICR_SCLEA | XLLP_ICR_STOP | XLLP_ICR_TB);
0009c e3a0306a mov r3, #0x6A
000a0 e5802018 str r2, [r0, #0x18]
000a4 e5803010 str r3, [r0, #0x10]
000a8 |$L995|
; 165 : while((v_pI2CReg->ISR & XLLP_ISR_ITE) != XLLP_ISR_ITE); // Wait for ITE to go high
000a8 e5903018 ldr r3, [r0, #0x18]
000ac e2033040 and r3, r3, #0x40
000b0 e3530040 cmp r3, #0x40
000b4 1afffffb bne |$L995|
; 166 : v_pI2CReg->ISR = XLLP_ISR_ITE; // Write the ITE bit to clear it.
000b8 e5802018 str r2, [r0, #0x18]
; 167 : // EdbgOutputDebugString("Enters here - I2C->ISR = %x\r\n",I2C->ISR);
; 168 : }
000bc e49de004 ldr lr, [sp], #4
000c0 e12fff1e bx lr
000c4 |$M1102|
ENDP ; |XllpSetCoreVoltage|
EXPORT |XllpVMSetVoltage|
IMPORT |XllpXSC1ChangeVoltage|
00000 AREA |.text| { |XllpVMSetVoltage| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpVMSetVoltage|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpVMSetVoltage| } ; comdat associative
|$T1118| DCD |$L1117|
DCD 0x40006801
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpVMSetVoltage| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpVMSetVoltage| PROC
; 190 : {
00000 |$L1117|
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M1115|
00004 e1a04001 mov r4, r1
; 191 : XLLP_UINT32_T dataArray[3];
; 192 : XLLP_UINT32_T start = 0, end = 0;
; 193 : XLLP_UINT32_T i = 0;
; 194 :
; 195 : dataArray[0] = 0; //Command 0
; 196 : dataArray[1] = (DACValue & 0x000000FF);
; 197 : dataArray[2] = (DACValue & 0x0000FF00)>>8;
; 198 :
; 199 :
; 200 : v_pPmgrReg->PVCR = 0;
00008 e3a03000 mov r3, #0
0000c e5843040 str r3, [r4, #0x40]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -