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