📄 mutexi2c.cod
字号:
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 + -