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

📄 mutexi2c.cod

📁 Windows—ce-I2C驱动程序
💻 COD
📖 第 1 页 / 共 5 页
字号:
; 315  :  		m_pi2c->WriteByte(ID);											// IDSR: WRITE_ID address 	

  00070	e5940010	 ldr         r0, [r4, #0x10]
  00074	e1a01006	 mov         r1, r6
  00078	eb000000	 bl          |?WriteByte@MES_I2C03@@QAAXE@Z|

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

  0007c	e5940010	 ldr         r0, [r4, #0x10]
  00080	e3a03001	 mov         r3, #1
  00084	e3a02001	 mov         r2, #1
  00088	e3a01002	 mov         r1, #2
  0008c	eb000000	 bl          |?Set_ICSR@MES_I2C03@@QAAXW4TXRXMODE@1@HH@Z|

; 317  :  	
; 318  : 		// ACK check
; 319  : 	 	if(! WaitACK(ID, TRUE))

  00090	e3a02001	 mov         r2, #1
  00094	e1a01006	 mov         r1, r6
  00098	e1a00004	 mov         r0, r4
  0009c	eb000000	 bl          |?WaitACK@MutexI2C@@IAAHEH@Z|
  000a0	e3500000	 cmp         r0, #0
  000a4	0a000034	 beq         |$HWI2C_READ_FAIL$35842|

; 320  : 	 		goto HWI2C_READ_FAIL;
; 321  : 	
; 322  : 		for (int k=0; k<Len; k++)

  000a8	e3a06000	 mov         r6, #0
  000ac	e3570000	 cmp         r7, #0
  000b0	da00001a	 ble         |$L35847|
  000b4	e2658001	 rsb         r8, r5, #1
  000b8		 |$L35845|
  000b8	e0883005	 add         r3, r8, r5

; 323  : 		{
; 324  : 			if(k+1 == Len)	last = CFALSE; 

  000bc	e1530007	 cmp         r3, r7

; 325  : 			// DATA receive
; 326  : 			m_pi2c->SetAckGenerationEnable(last);						// ICCR: ACK_GEN-Not ACK, last Data		

  000c0	e5940010	 ldr         r0, [r4, #0x10]
  000c4	03a09000	 moveq       r9, #0
  000c8	e1a01009	 mov         r1, r9
  000cc	eb000000	 bl          |?SetAckGenerationEnable@MES_I2C03@@QAAXH@Z|

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

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

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

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

; 329  : 	 		if(! WaitACK(0, FALSE))

  000f0	e3a02000	 mov         r2, #0
  000f4	e3a01000	 mov         r1, #0
  000f8	e1a00004	 mov         r0, r4
  000fc	eb000000	 bl          |?WaitACK@MutexI2C@@IAAHEH@Z|
  00100	e3500000	 cmp         r0, #0
  00104	0a00001c	 beq         |$HWI2C_READ_FAIL$35842|

; 330  : 	 			goto HWI2C_READ_FAIL;
; 331  : 	
; 332  : 			Data[k] = m_pi2c->ReadByte();								// IDSR: READ DATA

  00108	e5940010	 ldr         r0, [r4, #0x10]
  0010c	eb000000	 bl          |?ReadByte@MES_I2C03@@QAAEXZ|
  00110	e2866001	 add         r6, r6, #1
  00114	e1560007	 cmp         r6, r7
  00118	e4c50001	 strb        r0, [r5], #1
  0011c	baffffe5	 blt         |$L35845|
  00120		 |$L35847|

; 333  : 		}	
; 334  : 	
; 335  : 		m_pi2c->Set_ICSR(MES_I2C03::TXRXMODE_MASTER_RX, CTRUE, CFALSE);	// ISSR: ST_ENB, MASTER_TX, TX_ENB, ST_BUSY(STOP)

  00120	e5940010	 ldr         r0, [r4, #0x10]
  00124	e3a03000	 mov         r3, #0
  00128	e3a02001	 mov         r2, #1
  0012c	e3a01002	 mov         r1, #2
  00130	eb000000	 bl          |?Set_ICSR@MES_I2C03@@QAAXW4TXRXMODE@1@HH@Z|

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

  00134	e5942010	 ldr         r2, [r4, #0x10]
  00138	e5923014	 ldr         r3, [r2, #0x14]
  0013c	e2820014	 add         r0, r2, #0x14
  00140	e5933010	 ldr         r3, [r3, #0x10]
  00144	e1a0e00f	 mov         lr, pc
  00148	e12fff13	 bx          r3

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

  0014c	e5940010	 ldr         r0, [r4, #0x10]
  00150	eb000000	 bl          |?ClearOperationHold@MES_I2C03@@QAAXXZ|
  00154		 |$L35852|

; 338  :  	
; 339  : 		// BUSY check	 		 
; 340  : 	 	while(CTRUE == m_pi2c->IsBusy());

  00154	e5940010	 ldr         r0, [r4, #0x10]
  00158	eb000000	 bl          |?IsBusy@MES_I2C03@@QAAHXZ|
  0015c	e3500001	 cmp         r0, #1
  00160	0afffffb	 beq         |$L35852|

; 341  : 
; 342  : 		m_pi2c->SetClockPClkMode(MES_IClockControl::PCLKMODE_ONLYWHENCPUACCESS); 	// CLKENB: Disable	 	

  00164	e5943010	 ldr         r3, [r4, #0x10]
  00168	e3a01000	 mov         r1, #0
  0016c	e2830008	 add         r0, r3, #8
  00170	eb000000	 bl          |?SetClockPClkMode@MES_IClockControl@@QAAXW4PCLKMODE@1@@Z|
  00174	e3a05001	 mov         r5, #1
  00178	ea000024	 b           |$L36705|
  0017c		 |$HWI2C_READ_FAIL$35842|

; 343  : 
; 344  : 		ReleaseMutex(m_hMutex); 
; 345  : 		
; 346  : 		return TRUE;
; 347  : 		
; 348  : 	HWI2C_READ_FAIL:
; 349  : 		
; 350  : 		// STOP	condition		
; 351  : 		m_pi2c->Set_ICSR(MES_I2C03::TXRXMODE_MASTER_RX, CTRUE, CFALSE);	// ISSR: ST_ENB, MASTER_TX, TX_ENB, ST_BUSY(STOP)

  0017c	e5940010	 ldr         r0, [r4, #0x10]
  00180	e3a03000	 mov         r3, #0
  00184	e3a02001	 mov         r2, #1
  00188	e3a01002	 mov         r1, #2
  0018c	eb000000	 bl          |?Set_ICSR@MES_I2C03@@QAAXW4TXRXMODE@1@HH@Z|

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

  00190	e5942010	 ldr         r2, [r4, #0x10]
  00194	e5923014	 ldr         r3, [r2, #0x14]
  00198	e2820014	 add         r0, r2, #0x14
  0019c	e5933010	 ldr         r3, [r3, #0x10]
  001a0	e1a0e00f	 mov         lr, pc
  001a4	e12fff13	 bx          r3

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

  001a8	e5940010	 ldr         r0, [r4, #0x10]
  001ac	eb000000	 bl          |?ClearOperationHold@MES_I2C03@@QAAXXZ|

; 354  : 		
; 355  : 		// BUSY check	 		 
; 356  : 	 	// while(CTRUE == m_pi2c->IsBusy());
; 357  : 
; 358  : 		m_pi2c->SetClockPClkMode(MES_IClockControl::PCLKMODE_ONLYWHENCPUACCESS); 	// CLKENB: Disable

  001b0	e5943010	 ldr         r3, [r4, #0x10]
  001b4	e3a01000	 mov         r1, #0
  001b8	e2830008	 add         r0, r3, #8
  001bc	eb000000	 bl          |?SetClockPClkMode@MES_IClockControl@@QAAXW4PCLKMODE@1@@Z|
  001c0	ea000011	 b           |$L36715|
  001c4		 |$L35835|

; 359  : 
; 360  : 		ReleaseMutex(m_hMutex);
; 361  : 		
; 362  : 		return FALSE;		
; 363  :     } 
; 364  :     else if(result ==  WAIT_TIMEOUT )

  001c4	e3a03c01	 mov         r3, #1, 24
  001c8	e3833002	 orr         r3, r3, #2

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

  001cc	e59f105c	 ldr         r1, [pc, #0x5C]
  001d0	e1500003	 cmp         r0, r3
  001d4	e59f0050	 ldr         r0, [pc, #0x50]
  001d8	1a000006	 bne         |$L35855|
  001dc	e3a02f5b	 mov         r2, #0x5B, 30
  001e0	e3822002	 orr         r2, r2, #2
  001e4	eb000000	 bl          NKDbgPrintfW
  001e8	e59f0038	 ldr         r0, [pc, #0x38]
  001ec	eb000000	 bl          NKDbgPrintfW
  001f0	e3a05001	 mov         r5, #1
  001f4	ea000005	 b           |$L36705|
  001f8		 |$L35855|

; 367  : 		ReleaseMutex(m_hMutex); 
; 368  :     } 
; 369  :     else
; 370  :     { 
; 371  :     	ERRORMSG(ZONE_ERROR,(TEXT(" MutexI2C: Fail WaitForSingleObject\r\n")));

  001f8	e3a02e17	 mov         r2, #0x17, 28
  001fc	e3822003	 orr         r2, r2, #3
  00200	eb000000	 bl          NKDbgPrintfW
  00204	e59f0018	 ldr         r0, [pc, #0x18]
  00208	eb000000	 bl          NKDbgPrintfW
  0020c		 |$L36715|
  0020c	e3a05000	 mov         r5, #0
  00210		 |$L36705|

; 372  :     	ReleaseMutex(m_hMutex); 

  00210	e5940000	 ldr         r0, [r4]
  00214	eb000000	 bl          ReleaseMutex

; 373  : 		return FALSE; 

  00218	e1a00005	 mov         r0, r5

; 374  :     }
; 375  : 	return TRUE;
; 376  : }

  0021c	e8bd43f0	 ldmia       sp!, {r4 - r9, lr}
  00220	e12fff1e	 bx          lr
  00224		 |$L36722|
  00224	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@|
  00228	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@|
  0022c	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@|
  00230	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@|
  00234		 |$M36718|

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

	EXPORT	|??0?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@QAA@XZ| ; MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>::MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>
	EXPORT	|?GetNumberOfRegisterSet@?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@UAAKXZ| ; MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>::GetNumberOfRegisterSet
	EXPORT	|?GetSizeOfRegisterSet@?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@UAAKK@Z| ; MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>::GetSizeOfRegisterSet
	EXPORT	|?SetVirtualAddressOfRegisterSet@?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@UAAXKK@Z| ; MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>::SetVirtualAddressOfRegisterSet
	EXPORT	|?GetNumerOfClockGroup@?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@UAAKXZ| ; MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>::GetNumerOfClockGroup
	EXPORT	|?GetOffsetOfRegisterSet@?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@UAAKK@Z| ; MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>::GetOffsetOfRegisterSet
	EXPORT	|??_7?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@6BMES_IModule@@@| [ DATA ] ; MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>::`vftable'
	EXPORT	|??_7?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@6BMES_IClockControl@@@| [ DATA ] ; MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>::`vftable'
	EXPORT	|??_G?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@UAAPAXI@Z| ; MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>::`scalar deleting destructor'
	IMPORT	|??_E?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@UAAPAXI@Z|, WEAK |??_G?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@UAAPAXI@Z| ; MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>::`vector deleting destructor', MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>::`scalar deleting destructor'
	IMPORT	|??0MES_IModule@@QAA@XZ|		; MES_IModule::MES_IModule
	IMPORT	|?Initialize@MES_IModule@@UAAXXZ|	; MES_IModule::Initialize
	IMPORT	|?OpenModule@MES_IModule@@UAAXXZ|	; MES_IModule::OpenModule
	IMPORT	|?CloseModule@MES_IModule@@UAAXXZ|	; MES_IModule::CloseModule
	IMPORT	|?CheckBusy@MES_IModule@@UAAHXZ|	; MES_IModule::CheckBusy
	IMPORT	|?CanPowerDown@MES_IModule@@UAAHXZ|	; MES_IModule::CanPowerDown
; File c:\wince500\platform\mp2530f\src\prototype\mes_base\mes_iclockcontrol.h

  00000			 AREA	 |.text| { |??0?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@QAA@XZ| }, CODE, ARM, SELECTION=2 ; comdat any

  00000			 AREA	 |.pdata$$??0?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@QAA@XZ|, PDATA, SELECTION=5, ASSOC=|.text| { |??0?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@QAA@XZ| } ; comdat associative
|$T36736| DCD	|$L36735|
	DCD	0x40001301

  00000			 AREA	 |.rdata| { |??_7?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@6BMES_IModule@@@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_7?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@6BMES_IModule@@@| DCD |??_E?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@UAAPAXI@Z| ; MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>::`vftable'
	DCD	|_purecall|
	DCD	|?GetNumberOfRegisterSet@?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@UAAKXZ|
	DCD	|?GetSizeOfRegisterSet@?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@UAAKK@Z|
	DCD	|?SetVirtualAddressOfRegisterSet@?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@UAAXKK@Z|
	DCD	|?GetOffsetOfRegisterSet@?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@UAAKK@Z|
	DCD	|?Initialize@MES_IModule@@UAAXXZ|
	DCD	|?OpenModule@MES_IModule@@UAAXXZ|
	DCD	|?CloseModule@MES_IModule@@UAAXXZ|
	DCD	|?CheckBusy@MES_IModule@@UAAHXZ|
	DCD	|?CanPowerDown@MES_IModule@@UAAHXZ|

  00000			 AREA	 |.rdata| { |??_7?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@6BMES_IClockControl@@@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_7?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@6BMES_IClockControl@@@| DCD |?GetNumerOfClockGroup@?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@UAAKXZ| ; MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>::`vftable'
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |??0?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@QAA@XZ| }, CODE, ARM, SELECTION=2 ; comdat any

  00000		 |??0?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@QAA@XZ| PROC ; MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>::MES_BasicModuleWithClock<MES_I2C03_RegisterSet,0,256>

; 151  : 						{}

  00000		 |$L36735|
  00000	e92d4010	 stmdb       sp!, {r4, lr}
  00004		 |$M36733|
  00004	e1a04000	 mov         r4, r0
  00008	eb000000	 bl          |??0MES_IModule@@QAA@XZ|
  0000c	e59f3034	 ldr         r3, [pc, #0x34]
  00010	e1a02004	 mov         r2, r4
  00014	e59f1028	 ldr         r1, [pc, #0x28]
  00018	e5a23008	 str         r3, [r2, #8]!
  0001c	e59f301c	 ldr         r3, [pc, #0x1C]
  00020	e3a00000	 mov         r0, #0
  00024	e5820004	 str         r0, [r2, #4]
  00028	e5840010	 str         r0, [r4, #0x10]
  0002c	e1a00004	 mov         r0, r4
  00030	e5841000	 str         r1, [r4]
  00034	e5843008	 str         r3, [r4, #8]
  00038	e8bd4010	 ldmia       sp!, {r4, lr}
  0003c	e12fff1e	 bx          lr
  00040		 |$L36738|
  00040	00000000	 DCD         |??_7?$MES_BasicModuleWithClock@UMES_I2C03_RegisterSet@@$0A@$0BAA@@@6BMES_IClockControl@@@|

⌨️ 快捷键说明

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