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

📄 mutexi2c.cod

📁 Windows—ce-I2C驱动程序
💻 COD
📖 第 1 页 / 共 5 页
字号:
  00078	e5940010	 ldr         r0, [r4, #0x10]
  0007c	e1a01005	 mov         r1, r5
  00080	eb000000	 bl          |?WriteByte@MES_I2C03@@QAAXE@Z|

; 232  : 		m_pi2c->Set_ICSR(MES_I2C03::TXRXMODE_MASTER_TX, CTRUE, CTRUE);	// ISSR: ST_ENB, MASTER_TX, TX_ENB, ST_BUSY(STOP)

  00084	e5940010	 ldr         r0, [r4, #0x10]
  00088	e3a03001	 mov         r3, #1
  0008c	e3a02001	 mov         r2, #1
  00090	e3a01003	 mov         r1, #3
  00094	eb000000	 bl          |?Set_ICSR@MES_I2C03@@QAAXW4TXRXMODE@1@HH@Z|

; 233  : 		
; 234  : 		// ACK check
; 235  : 	 	if(! WaitACK(ID, TRUE))

  00098	e3a02001	 mov         r2, #1
  0009c	e1a01005	 mov         r1, r5
  000a0	e1a00004	 mov         r0, r4
  000a4	eb000000	 bl          |?WaitACK@MutexI2C@@IAAHEH@Z|
  000a8	e3500000	 cmp         r0, #0
  000ac	0a00002d	 beq         |$HWI2C_WRITEB_FAIL$35812|

; 236  : 	 		goto HWI2C_WRITEB_FAIL;
; 237  : 	 	
; 238  : 		for (int k=0; k<Len; k++)

  000b0	e3a05000	 mov         r5, #0
  000b4	e3560000	 cmp         r6, #0
  000b8	da000013	 ble         |$L35817|
  000bc		 |$L35815|

; 239  : 		{
; 240  : 	 		// DATA transmit
; 241  : 		 	m_pi2c->WriteByte(Data[k]);									// IDSR: Data address	 	

  000bc	e7d51007	 ldrb        r1, [r5, +r7]
  000c0	e5940010	 ldr         r0, [r4, #0x10]
  000c4	eb000000	 bl          |?WriteByte@MES_I2C03@@QAAXE@Z|

; 242  : 		 	m_pi2c->ClearInterruptPending();							// IRQ PEND[0]: clear interrupt pend 		 	

  000c8	e5942010	 ldr         r2, [r4, #0x10]
  000cc	e5923014	 ldr         r3, [r2, #0x14]
  000d0	e2820014	 add         r0, r2, #0x14
  000d4	e5933010	 ldr         r3, [r3, #0x10]
  000d8	e1a0e00f	 mov         lr, pc
  000dc	e12fff13	 bx          r3

; 243  : 		 	m_pi2c->ClearOperationHold();								// IRQ PEND[1]: clear operatin hold 

  000e0	e5940010	 ldr         r0, [r4, #0x10]
  000e4	eb000000	 bl          |?ClearOperationHold@MES_I2C03@@QAAXXZ|

; 244  : 	 	
; 245  : 			// ACK check
; 246  : 		 	if(! WaitACK(*Data, TRUE))

  000e8	e5d71000	 ldrb        r1, [r7]
  000ec	e3a02001	 mov         r2, #1
  000f0	e1a00004	 mov         r0, r4
  000f4	eb000000	 bl          |?WaitACK@MutexI2C@@IAAHEH@Z|
  000f8	e3500000	 cmp         r0, #0
  000fc	0a000019	 beq         |$HWI2C_WRITEB_FAIL$35812|
  00100	e2855001	 add         r5, r5, #1
  00104	e1550006	 cmp         r5, r6
  00108	baffffeb	 blt         |$L35815|
  0010c		 |$L35817|

; 247  : 	 			goto HWI2C_WRITEB_FAIL;
; 248  : 	 	}
; 249  : 	 	
; 250  : 		// STOP	condition	
; 251  : 		m_pi2c->Set_ICSR(MES_I2C03::TXRXMODE_MASTER_TX, CTRUE, CFALSE);	// ISSR: ST_ENB, MASTER_TX, TX_ENB, ST_BUSY(STOP)

  0010c	e5940010	 ldr         r0, [r4, #0x10]
  00110	e3a03000	 mov         r3, #0
  00114	e3a02001	 mov         r2, #1
  00118	e3a01003	 mov         r1, #3
  0011c	eb000000	 bl          |?Set_ICSR@MES_I2C03@@QAAXW4TXRXMODE@1@HH@Z|

; 252  : 	 	m_pi2c->ClearInterruptPending();								// IRQ PEND[0]: clear interrupt pend

  00120	e5942010	 ldr         r2, [r4, #0x10]
  00124	e5923014	 ldr         r3, [r2, #0x14]
  00128	e2820014	 add         r0, r2, #0x14
  0012c	e5933010	 ldr         r3, [r3, #0x10]
  00130	e1a0e00f	 mov         lr, pc
  00134	e12fff13	 bx          r3

; 253  : 	 	m_pi2c->ClearOperationHold();									// IRQ PEND[1]: clear operatin hold

  00138	e5940010	 ldr         r0, [r4, #0x10]
  0013c	eb000000	 bl          |?ClearOperationHold@MES_I2C03@@QAAXXZ|
  00140		 |$L35821|

; 254  : 	 	
; 255  : 		// BUSY check
; 256  : 	 	while(CTRUE == m_pi2c->IsBusy());

  00140	e5940010	 ldr         r0, [r4, #0x10]
  00144	eb000000	 bl          |?IsBusy@MES_I2C03@@QAAHXZ|
  00148	e3500001	 cmp         r0, #1
  0014c	0afffffb	 beq         |$L35821|

; 257  : 
; 258  : 		m_pi2c->SetClockPClkMode(MES_IClockControl::PCLKMODE_ONLYWHENCPUACCESS); 	// CLKENB: Disable

  00150	e5943010	 ldr         r3, [r4, #0x10]
  00154	e3a01000	 mov         r1, #0
  00158	e2830008	 add         r0, r3, #8
  0015c	eb000000	 bl          |?SetClockPClkMode@MES_IClockControl@@QAAXW4PCLKMODE@1@@Z|
  00160	e3a05001	 mov         r5, #1
  00164	ea000023	 b           |$L36675|
  00168		 |$HWI2C_WRITEB_FAIL$35812|

; 259  : 
; 260  : 		ReleaseMutex(m_hMutex); 
; 261  : 		return TRUE;		
; 262  : 		
; 263  : 	HWI2C_WRITEB_FAIL:
; 264  : 		
; 265  : 		// STOP	condition	
; 266  : 		m_pi2c->Set_ICSR(MES_I2C03::TXRXMODE_MASTER_TX, CTRUE, CFALSE);	// ISSR: ST_ENB, MASTER_TX, TX_ENB, ST_BUSY(STOP)

  00168	e5940010	 ldr         r0, [r4, #0x10]
  0016c	e3a03000	 mov         r3, #0
  00170	e3a02001	 mov         r2, #1
  00174	e3a01003	 mov         r1, #3
  00178	eb000000	 bl          |?Set_ICSR@MES_I2C03@@QAAXW4TXRXMODE@1@HH@Z|

; 267  : 	 	m_pi2c->ClearInterruptPending();								// IRQ PEND[0]: clear interrupt pend

  0017c	e5942010	 ldr         r2, [r4, #0x10]
  00180	e5923014	 ldr         r3, [r2, #0x14]
  00184	e2820014	 add         r0, r2, #0x14
  00188	e5933010	 ldr         r3, [r3, #0x10]
  0018c	e1a0e00f	 mov         lr, pc
  00190	e12fff13	 bx          r3

; 268  : 	 	m_pi2c->ClearOperationHold();									// IRQ PEND[1]: clear operatin hold

  00194	e5940010	 ldr         r0, [r4, #0x10]
  00198	eb000000	 bl          |?ClearOperationHold@MES_I2C03@@QAAXXZ|

; 269  : 	 	
; 270  : 		// BUSY check	 	
; 271  : 	 	// while(CTRUE == m_pi2c->IsBusy());	 	
; 272  : 		m_pi2c->SetClockPClkMode(MES_IClockControl::PCLKMODE_ONLYWHENCPUACCESS); 	// CLKENB: Disable

  0019c	e5943010	 ldr         r3, [r4, #0x10]
  001a0	e3a01000	 mov         r1, #0
  001a4	e2830008	 add         r0, r3, #8
  001a8	eb000000	 bl          |?SetClockPClkMode@MES_IClockControl@@QAAXW4PCLKMODE@1@@Z|
  001ac	ea000010	 b           |$L36684|
  001b0		 |$L35805|

; 273  : 
; 274  : 		ReleaseMutex(m_hMutex);
; 275  : 		 
; 276  : 		return FALSE;		
; 277  :     } 
; 278  :     else if(result ==  WAIT_TIMEOUT )

  001b0	e3a03c01	 mov         r3, #1, 24
  001b4	e3833002	 orr         r3, r3, #2

; 279  :     { 
; 280  :     	ERRORMSG(ZONE_ERROR,(TEXT(" MutexI2C: TimeOut WaitForSingleObject\r\n")));

  001b8	e59f1058	 ldr         r1, [pc, #0x58]
  001bc	e1500003	 cmp         r0, r3
  001c0	e59f004c	 ldr         r0, [pc, #0x4C]
  001c4	1a000005	 bne         |$L35824|
  001c8	e3a02f46	 mov         r2, #0x46, 30
  001cc	eb000000	 bl          NKDbgPrintfW
  001d0	e59f0038	 ldr         r0, [pc, #0x38]
  001d4	eb000000	 bl          NKDbgPrintfW
  001d8	e3a05001	 mov         r5, #1
  001dc	ea000005	 b           |$L36675|
  001e0		 |$L35824|

; 281  : 		ReleaseMutex(m_hMutex); 
; 282  :     } 
; 283  :     else
; 284  :     { 
; 285  :     	ERRORMSG(ZONE_ERROR,(TEXT(" MutexI2C: Fail WaitForSingleObject\r\n")));

  001e0	e3a02f47	 mov         r2, #0x47, 30
  001e4	e3822001	 orr         r2, r2, #1
  001e8	eb000000	 bl          NKDbgPrintfW
  001ec	e59f0018	 ldr         r0, [pc, #0x18]
  001f0	eb000000	 bl          NKDbgPrintfW
  001f4		 |$L36684|
  001f4	e3a05000	 mov         r5, #0
  001f8		 |$L36675|

; 286  :     	ReleaseMutex(m_hMutex); 

  001f8	e5940000	 ldr         r0, [r4]
  001fc	eb000000	 bl          ReleaseMutex

; 287  : 		return FALSE; 

  00200	e1a00005	 mov         r0, r5

; 288  :     }
; 289  : 	return TRUE;
; 290  : }

  00204	e8bd40f0	 ldmia       sp!, {r4 - r7, lr}
  00208	e12fff1e	 bx          lr
  0020c		 |$L36691|
  0020c	00000000	 DCD         |??_C@_1EM@OLMHANLJ@?$AA?5?$AAM?$AAu?$AAt?$AAe?$AAx?$AAI?$AA2?$AAC?$AA?3?$AA?5?$AAF?$AAa?$AAi?$AAl?$AA?5?$AAW?$AAa?$AAi?$AAt@|
  00210	00000000	 DCD         |??_C@_1FC@JPHGIFGK@?$AA?5?$AAM?$AAu?$AAt?$AAe?$AAx?$AAI?$AA2?$AAC?$AA?3?$AA?5?$AAT?$AAi?$AAm?$AAe?$AAO?$AAu?$AAt?$AA?5?$AAW@|
  00214	00000000	 DCD         |??_C@_1CI@OHCJFJPM@?$AAE?$AAR?$AAR?$AAO?$AAR?$AA?3?$AA?5?$AA?$CF?$AAs?$AA?5?$AAl?$AAi?$AAn?$AAe?$AA?5?$AA?$CF?$AAd?$AA?3?$AA?5?$AA?$AA@|
  00218	00000000	 DCD         |??_C@_1IC@EEOMFCED@?$AAc?$AA?3?$AA?2?$AAw?$AAi?$AAn?$AAc?$AAe?$AA5?$AA0?$AA0?$AA?2?$AAp?$AAl?$AAa?$AAt?$AAf?$AAo?$AAr?$AAm@|
  0021c		 |$M36687|

			 ENDP  ; |?I2CWrite@MutexI2C@@IAAHPAEH@Z|, MutexI2C::I2CWrite

	EXPORT	|?I2CRead@MutexI2C@@IAAHPAEH@Z|		; MutexI2C::I2CRead
	IMPORT	|?ReadByte@MES_I2C03@@QAAEXZ|		; MES_I2C03::ReadByte

  00000			 AREA	 |.text| { |?I2CRead@MutexI2C@@IAAHPAEH@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?I2CRead@MutexI2C@@IAAHPAEH@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?I2CRead@MutexI2C@@IAAHPAEH@Z| } ; comdat associative
|$T36720| DCD	|$L36719|
	DCD	0x40008d01
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?I2CRead@MutexI2C@@IAAHPAEH@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?I2CRead@MutexI2C@@IAAHPAEH@Z| PROC	; MutexI2C::I2CRead

; 295  : {

  00000		 |$L36719|
  00000	e92d43f0	 stmdb       sp!, {r4 - r9, lr}
  00004		 |$M36717|
  00004	e1a07002	 mov         r7, r2
  00008	e1a05001	 mov         r5, r1
  0000c	e1a04000	 mov         r4, r0

; 296  : 	DWORD result = WaitForSingleObject(m_hMutex, m_nMutexWaitTime);  

  00010	e594100c	 ldr         r1, [r4, #0xC]
  00014	e5940000	 ldr         r0, [r4]
  00018	eb000000	 bl          WaitForSingleObject
  0001c	e3500000	 cmp         r0, #0

; 297  : 	CBOOL last   = CTRUE;

  00020	e3a09001	 mov         r9, #1

; 298  : 	
; 299  :     if (result == WAIT_OBJECT_0) 

  00024	1a000066	 bne         |$L35835|

; 300  :     { 
; 301  : 		DEBUGMSG(ZONE_I2CDEV,(TEXT(" %s I2CRead(ID:%x, DATA:0x%x, Len:%d)\r\n"), m_szMutexName, m_dwID, *Data, Len));    	
; 302  : 
; 303  : 		m_pi2c->SetClockPClkMode(MES_IClockControl::PCLKMODE_ALWAYS); 	// CLKENB: PCLKMODE		

  00028	e5943010	 ldr         r3, [r4, #0x10]
  0002c	e3a01001	 mov         r1, #1
  00030	e2830008	 add         r0, r3, #8
  00034	eb000000	 bl          |?SetClockPClkMode@MES_IClockControl@@QAAXW4PCLKMODE@1@@Z|

; 304  : 		Sleep(1);

  00038	e3a00001	 mov         r0, #1
  0003c	eb000000	 bl          Sleep

; 305  : 		
; 306  :     	U8 ID = m_dwID;	
; 307  : 		I2CSetup();

  00040	e5d46008	 ldrb        r6, [r4, #8]
  00044	e1a00004	 mov         r0, r4
  00048	eb000000	 bl          |?I2CSetup@MutexI2C@@IAAXXZ|
  0004c		 |$L35839|

; 308  : 		
; 309  : 		// BUSY check & STOP condition
; 310  : 	 	while(CTRUE == m_pi2c->IsBusy());

  0004c	e5940010	 ldr         r0, [r4, #0x10]
  00050	eb000000	 bl          |?IsBusy@MES_I2C03@@QAAHXZ|
  00054	e3500001	 cmp         r0, #1
  00058	0afffffb	 beq         |$L35839|

; 311  : 	 	
; 312  : 		m_pi2c->Set_ICSR(MES_I2C03::TXRXMODE_MASTER_RX, CTRUE, CFALSE);	// ISSR: ST_ENB, MASTER_TX, TX_ENB, ST_BUSY(STOP)

  0005c	e5940010	 ldr         r0, [r4, #0x10]
  00060	e3a03000	 mov         r3, #0
  00064	e3a02001	 mov         r2, #1
  00068	e3a01002	 mov         r1, #2
  0006c	eb000000	 bl          |?Set_ICSR@MES_I2C03@@QAAXW4TXRXMODE@1@HH@Z|

; 313  :     	
; 314  :     	// START condition & ID transmit

⌨️ 快捷键说明

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