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

📄 xllp_i2c.cod

📁 pxa270为硬件平台的wince操作系统XLLP驱动源码
💻 COD
📖 第 1 页 / 共 2 页
字号:

; 223  : 		} else

  00084	ea000000	 b           |$L947|
  00088		 |$L944|

; 224  : 		{
; 225  : 			reg &= ~XLLP_ICR_ACKNACK;

  00088	e3c33004	 bic         r3, r3, #4
  0008c		 |$L947|

; 226  : 		}
; 227  : 		I2C_regs->ICR = reg;
; 228  : 
; 229  : 		if (XllpI2cRxFull(I2C_regs, pOSTRegs, 60) == XLLP_TRUE)

  0008c	e3a0203c	 mov         r2, #0x3C
  00090	e1a01009	 mov         r1, r9
  00094	e1a00005	 mov         r0, r5
  00098	e5853010	 str         r3, [r5, #0x10]
  0009c	eb000000	 bl          XllpI2cRxFull
  000a0	e3500001	 cmp         r0, #1
  000a4	0a00000a	 beq         |$L1139|

; 232  : 		}
; 233  : 		reg = I2C_regs->IDBR & 0xFF;

  000a8	e5953008	 ldr         r3, [r5, #8]
  000ac	e3540000	 cmp         r4, #0
  000b0	e20330ff	 and         r3, r3, #0xFF

; 234  : 		*bytesBuf++ = (XLLP_UINT8_T)reg;

  000b4	e4c83001	 strb        r3, [r8], #1
  000b8	1affffe7	 bne         |$L942|
  000bc		 |$L1140|

; 235  : 	}
; 236  : 
; 237  : 	I2C_regs->ICR &= ~(XLLP_ICR_STOP | XLLP_ICR_ACKNACK);

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

; 238  : 
; 239  : 	return XLLP_FALSE;

  000c0	e3a00000	 mov         r0, #0
  000c4	e3c33006	 bic         r3, r3, #6
  000c8	e5853010	 str         r3, [r5, #0x10]

; 240  : }

  000cc	e8bd43f0	 ldmia       sp!, {r4 - r9, lr}
  000d0	e12fff1e	 bx          lr
  000d4		 |$L1139|

; 230  : 		{	
; 231  : 			return XLLP_TRUE;

  000d4	e3a00001	 mov         r0, #1

; 240  : }

  000d8	e8bd43f0	 ldmia       sp!, {r4 - r9, lr}
  000dc	e12fff1e	 bx          lr
  000e0		 |$M1157|

			 ENDP  ; |XllpI2CRead|

	EXPORT	|XllpPI2cRxFull|
	IMPORT	|XllpOstDelayMicroSeconds|

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

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

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

  00000		 |XllpPI2cRxFull| PROC

; 253  : {

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

; 254  : 	XLLP_UINT32_T temp;
; 255  : 
; 256  : 	while (timeout--)

  00010	0a000009	 beq         |$L1165|
  00014		 |$L959|

; 257  : 	{
; 258  : 		temp = I2C_regs->ISR;

  00014	e595e198	 ldr         lr, [r5, #0x198]
  00018	e2444001	 sub         r4, r4, #1

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

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

; 263  : 		}
; 264  : 		// delay 1 ms here
; 265  : 		XllpOstDelayMicroSeconds(pOSTRegs, 50);

  00028	e3a01032	 mov         r1, #0x32
  0002c	e1a00006	 mov         r0, r6
  00030	eb000000	 bl          XllpOstDelayMicroSeconds
  00034	e3540000	 cmp         r4, #0
  00038	1afffff5	 bne         |$L959|
  0003c		 |$L1165|

; 266  : 	}
; 267  : 
; 268  :   return XLLP_TRUE;

  0003c	e3a00001	 mov         r0, #1

; 269  : }

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

; 260  : 		{
; 261  : 			I2C_regs->ISR = temp | XLLP_ISR_IRF;

  00048	e38e3080	 orr         r3, lr, #0x80
  0004c	e5853198	 str         r3, [r5, #0x198]

; 262  : 			return XLLP_FALSE;

  00050	e3a00000	 mov         r0, #0

; 269  : }

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

			 ENDP  ; |XllpPI2cRxFull|

	EXPORT	|XllpPI2cTxEmpty|

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

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

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

  00000		 |XllpPI2cTxEmpty| PROC

; 277  : {

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

; 278  : 	XLLP_UINT32_T temp;
; 279  : 
; 280  : 	while (timeout--)

  00010	0a000009	 beq         |$L1182|
  00014		 |$L971|

; 281  : 	{
; 282  : 		temp = I2C_regs->ISR;

  00014	e5940198	 ldr         r0, [r4, #0x198]
  00018	e2455001	 sub         r5, r5, #1

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

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

; 292  : 		}
; 293  : 		// delay  here  //here infect touch speed.
; 294  : 		XllpOstDelayMicroSeconds(pOSTRegs, 50);

  00028	e3a01032	 mov         r1, #0x32
  0002c	e1a00006	 mov         r0, r6
  00030	eb000000	 bl          XllpOstDelayMicroSeconds
  00034	e3550000	 cmp         r5, #0
  00038	1afffff5	 bne         |$L971|
  0003c		 |$L1182|

; 295  : 	}
; 296  : 	return XLLP_TRUE;

  0003c	e3a00001	 mov         r0, #1

; 297  : }

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

; 284  : 		{
; 285  :                           //clear ITE int bit
; 286  : 			I2C_regs->ISR = temp | XLLP_ISR_ITE;
; 287  : 			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	e5843198	 str         r3, [r4, #0x198]

; 288  : 			{
; 289  : 				I2C_regs->ISR |= XLLP_ISR_ALD;

  00058	05943198	 ldreq       r3, [r4, #0x198]

; 290  : 			}
; 291  : 			return XLLP_FALSE;

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

; 297  : }

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

			 ENDP  ; |XllpPI2cTxEmpty|

	EXPORT	|XllpPI2CWrite|

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

  00000			 AREA	 |.pdata$$XllpPI2CWrite|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpPI2CWrite| } ; comdat associative
|$T1215| DCD	|$L1214|
	DCD	0x40003401
; Function compile flags: /Ogsy

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

  00000		 |XllpPI2CWrite| PROC

; 301  : {

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

; 302  : 	XLLP_UINT32_T reg;
; 303  : 	int timer = 0;
; 304  : 	
; 305  : 	I2C_regs->IDBR = (slaveAddr << 1) & ~XLLP_IDBR_MODE;

  00010	e1a02082	 mov         r2, r2, lsl #1
  00014	e5852188	 str         r2, [r5, #0x188]

; 306  : 	reg = I2C_regs->ICR;

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

; 307  : 	reg |= (XLLP_ICR_START | XLLP_ICR_TB);
; 308  : 	reg &= ~(XLLP_ICR_STOP | XLLP_ICR_ALDIE);
; 309  : 	I2C_regs->ICR = reg;
; 310  : 
; 311  : 	if (XllpPI2cTxEmpty(I2C_regs, pOSTRegs,200) == XLLP_TRUE)

  00024	e004e00e	 and         lr, r4, lr
  00028	e38ee009	 orr         lr, lr, #9
  0002c	e3a020c8	 mov         r2, #0xC8
  00030	e585e190	 str         lr, [r5, #0x190]
  00034	eb000000	 bl          XllpPI2cTxEmpty
  00038	e3500001	 cmp         r0, #1

; 312  : 	{
; 313  : 		return XLLP_TRUE;

  0003c	0a000020	 beq         |$L1198|

; 314  : 	}
; 315  : 
; 316  : 	// Send all the bytes
; 317  : 	while (bytesCount--)

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

; 318  : 	{
; 319  : 		I2C_regs->IDBR = (XLLP_UINT32_T)(*bytesBuf++);

  00058	e4d83001	 ldrb        r3, [r8], #1
  0005c	e2544001	 subs        r4, r4, #1
  00060	e5853188	 str         r3, [r5, #0x188]

; 320  : 		
; 321  : 		reg = I2C_regs->ICR;

  00064	e5953190	 ldr         r3, [r5, #0x190]

; 322  : 		
; 323  : 		reg &= ~XLLP_ICR_START; //clear start bit flag

  00068	e3c33001	 bic         r3, r3, #1

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

  0006c	e1833007	 orr         r3, r3, r7

; 325  : 		
; 326  : 		if ((bytesCount == 0) && bSendStop)

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

; 327  : 			reg |= XLLP_ICR_STOP;

  00078	13833002	 orrne       r3, r3, #2
  0007c	1a000000	 bne         |$L996|
  00080		 |$L995|

; 328  : 		else
; 329  : 			reg &= ~XLLP_ICR_STOP;

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

; 330  : 
; 331  : 		I2C_regs->ICR = reg;
; 332  : 
; 333  : 		if (XllpPI2cTxEmpty(I2C_regs, pOSTRegs, 2500) == XLLP_TRUE)

  00084	e3a02d27	 mov         r2, #0x27, 26
  00088	e3822004	 orr         r2, r2, #4
  0008c	e1a01009	 mov         r1, r9
  00090	e1a00005	 mov         r0, r5
  00094	e5853190	 str         r3, [r5, #0x190]
  00098	eb000000	 bl          XllpPI2cTxEmpty
  0009c	e3500001	 cmp         r0, #1
  000a0	0a000007	 beq         |$L1198|

; 314  : 	}
; 315  : 
; 316  : 	// Send all the bytes
; 317  : 	while (bytesCount--)

  000a4	e3540000	 cmp         r4, #0
  000a8	1affffea	 bne         |$L992|
  000ac		 |$L1199|

; 336  : 		}
; 337  : 	}
; 338  : 
; 339  : 	// Clear the STOP bit always
; 340  : 	I2C_regs->ICR &= ~XLLP_ICR_STOP;

  000ac	e5953190	 ldr         r3, [r5, #0x190]

; 341  : 	return XLLP_FALSE;

  000b0	e3a00000	 mov         r0, #0
  000b4	e3c33002	 bic         r3, r3, #2
  000b8	e5853190	 str         r3, [r5, #0x190]

; 342  : }

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

; 334  : 		{
; 335  : 			return XLLP_TRUE;

  000c4	e3a00001	 mov         r0, #1

; 342  : }

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

			 ENDP  ; |XllpPI2CWrite|

	EXPORT	|XllpPI2CRead|

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

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

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

  00000		 |XllpPI2CRead| PROC

; 345  : {

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

; 346  : 	XLLP_UINT32_T reg;
; 347  : 
; 348  : 	I2C_regs->IDBR = (slaveAddr << 1) | XLLP_IDBR_MODE;

  00010	e1a02082	 mov         r2, r2, lsl #1
  00014	e3822001	 orr         r2, r2, #1
  00018	e5852188	 str         r2, [r5, #0x188]

; 349  : 
; 350  : 	reg = I2C_regs->ICR;

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

; 351  : 	reg |= (XLLP_ICR_START | XLLP_ICR_TB);
; 352  : 	reg &= ~(XLLP_ICR_STOP | XLLP_ICR_ALDIE);
; 353  : 	I2C_regs->ICR = reg;
; 354  : 
; 355  : 	if (XllpPI2cTxEmpty(I2C_regs, pOSTRegs,200) == XLLP_TRUE)

  00028	e004e00e	 and         lr, r4, lr
  0002c	e38ee009	 orr         lr, lr, #9
  00030	e3a020c8	 mov         r2, #0xC8
  00034	e585e190	 str         lr, [r5, #0x190]
  00038	eb000000	 bl          XllpPI2cTxEmpty
  0003c	e3500001	 cmp         r0, #1

; 356  : 	{
; 357  : 		return XLLP_TRUE;

  00040	0a000023	 beq         |$L1220|

; 358  : 	}
; 359  : 
; 360  : 	while (bytesCount--)

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

; 361  : 	{
; 362  : 		reg = I2C_regs->ICR;

  0005c	e5953190	 ldr         r3, [r5, #0x190]
  00060	e2544001	 subs        r4, r4, #1

; 363  : 		reg &= ~XLLP_ICR_START;

  00064	e3c33001	 bic         r3, r3, #1

; 364  : 		reg |= XLLP_ICR_ALDIE | XLLP_ICR_TB;

  00068	e1833007	 orr         r3, r3, r7

; 365  : 		if (bytesCount == 0)

  0006c	1a000005	 bne         |$L1016|

; 366  : 		{
; 367  : 			reg |= XLLP_ICR_ACKNACK;

  00070	e3833004	 orr         r3, r3, #4

; 368  : 			if (bSendStop)

  00074	e3560000	 cmp         r6, #0

; 369  : 				reg |= XLLP_ICR_STOP;

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

; 370  : 			else
; 371  : 				reg &= ~XLLP_ICR_STOP;

  00080	e3c33002	 bic         r3, r3, #2

; 372  : 		} else

  00084	ea000000	 b           |$L1019|
  00088		 |$L1016|

; 373  : 		{
; 374  : 			reg &= ~XLLP_ICR_ACKNACK;

  00088	e3c33004	 bic         r3, r3, #4
  0008c		 |$L1019|

; 375  : 		}
; 376  : 		I2C_regs->ICR = reg;
; 377  : 
; 378  : 		if (XllpPI2cRxFull(I2C_regs, pOSTRegs, 600) == XLLP_TRUE)

  0008c	e3a02f96	 mov         r2, #0x96, 30
  00090	e1a01009	 mov         r1, r9
  00094	e1a00005	 mov         r0, r5
  00098	e5853190	 str         r3, [r5, #0x190]
  0009c	eb000000	 bl          XllpPI2cRxFull
  000a0	e3500001	 cmp         r0, #1
  000a4	0a00000a	 beq         |$L1220|

; 381  : 		}
; 382  : 		reg = I2C_regs->IDBR & 0xFF;

  000a8	e5953188	 ldr         r3, [r5, #0x188]
  000ac	e3540000	 cmp         r4, #0
  000b0	e20330ff	 and         r3, r3, #0xFF

; 383  : 		*bytesBuf++ = (XLLP_UINT8_T)reg;

  000b4	e4c83001	 strb        r3, [r8], #1
  000b8	1affffe7	 bne         |$L1014|
  000bc		 |$L1221|

; 384  : 	}
; 385  : 
; 386  : 	I2C_regs->ICR &= ~(XLLP_ICR_STOP | XLLP_ICR_ACKNACK);

  000bc	e5953190	 ldr         r3, [r5, #0x190]

; 387  : 
; 388  : 	return XLLP_FALSE;

  000c0	e3a00000	 mov         r0, #0
  000c4	e3c33006	 bic         r3, r3, #6
  000c8	e5853190	 str         r3, [r5, #0x190]

; 389  : }

  000cc	e8bd43f0	 ldmia       sp!, {r4 - r9, lr}
  000d0	e12fff1e	 bx          lr
  000d4		 |$L1220|

; 379  : 		{	
; 380  : 			return XLLP_TRUE;

  000d4	e3a00001	 mov         r0, #1

; 389  : }

  000d8	e8bd43f0	 ldmia       sp!, {r4 - r9, lr}
  000dc	e12fff1e	 bx          lr
  000e0		 |$M1238|

			 ENDP  ; |XllpPI2CRead|

	END

⌨️ 快捷键说明

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