⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xllp_dvm.cod

📁 pxa270为硬件平台的wince操作系统XLLP驱动源码
💻 COD
📖 第 1 页 / 共 2 页
字号:
; 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 + -