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

📄 xllp_i2c.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_i2c.c
	CODE32

  00000			 AREA	 |.drectve|, DRECTVE
	DCB	"-defaultlib:coredll.lib "
	DCB	"-defaultlib:corelibc.lib "

	EXPORT	|XllpI2cInit|
; File f:\wm520\platform\intel_dbpxa27x\public\csp\arm\intel\pxa27x\xllp\source\xllp_i2c.c

  00000			 AREA	 |.text| { |XllpI2cInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$XllpI2cInit|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpI2cInit| } ; comdat associative
|$T1066| DCD	|$L1065|
	DCD	0x40001601
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |XllpI2cInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |XllpI2cInit| PROC

; 45   : {

  00000		 |$L1065|
  00000	e92d4010	 stmdb       sp!, {r4, lr}
  00004		 |$M1063|
  00004	e1a04000	 mov         r4, r0

; 46   : 	I2C_regs->ICR = 0;

  00008	e3a00000	 mov         r0, #0
  0000c	e5840010	 str         r0, [r4, #0x10]

; 47   : 
; 48   : 	clkMgr->cken |=  XLLP_CLKEN_I2C;

  00010	e592e004	 ldr         lr, [r2, #4]

; 49   : 
; 50   : 	gpio->GPDR3 |= (XLLP_GPIO_BIT_SCL | XLLP_GPIO_BIT_SDA);
; 51   : 
; 52   : 	gpio->GAFR3_U |=  ( XLLP_GPIO_AF_BIT_SCL | XLLP_GPIO_AF_BIT_SDA);
; 53   : 
; 54   : 	/* Setup I2C slave address */
; 55   : 	I2C_regs->ISAR =  dev_id;
; 56   : 
; 57   : 	I2C_regs->ICR = XLLP_ICR_SCLEA;
; 58   : 	I2C_regs->ICR |= XLLP_ICR_UIE;
; 59   : 
; 60   : 	return(XLLP_FALSE);

  00014	e3a00000	 mov         r0, #0
  00018	e38ee901	 orr         lr, lr, #1, 18
  0001c	e582e004	 str         lr, [r2, #4]
  00020	e591210c	 ldr         r2, [r1, #0x10C]
  00024	e3a0e020	 mov         lr, #0x20
  00028	e3822606	 orr         r2, r2, #6, 12
  0002c	e581210c	 str         r2, [r1, #0x10C]
  00030	e5912070	 ldr         r2, [r1, #0x70]
  00034	e3822b05	 orr         r2, r2, #5, 22
  00038	e5812070	 str         r2, [r1, #0x70]
  0003c	e5843020	 str         r3, [r4, #0x20]
  00040	e584e010	 str         lr, [r4, #0x10]
  00044	e5943010	 ldr         r3, [r4, #0x10]
  00048	e3833040	 orr         r3, r3, #0x40
  0004c	e5843010	 str         r3, [r4, #0x10]

; 61   : }

  00050	e8bd4010	 ldmia       sp!, {r4, lr}
  00054	e12fff1e	 bx          lr
  00058		 |$M1064|

			 ENDP  ; |XllpI2cInit|

	EXPORT	|XllpPI2cInit|

  00000			 AREA	 |.text| { |XllpPI2cInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$XllpPI2cInit|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpPI2cInit| } ; comdat associative
|$T1078| DCD	|$L1077|
	DCD	0x40001401
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |XllpPI2cInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |XllpPI2cInit| PROC

; 80   : {

  00000		 |$L1077|
  00000	e52de004	 str         lr, [sp, #-4]!
  00004		 |$M1075|
  00004	e1a0e000	 mov         lr, r0

; 81   : 
; 82   : 	clkMgr->cken |=  XLLP_CLKEN_PWRI2C;

  00008	e5921004	 ldr         r1, [r2, #4]

; 83   : 
; 84   : 	I2C_regs->PCFR |= 0x40;
; 85   : 	
; 86   : 	I2C_regs->ICR = 0;

  0000c	e3a00000	 mov         r0, #0
  00010	e3811902	 orr         r1, r1, #2, 18
  00014	e5821004	 str         r1, [r2, #4]
  00018	e59e201c	 ldr         r2, [lr, #0x1C]

; 87   : 	/* Setup I2C slave address */
; 88   : 	I2C_regs->ISAR =  dev_id;
; 89   : 
; 90   : 	I2C_regs->ICR = XLLP_ICR_SCLEA | XLLP_ICR_FM;

  0001c	e3a01902	 mov         r1, #2, 18
  00020	e3811020	 orr         r1, r1, #0x20
  00024	e3822040	 orr         r2, r2, #0x40
  00028	e58e201c	 str         r2, [lr, #0x1C]
  0002c	e58e0190	 str         r0, [lr, #0x190]
  00030	e58e31a0	 str         r3, [lr, #0x1A0]
  00034	e58e1190	 str         r1, [lr, #0x190]

; 91   : 	I2C_regs->ICR |= XLLP_ICR_UIE;

  00038	e59e3190	 ldr         r3, [lr, #0x190]

; 92   : 
; 93   : 	return(XLLP_FALSE);

  0003c	e3a00000	 mov         r0, #0
  00040	e3833040	 orr         r3, r3, #0x40
  00044	e58e3190	 str         r3, [lr, #0x190]

; 94   : }

  00048	e49de004	 ldr         lr, [sp], #4
  0004c	e12fff1e	 bx          lr
  00050		 |$M1076|

			 ENDP  ; |XllpPI2cInit|

	EXPORT	|XllpI2cRxFull|
	IMPORT	|XllpOstDelayMilliSeconds|

  00000			 AREA	 |.text| { |XllpI2cRxFull| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$XllpI2cRxFull|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpI2cRxFull| } ; comdat associative
|$T1095| DCD	|$L1094|
	DCD	0x40001701
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |XllpI2cRxFull| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |XllpI2cRxFull| PROC

; 104  : {

  00000		 |$L1094|
  00000	e92d4070	 stmdb       sp!, {r4 - r6, lr}
  00004		 |$M1092|
  00004	e1b04002	 movs        r4, r2
  00008	e1a06001	 mov         r6, r1
  0000c	e1a05000	 mov         r5, r0

; 105  : 	XLLP_UINT32_T temp;
; 106  : 
; 107  : 	while (timeout--)

  00010	0a000009	 beq         |$L1084|
  00014		 |$L887|

; 108  : 	{
; 109  : 		temp = I2C_regs->ISR;

  00014	e595e018	 ldr         lr, [r5, #0x18]
  00018	e2444001	 sub         r4, r4, #1

; 110  : 		if ((temp & XLLP_ISR_IRF) == XLLP_ISR_IRF)

  0001c	e20e3080	 and         r3, lr, #0x80
  00020	e3530080	 cmp         r3, #0x80
  00024	0a000007	 beq         |$L1083|

; 114  : 		}
; 115  : 		// delay 1 ms here
; 116  : 		XllpOstDelayMilliSeconds(pOSTRegs, 1);

  00028	e3a01001	 mov         r1, #1
  0002c	e1a00006	 mov         r0, r6
  00030	eb000000	 bl          XllpOstDelayMilliSeconds
  00034	e3540000	 cmp         r4, #0
  00038	1afffff5	 bne         |$L887|
  0003c		 |$L1084|

; 117  : 	}
; 118  : 
; 119  :   return XLLP_TRUE;

  0003c	e3a00001	 mov         r0, #1

; 120  : }

  00040	e8bd4070	 ldmia       sp!, {r4 - r6, lr}
  00044	e12fff1e	 bx          lr
  00048		 |$L1083|

; 111  : 		{
; 112  : 			I2C_regs->ISR = temp | XLLP_ISR_IRF;

  00048	e38e3080	 orr         r3, lr, #0x80
  0004c	e5853018	 str         r3, [r5, #0x18]

; 113  : 			return XLLP_FALSE;

  00050	e3a00000	 mov         r0, #0

; 120  : }

  00054	e8bd4070	 ldmia       sp!, {r4 - r6, lr}
  00058	e12fff1e	 bx          lr
  0005c		 |$M1093|

			 ENDP  ; |XllpI2cRxFull|

	EXPORT	|XllpI2cTxEmpty|

  00000			 AREA	 |.text| { |XllpI2cTxEmpty| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$XllpI2cTxEmpty|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpI2cTxEmpty| } ; comdat associative
|$T1112| DCD	|$L1111|
	DCD	0x40001c01
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |XllpI2cTxEmpty| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |XllpI2cTxEmpty| PROC

; 128  : {

  00000		 |$L1111|
  00000	e92d4070	 stmdb       sp!, {r4 - r6, lr}
  00004		 |$M1109|
  00004	e1b05002	 movs        r5, r2
  00008	e1a06001	 mov         r6, r1
  0000c	e1a04000	 mov         r4, r0

; 129  : 	XLLP_UINT32_T temp;
; 130  : 
; 131  : 	while (timeout--)

  00010	0a000009	 beq         |$L1101|
  00014		 |$L899|

; 132  : 	{
; 133  : 		temp = I2C_regs->ISR;

  00014	e5940018	 ldr         r0, [r4, #0x18]
  00018	e2455001	 sub         r5, r5, #1

; 134  : 		if((temp & XLLP_ISR_ITE) == XLLP_ISR_ITE)

  0001c	e2003040	 and         r3, r0, #0x40
  00020	e3530040	 cmp         r3, #0x40
  00024	0a000007	 beq         |$L1100|

; 143  : 		}
; 144  : 		// delay 1 ms here
; 145  : 		XllpOstDelayMilliSeconds(pOSTRegs, 1);

  00028	e3a01001	 mov         r1, #1
  0002c	e1a00006	 mov         r0, r6
  00030	eb000000	 bl          XllpOstDelayMilliSeconds
  00034	e3550000	 cmp         r5, #0
  00038	1afffff5	 bne         |$L899|
  0003c		 |$L1101|

; 146  : 	}
; 147  : 	return XLLP_TRUE;

  0003c	e3a00001	 mov         r0, #1

; 148  : }

  00040	e8bd4070	 ldmia       sp!, {r4 - r6, lr}
  00044	e12fff1e	 bx          lr
  00048		 |$L1100|

; 135  : 		{
; 136  :                           //clear ITE int bit
; 137  : 			I2C_regs->ISR = temp | XLLP_ISR_ITE;
; 138  : 			if ((temp & XLLP_ISR_ALD) == XLLP_ISR_ALD)

  00048	e2002020	 and         r2, r0, #0x20
  0004c	e3803040	 orr         r3, r0, #0x40
  00050	e3520020	 cmp         r2, #0x20
  00054	e5843018	 str         r3, [r4, #0x18]

; 139  : 			{
; 140  : 				I2C_regs->ISR |= XLLP_ISR_ALD;

  00058	05943018	 ldreq       r3, [r4, #0x18]

; 141  : 			}
; 142  : 			return XLLP_FALSE;

  0005c	e3a00000	 mov         r0, #0
  00060	03833020	 orreq       r3, r3, #0x20
  00064	05843018	 streq       r3, [r4, #0x18]

; 148  : }

  00068	e8bd4070	 ldmia       sp!, {r4 - r6, lr}
  0006c	e12fff1e	 bx          lr
  00070		 |$M1110|

			 ENDP  ; |XllpI2cTxEmpty|

	EXPORT	|XllpI2CWrite|

  00000			 AREA	 |.text| { |XllpI2CWrite| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$XllpI2CWrite|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpI2CWrite| } ; comdat associative
|$T1134| DCD	|$L1133|
	DCD	0x40003301
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |XllpI2CWrite| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |XllpI2CWrite| PROC

; 152  : {

  00000		 |$L1133|
  00000	e92d43f0	 stmdb       sp!, {r4 - r9, lr}
  00004		 |$M1131|
  00004	e1a08003	 mov         r8, r3
  00008	e1a09001	 mov         r9, r1
  0000c	e1a05000	 mov         r5, r0

; 153  : 	XLLP_UINT32_T reg;
; 154  : 	int timer = 0;
; 155  : 	
; 156  : 	I2C_regs->IDBR = (slaveAddr << 1) & ~XLLP_IDBR_MODE;

  00010	e1a02082	 mov         r2, r2, lsl #1
  00014	e5852008	 str         r2, [r5, #8]

; 157  : 	reg = I2C_regs->ICR;

  00018	e5954010	 ldr         r4, [r5, #0x10]
  0001c	e3a0e03d	 mov         lr, #0x3D
  00020	e24eed41	 sub         lr, lr, #0x41, 26

; 158  : 	reg |= (XLLP_ICR_START | XLLP_ICR_TB);
; 159  : 	reg &= ~(XLLP_ICR_STOP | XLLP_ICR_ALDIE);
; 160  : 	I2C_regs->ICR = reg;
; 161  : 
; 162  : 	if (XllpI2cTxEmpty(I2C_regs, pOSTRegs,20) == XLLP_TRUE)

  00024	e004e00e	 and         lr, r4, lr
  00028	e38ee009	 orr         lr, lr, #9
  0002c	e3a02014	 mov         r2, #0x14
  00030	e585e010	 str         lr, [r5, #0x10]
  00034	eb000000	 bl          XllpI2cTxEmpty
  00038	e3500001	 cmp         r0, #1

; 163  : 	{
; 164  : 		return XLLP_TRUE;

  0003c	0a00001f	 beq         |$L1117|

; 165  : 	}
; 166  : 
; 167  : 	// Send all the bytes
; 168  : 	while (bytesCount--)

  00040	e59d401c	 ldr         r4, [sp, #0x1C]
  00044	e3540000	 cmp         r4, #0
  00048	0a000016	 beq         |$L1118|
  0004c	e3a07a01	 mov         r7, #1, 20
  00050	e59d6020	 ldr         r6, [sp, #0x20]
  00054	e3877008	 orr         r7, r7, #8
  00058		 |$L920|

; 169  : 	{
; 170  : 		I2C_regs->IDBR = (XLLP_UINT32_T)(*bytesBuf++);

  00058	e4d83001	 ldrb        r3, [r8], #1
  0005c	e2544001	 subs        r4, r4, #1
  00060	e5853008	 str         r3, [r5, #8]

; 171  : 		
; 172  : 		reg = I2C_regs->ICR;

  00064	e5953010	 ldr         r3, [r5, #0x10]

; 173  : 		
; 174  : 		reg &= ~XLLP_ICR_START; //clear start bit flag

  00068	e3c33001	 bic         r3, r3, #1

; 175  : 		reg |= (XLLP_ICR_ALDIE | XLLP_ICR_TB);

  0006c	e1833007	 orr         r3, r3, r7

; 176  : 		
; 177  : 		if ((bytesCount == 0) && bSendStop)

  00070	1a000002	 bne         |$L923|
  00074	e3560000	 cmp         r6, #0

; 178  : 			reg |= XLLP_ICR_STOP;

  00078	13833002	 orrne       r3, r3, #2
  0007c	1a000000	 bne         |$L924|
  00080		 |$L923|

; 179  : 		else
; 180  : 			reg &= ~XLLP_ICR_STOP;

  00080	e3c33002	 bic         r3, r3, #2
  00084		 |$L924|

; 181  : 
; 182  : 		I2C_regs->ICR = reg;
; 183  : 
; 184  : 		if (XllpI2cTxEmpty(I2C_regs, pOSTRegs, 250) == XLLP_TRUE)

  00084	e3a020fa	 mov         r2, #0xFA
  00088	e1a01009	 mov         r1, r9
  0008c	e1a00005	 mov         r0, r5
  00090	e5853010	 str         r3, [r5, #0x10]
  00094	eb000000	 bl          XllpI2cTxEmpty
  00098	e3500001	 cmp         r0, #1
  0009c	0a000007	 beq         |$L1117|

; 165  : 	}
; 166  : 
; 167  : 	// Send all the bytes
; 168  : 	while (bytesCount--)

  000a0	e3540000	 cmp         r4, #0
  000a4	1affffeb	 bne         |$L920|
  000a8		 |$L1118|

; 187  : 		}
; 188  : 	}
; 189  : 
; 190  : 	// Clear the STOP bit always
; 191  : 	I2C_regs->ICR &= ~XLLP_ICR_STOP;

  000a8	e5953010	 ldr         r3, [r5, #0x10]

; 192  : 	return XLLP_FALSE;

  000ac	e3a00000	 mov         r0, #0
  000b0	e3c33002	 bic         r3, r3, #2
  000b4	e5853010	 str         r3, [r5, #0x10]

; 193  : }

  000b8	e8bd43f0	 ldmia       sp!, {r4 - r9, lr}
  000bc	e12fff1e	 bx          lr
  000c0		 |$L1117|

; 185  : 		{
; 186  : 			return XLLP_TRUE;

  000c0	e3a00001	 mov         r0, #1

; 193  : }

  000c4	e8bd43f0	 ldmia       sp!, {r4 - r9, lr}
  000c8	e12fff1e	 bx          lr
  000cc		 |$M1132|

			 ENDP  ; |XllpI2CWrite|

	EXPORT	|XllpI2CRead|

  00000			 AREA	 |.text| { |XllpI2CRead| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$XllpI2CRead|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpI2CRead| } ; comdat associative
|$T1159| DCD	|$L1158|
	DCD	0x40003801
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |XllpI2CRead| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |XllpI2CRead| PROC

; 196  : {

  00000		 |$L1158|
  00000	e92d43f0	 stmdb       sp!, {r4 - r9, lr}
  00004		 |$M1156|
  00004	e1a08003	 mov         r8, r3
  00008	e1a09001	 mov         r9, r1
  0000c	e1a05000	 mov         r5, r0

; 197  : 	XLLP_UINT32_T reg;
; 198  : 
; 199  : 	I2C_regs->IDBR = (slaveAddr << 1) | XLLP_IDBR_MODE;

  00010	e1a02082	 mov         r2, r2, lsl #1
  00014	e3822001	 orr         r2, r2, #1
  00018	e5852008	 str         r2, [r5, #8]

; 200  : 
; 201  : 	reg = I2C_regs->ICR;

  0001c	e5954010	 ldr         r4, [r5, #0x10]
  00020	e3a0e03d	 mov         lr, #0x3D
  00024	e24eed41	 sub         lr, lr, #0x41, 26

; 202  : 	reg |= (XLLP_ICR_START | XLLP_ICR_TB);
; 203  : 	reg &= ~(XLLP_ICR_STOP | XLLP_ICR_ALDIE);
; 204  : 	I2C_regs->ICR = reg;
; 205  : 
; 206  : 	if (XllpI2cTxEmpty(I2C_regs, pOSTRegs,20) == XLLP_TRUE)

  00028	e004e00e	 and         lr, r4, lr
  0002c	e38ee009	 orr         lr, lr, #9
  00030	e3a02014	 mov         r2, #0x14
  00034	e585e010	 str         lr, [r5, #0x10]
  00038	eb000000	 bl          XllpI2cTxEmpty
  0003c	e3500001	 cmp         r0, #1

; 207  : 	{
; 208  : 		return XLLP_TRUE;

  00040	0a000023	 beq         |$L1139|

; 209  : 	}
; 210  : 
; 211  : 	while (bytesCount--)

  00044	e59d401c	 ldr         r4, [sp, #0x1C]
  00048	e3540000	 cmp         r4, #0
  0004c	0a00001a	 beq         |$L1140|
  00050	e3a07a01	 mov         r7, #1, 20
  00054	e59d6020	 ldr         r6, [sp, #0x20]
  00058	e3877008	 orr         r7, r7, #8
  0005c		 |$L942|

; 212  : 	{
; 213  : 		reg = I2C_regs->ICR;

  0005c	e5953010	 ldr         r3, [r5, #0x10]
  00060	e2544001	 subs        r4, r4, #1

; 214  : 		reg &= ~XLLP_ICR_START;

  00064	e3c33001	 bic         r3, r3, #1

; 215  : 		reg |= XLLP_ICR_ALDIE | XLLP_ICR_TB;

  00068	e1833007	 orr         r3, r3, r7

; 216  : 		if (bytesCount == 0)

  0006c	1a000005	 bne         |$L944|

; 217  : 		{
; 218  : 			reg |= XLLP_ICR_ACKNACK;

  00070	e3833004	 orr         r3, r3, #4

; 219  : 			if (bSendStop)

  00074	e3560000	 cmp         r6, #0

; 220  : 				reg |= XLLP_ICR_STOP;

  00078	13833002	 orrne       r3, r3, #2
  0007c	1a000002	 bne         |$L947|

; 221  : 			else
; 222  : 				reg &= ~XLLP_ICR_STOP;

  00080	e3c33002	 bic         r3, r3, #2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -