📄 simulatei2c.s79
字号:
CMP R1,#+0
BNE.N ??data_convert_0
// 265 {
// 266 if((tempp_count1>=100)||(tempp1[tempp_count1-1]==0x200))//over 100 words or the last data is stop condition
LDR R4,[R0, #+4]
LDR.N R5,??DataTable20 ;; tempp1
CMP R4,#+100
BCS.N ??data_convert_1
MOVS R2,#+512
ADDS R1,R5,R4, LSL #+1
SUBS R1,R1,#+2
LDRH R1,[R1, #+0]
CMP R1,R2
BNE.N ??data_convert_2
// 267 {
// 268 tempp_count2=0;
??data_convert_1:
STR R6,[R0, #+8]
// 269 tempp_choise=1;//change the no
MOVS R1,#+1
STRH R1,[R0, #+0]
// 270 for(i=0;i<tempp_count1;i++)
B.N ??data_convert_3
// 271 {
// 272 if(tempp1[i]==0x100)//the data is a start condition signal
// 273 {
// 274 WINDOW_In('s');
// 275 WINDOW_In('\n');
// 276 }
// 277 else if(tempp1[i]==0x200)//the data is a stop condition signal
// 278 {
// 279 WINDOW_In('\n');
// 280 WINDOW_In('p');
// 281 WINDOW_In('\n');
// 282 }
// 283 else if(tempp1[i]==0x300)//the data is a ack signal
// 284 {
// 285 WINDOW_In('a');
// 286 WINDOW_In(' ');
// 287 }
// 288 else if(tempp1[i]==0x400)//the data is a nack signal
// 289 {
// 290 WINDOW_In('n');
// 291 WINDOW_In(' ');
// 292 }
// 293 else //it's a valid data
// 294 {
// 295 WINDOW_In(data_to_ascii((uint8)(tempp1[i]>>4)));
??data_convert_4:
LSRS R0,R7,#+4
UXTB R0,R0
BL data_to_ascii
BL WINDOW_In
// 296 WINDOW_In(data_to_ascii((uint8)(tempp1[i]&0xf)));
LSLS R0,R7,#+28
LSRS R0,R0,#+28
BL data_to_ascii
BL WINDOW_In
// 297 WINDOW_In(' ');
MOVS R0,#+32
??data_convert_5:
BL WINDOW_In
// 298 }
ADDS R6,R6,#+1
??data_convert_3:
CMP R6,R4
BCS.N ??data_convert_6
LDRH R7,[R5, R6, LSL #+1]
MOVS R0,#+256
CMP R7,R0
BNE.N ??data_convert_7
MOVS R0,#+115
BL WINDOW_In
MOVS R0,#+10
B.N ??data_convert_5
??data_convert_7:
LSLS R0,R0,#+1
CMP R7,R0
BNE.N ??data_convert_8
MOVS R0,#+10
BL WINDOW_In
MOVS R0,#+112
BL WINDOW_In
MOVS R0,#+10
B.N ??data_convert_5
??data_convert_8:
MOVS R0,#+768
CMP R7,R0
BNE.N ??data_convert_9
MOVS R0,#+97
BL WINDOW_In
MOVS R0,#+32
B.N ??data_convert_5
??data_convert_9:
MOVS R0,#+1024
CMP R7,R0
BNE.N ??data_convert_4
MOVS R0,#+110
BL WINDOW_In
MOVS R0,#+32
B.N ??data_convert_5
// 299 }
// 300 }
// 301 }
// 302 else
// 303 {
// 304 if((tempp_count2>=100)||(tempp2[tempp_count2-1]==0x200))//over 100 words or the last data is stop condition
??data_convert_0:
LDR R4,[R0, #+8]
LDR.N R5,??DataTable21 ;; tempp2
CMP R4,#+100
BCS.N ??data_convert_10
MOVS R2,#+512
ADDS R1,R5,R4, LSL #+1
SUBS R1,R1,#+2
LDRH R1,[R1, #+0]
CMP R1,R2
??data_convert_2:
BNE.N ??data_convert_6
// 305 {
// 306 tempp_count1=0;
??data_convert_10:
STR R6,[R0, #+4]
// 307 tempp_choise=0;//change the no
STRH R6,[R0, #+0]
// 308 for(i=0;i<tempp_count2;i++)
B.N ??data_convert_11
// 309 {
// 310 if(tempp2[i]==0x100)//the data is a start condition signal
// 311 {
// 312 WINDOW_In('s');
// 313 WINDOW_In('\n');
// 314 }
// 315 else if(tempp2[i]==0x200)//the data is a stop condition signal
// 316 {
// 317 WINDOW_In('\n');
// 318 WINDOW_In('p');
// 319 WINDOW_In('\n');
// 320 }
// 321 else if(tempp2[i]==0x300)//the data is a ack signal
// 322 {
// 323 WINDOW_In('a');
// 324 WINDOW_In(' ');
// 325 }
// 326 else if(tempp2[i]==0x400)//the data is a nack signal
// 327 {
// 328 WINDOW_In('n');
// 329 WINDOW_In(' ');
// 330 }
// 331 else //it's a valid data
// 332 {
// 333 WINDOW_In(data_to_ascii((uint8)(tempp2[i]>>4)));
??data_convert_12:
LSRS R0,R7,#+4
UXTB R0,R0
BL data_to_ascii
BL WINDOW_In
// 334 WINDOW_In(data_to_ascii((uint8)(tempp2[i]&0xf)));
LSLS R0,R7,#+28
LSRS R0,R0,#+28
BL data_to_ascii
BL WINDOW_In
// 335 WINDOW_In(' ');
MOVS R0,#+32
??data_convert_13:
BL WINDOW_In
// 336 }
ADDS R6,R6,#+1
??data_convert_11:
CMP R6,R4
BCS.N ??data_convert_6
LDRH R7,[R5, R6, LSL #+1]
MOVS R0,#+256
CMP R7,R0
BNE.N ??data_convert_14
MOVS R0,#+115
BL WINDOW_In
MOVS R0,#+10
B.N ??data_convert_13
??data_convert_14:
LSLS R0,R0,#+1
CMP R7,R0
BNE.N ??data_convert_15
MOVS R0,#+10
BL WINDOW_In
MOVS R0,#+112
BL WINDOW_In
MOVS R0,#+10
B.N ??data_convert_13
??data_convert_15:
MOVS R0,#+768
CMP R7,R0
BNE.N ??data_convert_16
MOVS R0,#+97
BL WINDOW_In
MOVS R0,#+32
B.N ??data_convert_13
??data_convert_16:
MOVS R0,#+1024
CMP R7,R0
BNE.N ??data_convert_12
MOVS R0,#+110
BL WINDOW_In
MOVS R0,#+32
B.N ??data_convert_13
// 337 }
// 338 }
// 339
// 340
// 341 }
// 342 }
??data_convert_6:
POP {R4-R7,PC} ;; return
CFI EndBlock cfiBlock7
RSEG CODE:CODE:NOROOT(2)
DATA
??DataTable19:
DC32 tempp_choise
RSEG CODE:CODE:NOROOT(2)
DATA
??DataTable20:
DC32 tempp1
RSEG CODE:CODE:NOROOT(2)
DATA
??DataTable21:
DC32 tempp2
// 343
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock8 Using cfiCommon0
CFI Function I2C_To_USB_Send_Data
THUMB
// 344 void I2C_To_USB_Send_Data(void)
// 345 {
// 346 uint32 i;
// 347 uint32 count=100;
// 348 if(BitTst(si2c1.flag,0))
I2C_To_USB_Send_Data:
LDR.N R0,??I2C_To_USB_Send_Data_0 ;; 0x7924
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
LDR.N R4,??DataTable22 ;; si2c1
MOVS R6,#+100
ADDS R5,R4,R0
LDRB R0,[R5, #+12]
LSLS R0,R0,#+31
BPL.N ??I2C_To_USB_Send_Data_1
// 349 {
// 350 if(si2c1.windowcount>100)
LDR R0,[R5, #+0]
MOVS R7,#+0
CMP R0,#+101
BCC.N ??I2C_To_USB_Send_Data_2
// 351 {
// 352 for(i=0;i<count;i++)
// 353 {
// 354 si2c1.temp[i]=WINDOW_Out();
??I2C_To_USB_Send_Data_3:
BL WINDOW_Out
LDR.N R1,??I2C_To_USB_Send_Data_0+0x4 ;; 0x7531
ADDS R2,R4,R7
// 355 }
ADDS R7,R7,#+1
CMP R7,#+100
STRB R0,[R2, R1]
BCS.N ??I2C_To_USB_Send_Data_4
B.N ??I2C_To_USB_Send_Data_3
// 356 }
// 357 else
// 358 {
// 359 count=si2c1.windowcount;
??I2C_To_USB_Send_Data_2:
MOVS R6,R0
// 360 for(i=0;i<count;i++)
B.N ??I2C_To_USB_Send_Data_5
// 361 {
// 362 si2c1.temp[i]=WINDOW_Out();
??I2C_To_USB_Send_Data_6:
BL WINDOW_Out
LDR.N R1,??I2C_To_USB_Send_Data_0+0x4 ;; 0x7531
ADDS R2,R4,R7
// 363 }
ADDS R7,R7,#+1
STRB R0,[R2, R1]
??I2C_To_USB_Send_Data_5:
CMP R7,R6
BCC.N ??I2C_To_USB_Send_Data_6
// 364 }
// 365 UserToPMABufferCopy(si2c1.temp, ENDP1_TXADDR, count);
??I2C_To_USB_Send_Data_4:
LDR.N R0,??I2C_To_USB_Send_Data_0+0x4 ;; 0x7531
UXTH R2,R6
MOVS R1,#+192
ADDS R0,R4,R0
_BLF UserToPMABufferCopy,??UserToPMABufferCopy??rT
// 366 SetEPTxCount(ENDP1, count);
UXTH R1,R6
MOVS R0,#+1
_BLF SetEPTxCount,??SetEPTxCount??rT
// 367 SetEPTxValid(ENDP1);
MOVS R0,#+1
_BLF SetEPTxValid,??SetEPTxValid??rT
// 368 BitClr(si2c1.flag,0);
LDRB R0,[R5, #+12]
ANDS R0,R0,#0xFE
STRB R0,[R5, #+12]
// 369 }
// 370 }
??I2C_To_USB_Send_Data_1:
POP {R4-R7,PC} ;; return
Nop
DATA
??I2C_To_USB_Send_Data_0:
DC32 0x7924
DC32 0x7531
CFI EndBlock cfiBlock8
RSEG CODE:CODE:NOROOT(2)
DATA
??DataTable22:
DC32 si2c1
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock9 Using cfiCommon0
CFI NoFunction
THUMB
??UserToPMABufferCopy??rT:
LDR.N R3,??Subroutine0_0 ;; UserToPMABufferCopy
BX R3
DATA
??Subroutine0_0:
DC32 UserToPMABufferCopy
CFI EndBlock cfiBlock9
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock10 Using cfiCommon0
CFI NoFunction
THUMB
??SetEPTxCount??rT:
LDR.N R3,??Subroutine1_0 ;; SetEPTxCount
BX R3
DATA
??Subroutine1_0:
DC32 SetEPTxCount
CFI EndBlock cfiBlock10
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock11 Using cfiCommon0
CFI NoFunction
THUMB
??SetEPTxValid??rT:
LDR.N R3,??Subroutine2_0 ;; SetEPTxValid
BX R3
DATA
??Subroutine2_0:
DC32 SetEPTxValid
CFI EndBlock cfiBlock11
RSEG INITTAB:CODE:ROOT(2)
DATA
?init?tab?DATA_Z:
DCD sfe(DATA_Z) - sfb(DATA_Z), sfb(DATA_Z), sfb(DATA_Z)
END
// 371
//
// 954 bytes in segment CODE
// 39 044 bytes in segment DATA_Z
// 12 bytes in segment INITTAB
//
// 930 bytes of CODE memory (+ 36 bytes shared)
// 39 044 bytes of DATA memory
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -