📄 simulatei2c.s79
字号:
??DataTable4:
DC32 0x791c
// 111
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock4 Using cfiCommon0
CFI Function data_to_ascii
THUMB
// 112 uint8 data_to_ascii(uint8 data)
// 113 {
// 114 if(data<10)
data_to_ascii:
CMP R0,#+10
ITTT CC
// 115 {
// 116 return(data+0x30);
ADDCC R0,R0,#+48
UXTBCC R0,R0
BXCC LR
// 117 }
// 118 else
// 119 {
// 120 return(data-10+0x41);
ADDS R0,R0,#+55
UXTB R0,R0
BX LR ;; return
CFI EndBlock cfiBlock4
// 121 }
// 122
// 123 }
// 124
// 125 //void SCL_DET(void)//at exit 0, pa 0
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock5 Using cfiCommon0
CFI Function EXTI0_IRQHandler
THUMB
// 126 void EXTI0_IRQHandler(void)
// 127 {
// 128 uint8 i;
// 129 if(si2c1.status==BUSY)
EXTI0_IRQHandler:
LDR.N R1,??DataTable16 ;; si2c1
PUSH {R4,R5,LR}
CFI ?RET Frame(CFA, -4)
CFI R5 Frame(CFA, -8)
CFI R4 Frame(CFA, -12)
CFI CFA R13+12
LDRB R0,[R1, #+0]
CMP R0,#+2
BNE.N ??EXTI0_IRQHandler_0
// 130
// 131 //if(1)
// 132 {
// 133 i=BitTst(GPIOA->IDR,1);
LDR.N R0,??DataTable12 ;; 0x40010808
LDR R2,[R0, #+0]
MOVS R0,#+2
ANDS R0,R0,R2
// 134 if(si2c1.bitcount<8)
LDR.N R2,??EXTI0_IRQHandler_1 ;; 0x7928
ADDS R1,R1,R2
LDR R3,[R1, #+4]
LDRB R2,[R1, #+0]
CMP R3,#+8
BCS.N ??EXTI0_IRQHandler_2
// 135 {
// 136 //if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1))//sda high
// 137 if(i)
MOVS R4,#+1
MOVS R5,#+7
SUBS R5,R5,R3
LSLS R4,R4,R5
CMP R0,#+0
ITEE EQ
BICEQ R2,R2,R4
// 138 {
// 139 BitSet(si2c1.nowbyte,7-si2c1.bitcount);
ORRNE R4,R4,R2
MOVNE R2,R4
STRB R2,[R1, #+0]
// 140 }
// 141 else
// 142 {
// 143 BitClr(si2c1.nowbyte,7-si2c1.bitcount);
// 144 }
// 145 si2c1.bitcount++;
ADDS R3,R3,#+1
STR R3,[R1, #+4]
B.N ??EXTI0_IRQHandler_0
// 146 }
// 147 else
// 148 {
// 149 //WINDOW_In(data_to_ascii(si2c1.nowbyte>>4));
// 150 //WINDOW_In(data_to_ascii(si2c1.nowbyte&0xf));
// 151 if(!tempp_choise)
??EXTI0_IRQHandler_2:
LDR.N R0,??DataTable19 ;; tempp_choise
LDRH R3,[R0, #+0]
CBNZ R3,??EXTI0_IRQHandler_3
// 152 {
// 153 tempp1[tempp_count1++]=si2c1.nowbyte;
LDR.N R4,??DataTable20 ;; tempp1
LDR R3,[R0, #+4]
STRH R2,[R4, R3, LSL #+1]
ADDS R3,R3,#+1
STR R3,[R0, #+4]
B.N ??EXTI0_IRQHandler_4
// 154 }
// 155 else
// 156 {
// 157 tempp2[tempp_count2++]=si2c1.nowbyte;
??EXTI0_IRQHandler_3:
LDR.N R4,??DataTable21 ;; tempp2
LDR R3,[R0, #+8]
STRH R2,[R4, R3, LSL #+1]
ADDS R3,R3,#+1
STR R3,[R0, #+8]
// 158 }
// 159
// 160 /*
// 161 if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1))//sda high, nack
// 162 {
// 163 //WINDOW_In('n');
// 164 //WINDOW_In(' ');
// 165 if(!tempp_choise)
// 166 {
// 167 tempp1[tempp_count1++]=0x400;
// 168 }
// 169 else
// 170 {
// 171 tempp2[tempp_count2++]=0x400;
// 172 }
// 173 }
// 174 else
// 175 {
// 176 //WINDOW_In('a');
// 177 //WINDOW_In(' ');
// 178 if(!tempp_choise)
// 179 {
// 180 tempp1[tempp_count1++]=0x300;
// 181 }
// 182 else
// 183 {
// 184 tempp2[tempp_count2++]=0x300;
// 185 }
// 186
// 187 }*/
// 188 si2c1.bitcount=0;
??EXTI0_IRQHandler_4:
MOVS R0,#+0
STR R0,[R1, #+4]
B.N ??EXTI0_IRQHandler_0
// 189 }
// 190 }
// 191
// 192 while (((EXTI->PR & 1)) && (EXTI->IMR & 1))
// 193 {
// 194 //EXTI_ClearITPendingBit(EXTI_Line0);
// 195 EXTI->PR = 1;
??EXTI0_IRQHandler_5:
MOVS R1,#+1
STR R1,[R0, #+0]
// 196 }
??EXTI0_IRQHandler_0:
LDR.N R0,??DataTable17 ;; 0x40010414
LDR R1,[R0, #+0]
LSLS R1,R1,#+31
BPL.N ??EXTI0_IRQHandler_6
LDR.N R1,??DataTable18 ;; 0x40010400
LDR R1,[R1, #+0]
LSLS R1,R1,#+31
BMI.N ??EXTI0_IRQHandler_5
// 197 }
??EXTI0_IRQHandler_6:
POP {R4,R5,PC}
DATA
??EXTI0_IRQHandler_1:
DC32 0x7928
CFI EndBlock cfiBlock5
// 198
// 199 //void SDA_DET(void)//at exit 1,pa 1
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock6 Using cfiCommon0
CFI Function EXTI1_IRQHandler
THUMB
// 200 void EXTI1_IRQHandler(void)
// 201 {
// 202 //sda low and scl high, det a start condition on i2c bus
// 203 //if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))
// 204 if(BitTst(GPIOA->IDR,0))
EXTI1_IRQHandler:
LDR.N R1,??DataTable12 ;; 0x40010808
PUSH {R0,R4-R11,LR}
CFI ?RET Frame(CFA, -4)
CFI R11 Frame(CFA, -8)
CFI R10 Frame(CFA, -12)
CFI R9 Frame(CFA, -16)
CFI R8 Frame(CFA, -20)
CFI R7 Frame(CFA, -24)
CFI R6 Frame(CFA, -28)
CFI R5 Frame(CFA, -32)
CFI R4 Frame(CFA, -36)
CFI CFA R13+40
MOVS R0,#+2
MOV R8,R0
LDR R0,[R1, #+0]
LSLS R0,R0,#+31
BPL.N ??EXTI1_IRQHandler_0
// 205 {
// 206 //if((GPIO_ReadInputData(GPIOA)&0x3)==1)
// 207 //if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1))
// 208 if(!BitTst(GPIOA->IDR,1))
LDR.N R0,??DataTable19 ;; tempp_choise
LDR.N R3,??DataTable20 ;; tempp1
LDR.N R4,??DataTable21 ;; tempp2
LDR.N R5,??EXTI1_IRQHandler_1 ;; 0x40010408
LDR R2,[R0, #+4]
LDR.N R6,??DataTable16 ;; si2c1
ADDS R9,R3,R2, LSL #+1
LDR R3,[R0, #+8]
ADDS R2,R2,#+1
MOV R11,R2
LDRH R2,[R0, #+0]
ADDS R10,R4,R3, LSL #+1
ADDS R3,R3,#+1
STR R3,[SP, #+0]
LDR R1,[R1, #+0]
LDR.N R3,??EXTI1_IRQHandler_1+0x4 ;; 0x4001040c
MVNS R4,#+2
LSLS R1,R1,#+30
BMI.N ??EXTI1_IRQHandler_2
// 209 {
// 210 //si2c1.nowbyte=0;
// 211 //si2c1.bitcount=0;
// 212 if(!tempp_choise)
LSRS R1,R3,#+22
CBNZ R2,??EXTI1_IRQHandler_3
// 213 {
// 214 tempp1[tempp_count1++]=0x100;
STRH R1,[R9, #+0]
STR R11,[R0, #+4]
B.N ??EXTI1_IRQHandler_4
// 215 }
// 216 else
// 217 {
// 218 tempp2[tempp_count2++]=0x100;
??EXTI1_IRQHandler_3:
STRH R1,[R10, #+0]
LDR R1,[SP, #+0]
STR R1,[R0, #+8]
// 219 }
// 220 //WINDOW_In('s');
// 221 //WINDOW_In('\n');
// 222 si2c1.status=BUSY;
??EXTI1_IRQHandler_4:
MOVS R0,#+2
STRB R0,[R6, #+0]
// 223 BitClr(EXTI->FTSR,1);
LDR R0,[R3, #+0]
ANDS R4,R4,R0
STR R4,[R3, #+0]
// 224 BitSet(EXTI->RTSR,1);
LDR R0,[R5, #+0]
ORRS R0,R0,#0x2
STR R0,[R5, #+0]
B.N ??EXTI1_IRQHandler_0
// 225 }
// 226
// 227
// 228 //sda high and scl high, det a stop condition on i2c bus
// 229
// 230 //else if((GPIO_ReadInputData(GPIOA))&0x3==3)
// 231 //else if((GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))/*&&(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1))*/)
// 232 else
// 233 {
// 234 //si2c1.nowbyte=0;
// 235 si2c1.bitcount=0;
??EXTI1_IRQHandler_2:
LDR.N R7,??EXTI1_IRQHandler_1+0x8 ;; 0x792c
MOVS R1,#+0
STR R1,[R6, R7]
// 236 if(!tempp_choise)
LSRS R7,R3,#+21
CBNZ R2,??EXTI1_IRQHandler_5
// 237 {
// 238 tempp1[tempp_count1++]=0x200;
STRH R7,[R9, #+0]
STR R11,[R0, #+4]
B.N ??EXTI1_IRQHandler_6
// 239 }
// 240 else
// 241 {
// 242 tempp2[tempp_count2++]=0x200;
??EXTI1_IRQHandler_5:
STRH R7,[R10, #+0]
LDR R2,[SP, #+0]
STR R2,[R0, #+8]
// 243 }
// 244 //WINDOW_In('\n');
// 245 //WINDOW_In('p');
// 246 //WINDOW_In('\n');
// 247 si2c1.status=WAITING;
??EXTI1_IRQHandler_6:
STRB R1,[R6, #+0]
// 248 BitClr(EXTI->RTSR,1);
LDR R0,[R5, #+0]
ANDS R4,R4,R0
STR R4,[R5, #+0]
// 249 BitSet(EXTI->FTSR,1);
LDR R0,[R3, #+0]
ORRS R0,R0,#0x2
STR R0,[R3, #+0]
B.N ??EXTI1_IRQHandler_0
// 250 }
// 251 }
// 252
// 253 while (((EXTI->PR & 2)) && (EXTI->IMR & 2))
// 254 {
// 255 //EXTI_ClearITPendingBit(EXTI_Line1);
// 256 EXTI->PR = 2;
??EXTI1_IRQHandler_7:
STR R8,[R0, #+0]
// 257 }
??EXTI1_IRQHandler_0:
LDR.N R0,??DataTable17 ;; 0x40010414
LDR R1,[R0, #+0]
LSLS R1,R1,#+30
BPL.N ??EXTI1_IRQHandler_8
LDR.N R1,??DataTable18 ;; 0x40010400
LDR R1,[R1, #+0]
LSLS R1,R1,#+30
BMI.N ??EXTI1_IRQHandler_7
// 258 }
??EXTI1_IRQHandler_8:
POP {R0,R4-R11,PC} ;; return
DATA
??EXTI1_IRQHandler_1:
DC32 0x40010408
DC32 0x4001040c
DC32 0x792c
CFI EndBlock cfiBlock6
RSEG CODE:CODE:NOROOT(2)
DATA
??DataTable12:
DC32 0x40010808
RSEG CODE:CODE:NOROOT(2)
DATA
??DataTable16:
DC32 si2c1
RSEG CODE:CODE:NOROOT(2)
DATA
??DataTable17:
DC32 0x40010414
RSEG CODE:CODE:NOROOT(2)
DATA
??DataTable18:
DC32 0x40010400
// 259
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock7 Using cfiCommon0
CFI Function data_convert
THUMB
// 260 void data_convert(void)
// 261 {
// 262 int32 i;
// 263 //data in
// 264 if(!tempp_choise)
data_convert:
LDR.N R0,??DataTable19 ;; tempp_choise
PUSH {R4-R7,LR}
CFI ?RET Frame(CFA, -4)
CFI R7 Frame(CFA, -8)
CFI R6 Frame(CFA, -12)
CFI R5 Frame(CFA, -16)
CFI R4 Frame(CFA, -20)
CFI CFA R13+20
MOVS R6,#+0
LDRH R1,[R0, #+0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -