📄 mstick.txt
字号:
000298 e59f0068 LDR r0,|L1.776|
00029c e590001c LDR r0,[r0,#0x1c]
0002a0 e3800040 ORR r0,r0,#0x40
0002a4 e59f105c LDR r1,|L1.776|
0002a8 e581001c STR r0,[r1,#0x1c]
;;;822 rSUBSRCPND = BIT_SUB_IrDA;
0002ac e3a00040 MOV r0,#0x40
0002b0 e1c11000 BIC r1,r1,r0
0002b4 e5810018 STR r0,[r1,#0x18]
;;;823 ClearPending(BIT_IrDA_MSTICK);
0002b8 e3a00540 MOV r0,#0x10000000
0002bc e1c11000 BIC r1,r1,r0
0002c0 e5810000 STR r0,[r1,#0]
0002c4 e1c10000 BIC r0,r1,r0
0002c8 e5900010 LDR r0,[r0,#0x10]
0002cc e5810010 STR r0,[r1,#0x10]
0002d0 e1a00001 MOV r0,r1
0002d4 e5900010 LDR r0,[r0,#0x10]
;;;824 IrDA_Sub_Irq();
0002d8 ebfffffe BL IrDA_Sub_Irq
;;;825 rINTSUBMSK &= ~BIT_SUB_IrDA;
0002dc e59f0024 LDR r0,|L1.776|
0002e0 e590001c LDR r0,[r0,#0x1c]
0002e4 e3c00040 BIC r0,r0,#0x40
0002e8 e59f1018 LDR r1,|L1.776|
0002ec e581001c STR r0,[r1,#0x1c]
0002f0 ea000001 B |L1.764|
;;;826 }
;;;827 else {
;;;828 Uart_Printf("IrDA_Mstick Interupt Error!\n");
|L1.756|
0002f4 e28f002c ADR r0,|L1.808|
0002f8 ebfffffe BL _printf
;;;829 }
;;;830 }
|L1.764|
0002fc e28dd004 ADD sp,sp,#4
000300 e8bd501f LDMFD sp!,{r0-r4,r12,lr}
000304 e25ef004 SUBS pc,lr,#4
|L1.776|
000308 40200000 DCD 0x40200000
|L1.780|
00030c 4e0a0a0a DCB "\n\n\nN"
000310 6120746f DCB "ot a"
000314 776f6c6c DCB "llow"
000318 69206465 DCB "ed i"
00031c 7265746e DCB "nter"
000320 74707572 DCB "rupt"
000324 00000a0a DCB "\n\n\0\0"
|L1.808|
000328 41447249 DCB "IrDA"
00032c 74734d5f DCB "_Mst"
000330 206b6369 DCB "ick "
000334 65746e49 DCB "Inte"
000338 74707572 DCB "rupt"
00033c 72724520 DCB " Err"
000340 0a21726f DCB "or!\n"
000344 00000000 DCB "\0\0\0\0"
ENDP
Init_IrDA_Mstick_Irq PROC
;;;507 void Init_IrDA_Mstick_Irq(void)
;;;508 {
000348 e59f017c LDR r0,|L1.1228|
;;;509 // Interrupt enable for memory stick insert interrupt.
;;;510 pISR_IrDA_MSTICK = (int)IrDA_Mstick_Irq; // Set interrupt service routine.
00034c e59f117c LDR r1,|L1.1232|
000350 e5810f90 STR r0,[r1,#0xf90]
;;;511
;;;512 rINTMSK &= ~BIT_IrDA_MSTICK; // Enable IrDA/Memory stick interrupt.
000354 e51f0054 LDR r0,|L1.776|
000358 e5900008 LDR r0,[r0,#8]
00035c e3c00540 BIC r0,r0,#0x10000000
000360 e51f1060 LDR r1,|L1.776|
000364 e5810008 STR r0,[r1,#8]
;;;513 rINTSUBMSK &= ~BIT_SUB_MSTICK;
000368 e1a00001 MOV r0,r1
00036c e590001c LDR r0,[r0,#0x1c]
000370 e3c00080 BIC r0,r0,#0x80
000374 e581001c STR r0,[r1,#0x1c]
;;;514 }
000378 e12fff1e BX lr
ENDP
Init_Mstick_Host PROC
;;;438 void Init_Mstick_Host(U32 Mstick_Freq)
;;;439 {
00037c e92d41fc STMFD sp!,{r2-r8,lr}
000380 e1a05000 MOV r5,r0
;;;440 int div_val=8;
000384 e3a04008 MOV r4,#8
;;;441
;;;442 // Find Mstick Frequency division value.
;;;443 for(div_val=0; div_val<3; div_val++) {
000388 e3a04000 MOV r4,#0
|L1.908|
00038c e3540003 CMP r4,#3
000390 aa000011 BGE |L1.988|
000394 ea000001 B |L1.928|
|L1.920|
000398 e2844001 ADD r4,r4,#1
00039c eafffffa B |L1.908|
;;;444 if(((float)PCLK/(float)(1<<div_val))<=(float)Mstick_Freq) {
|L1.928|
0003a0 e3a01001 MOV r1,#1
0003a4 e1a00411 MOV r0,r1,LSL r4
0003a8 ebfffffe BL _fflt
0003ac e1a08000 MOV r8,r0
0003b0 e59f111c LDR r1,|L1.1236|
0003b4 ebfffffe BL _frdiv
0003b8 e1a06000 MOV r6,r0
0003bc e1a00005 MOV r0,r5
0003c0 ebfffffe BL _ffltu
0003c4 e1a07000 MOV r7,r0
0003c8 e1a01006 MOV r1,r6
0003cc ebfffffe BL _fcmpge
0003d0 3a000000 BCC |L1.984|
;;;445 break;
0003d4 ea000000 B |L1.988|
;;;446 }
;;;447 }
|L1.984|
0003d8 eaffffee B |L1.920|
;;;448 Uart_Printf("[PCLK:%dHz], [div_val:%d]\n", PCLK, div_val);
|L1.988|
0003dc e1a02004 MOV r2,r4
0003e0 e59f10f0 LDR r1,|L1.1240|
0003e4 e28f00f0 ADR r0,|L1.1244|
0003e8 ebfffffe BL _printf
;;;449 Uart_Printf("[MSTICK clk:%10.2fMHz]\n", (PCLK/(float)(1<<div_val))/1000000);
0003ec e3a01001 MOV r1,#1
0003f0 e1a00411 MOV r0,r1,LSL r4
0003f4 ebfffffe BL _fflt
0003f8 e1a08000 MOV r8,r0
0003fc e59f10d0 LDR r1,|L1.1236|
000400 ebfffffe BL _frdiv
000404 e1a07000 MOV r7,r0
000408 e59f10e8 LDR r1,|L1.1272|
00040c ebfffffe BL _fdiv
000410 e1a06000 MOV r6,r0
000414 ebfffffe BL _f2d
000418 e88d0003 STMIA sp,{r0,r1}
00041c e1a02001 MOV r2,r1
000420 e1a01000 MOV r1,r0
000424 e28f00d0 ADR r0,|L1.1276|
000428 ebfffffe BL printf
;;;450
;;;451 rCLKCON = (rCLKCON & ~(3<<16)) | (1<<70) | (1<<16); // SD clock off, Mstick clock on
00042c e3a00440 MOV r0,#0x40000000
000430 e5900020 LDR r0,[r0,#0x20]
000434 e3c00bc0 BIC r0,r0,#0x30000
000438 e3800b40 ORR r0,r0,#0x10000
00043c e3a01440 MOV r1,#0x40000000
000440 e5810020 STR r0,[r1,#0x20]
;;;452 Uart_Printf("rCLKCON:%x\b", rCLKCON);
000444 e3a00440 MOV r0,#0x40000000
000448 e5900020 LDR r0,[r0,#0x20]
00044c e1a01000 MOV r1,r0
000450 e28f00bc ADR r0,|L1.1300|
000454 ebfffffe BL _printf
;;;453 rMSPRE = CLK_EN | div_val; // 1/4
000458 e3840004 ORR r0,r4,#4
00045c e59f10bc LDR r1,|L1.1312|
000460 e5810000 STR r0,[r1,#0]
;;;454 // PRE_EN [2] : Prescaler control, 0:Disable, 1:Enable.
;;;455 // PRE_VAL[1:0] : Prescaler value, 00:1/1, 01:1/2, 10:1/4, 11:1/8
;;;456
;;;457 rMSFINTCON = DISABLE;
000464 e3a00000 MOV r0,#0
000468 e1c11000 BIC r1,r1,r0
00046c e5810004 STR r0,[r1,#4]
;;;458 // FIFO interrupt control, 0:only for XINT, 1:FIFO interrupt enablel
;;;459
;;;460
;;;461 // Reset Mstick host.
;;;462 rCTRL_STA = 1<<15;
000470 e3a00c80 MOV r0,#0x8000
000474 e1811000 ORR r1,r1,r0
000478 e5810004 STR r0,[r1,#4]
;;;463 Delay(100); // unit: 100us.
00047c e3a00064 MOV r0,#0x64
000480 ebfffffe BL Delay
;;;464 rCTRL_STA = 0<<15;
000484 e3a00000 MOV r0,#0
000488 e51f1388 LDR r1,|L1.264|
00048c e5810004 STR r0,[r1,#4]
;;;465 Delay(100);
000490 e3a00064 MOV r0,#0x64
000494 ebfffffe BL Delay
;;;466
;;;467 rCTRL_STA = 0<<15 | 0<<14 | 1<<13 | 0<<12 | 0<<11 | 7<<8;
000498 e3a00d9c MOV r0,#0x2700
00049c e51f139c LDR r1,|L1.264|
0004a0 e5810004 STR r0,[r1,#4]
;;;468 // RST[15] : Internal logic reset. 0:clear reset, 1:reset
;;;469 // PWS[14] : Power save mode, 0:normal mode, 1:Power save mode.
;;;470 // SIEN[13] : Serial interface enable/disable. 0:disable, 1:enable.
;;;471 // Reserved[12] : SBZ.
;;;472 // NOCRC[11] : INT_CRC enable/disable. 0:enable, 1:disable.
;;;473 // BSYCNT[10:8] : Busy timeout count. timeout time = BSYCNT*4+2[pclks].
;;;474 // INT_STA[7] : interrupt status. 0:No interrupt, 1:interrupt generated
;;;475 // DRQ_STA[6] : DMA request. 0:Not request, 1:requested.
;;;476 // reserved[5:4]
;;;477 // RBE_STA[3] : Receive buffer empty(1:empty)
;;;478 // RBF_STA[2] : Receive buffer full(1:full)
;;;479 // TBE_STA[1] : Transmit buffer empty(1:empty)
;;;480 // TBF_STA[0] : Transmit buffer full(1:full)
;;;481
;;;482 rINS_CON = 1<<12;
0004a4 e3a00d40 MOV r0,#0x1000
0004a8 e1c11000 BIC r1,r1,r0
0004ac e5810010 STR r0,[r1,#0x10]
;;;483 // INS_EN[12] : INS port enable. 0:disbale, 1:enable.
;;;484 // INS_STA[4](R) : INS port status. 0:High(No insert), 1:Low(Insert).
;;;485
;;;486 rINTCTRL_STA = 1<<15 | 0<<14 | 1<<13;
0004b0 e3a00ca0 MOV r0,#0xa000
0004b4 e1c110c0 BIC r1,r1,r0,ASR #1
0004b8 e581000c STR r0,[r1,#0xc]
;;;487 // INT_EN[15] : Memory stick Interrupt enable/ disable control0 = Disable 1 = Enable
;;;488 // TR_INTEN[14] : Data transfer interrupt enable/ disable control0 = Disable 1 = Enable
;;;489 // INS_INTEN[13] : Insertion interrupt enable/ disable control0 = Disable 1 = Enable
;;;490 // Reserved[12:8]
;;;491 // INT_P_END(R)[7] : Protocol end interrupt status(INT_P_END)0 = In progress 1 = Complete
;;;492 // INT_SIF(R)[6] : Serial interface receive interrupt status0 = No interrupt 1 = Receive interrupt
;;;493 // INT_TR(R)[5] : Data transfer request interrupt status0 = No request 1 = Request data transfer
;;;494 // INT_INS(R)[4] : Insertion interrupt status 0 = No insertion 1 = Insertion
;;;495 // Reserved[3:2]
;;;496 // INT_CRC(R)[1] : INT_CRC error interrupt status0 = No CRC error 1 = Occurred CRC error
;;;497 // INT_TOE(R)[0] : Busy timeout error interrupt status0 = No timeout error 1 = Occurred timeout error
;;;498
;;;499
;;;500 rACMD_CON = 0<<15 | 0<<14;
0004bc e3a00000 MOV r0,#0
0004c0 e1c11000 BIC r1,r1,r0
0004c4 e5810014 STR r0,[r1,#0x14]
;;;501 // ATPC_EN[15] : Auto command operation enable/ disable control0 = Disable 1 = Enable
;;;502 // POL[14] : Loading polarity control of the serial data input0 = Rising edge 1 = Falling edge
;;;503
;;;504 }
0004c8 e8bd81fc LDMFD sp!,{r2-r8,pc}
|L1.1228|
0004cc 00000000 DCD IrDA_Mstick_Irq
|L1.1232|
0004d0 13fff000 DCD 0x13fff000
|L1.1236|
0004d4 4c428cb0 DCD 0x4c428cb0
|L1.1240|
0004d8 030a32c0 DCD 0x030a32c0
|L1.1244|
0004dc 4c43505b DCB "[PCL"
0004e0 64253a4b DCB "K:%d"
0004e4 2c5d7a48 DCB "Hz],"
0004e8 69645b20 DCB " [di"
0004ec 61765f76 DCB "v_va"
0004f0 64253a6c DCB "l:%d"
0004f4 00000a5d DCB "]\n\0\0"
|L1.1272|
0004f8 49742400 DCD 0x49742400
|L1.1276|
0004fc 54534d5b DCB "[MST"
000500 204b4349 DCB "ICK "
000504 3a6b6c63 DCB "clk:"
000508 2e303125 DCB "%10."
00050c 484d6632 DCB "2fMH"
000510 000a5d7a DCB "z]\n\0"
|L1.1300|
000514 4b4c4372 DCB "rCLK"
000518 3a4e4f43 DCB "CON:"
00051c 00087825 DCB "%x\b\0"
|L1.1312|
000520 46100000 DCD 0x46100000
ENDP
Ch32_MEMORY_STICK PROC
;;;67 void Ch32_MEMORY_STICK(void)
;;;68 {
000524 e92d4010 STMFD sp!,{r4,lr}
;;;69 int i;
;;;70
;;;71 Uart_Printf("\nStart Mstick_Main...\n");
000528 e28f009c ADR r0,|L1.1484|
00052c ebfffffe BL _printf
;;;72
;;;73
;;;74 Uart_Printf("Mstick Host init.\n");
000530 e28f00ac ADR r0,|L1.1508|
000534 ebfffffe BL _printf
;;;75 Init_Mstick_Host(MSTICK_CLK);
000538 e59f00b8 LDR r0,|L1.1528|
00053c ebfffffe BL Init_Mstick_Host
;;;76
;;;77
;;;78 Uart_Printf("Mstick Irq init.\n");
000540 e28f00b4 ADR r0,|L1.1532|
000544 ebfffffe BL _printf
;;;79 Init_IrDA_Mstick_Irq();
000548 ebfffffe BL Init_IrDA_Mstick_Irq
;;;80
;;;81
;;;82 Uart_Printf("Insert Memory stick\n");
00054c e28f00bc ADR r0,|L1.1552|
000550 ebfffffe BL _printf
;;;83 // Wait until memory stick is inserted.
;;;84 do {
000554 e1a00000 NOP
;;;85 Uart_Printf(".");
|L1.1368|
000558 e28f00c8 ADR r0,|L1.1576|
00055c ebfffffe BL _printf
;;;86 Delay(5000);
000560 e59f00c4 LDR r0,|L1.1580|
000564 ebfffffe BL Delay
;;;87 } while(Stick_Ins==0);
000568 e51f03e8 LDR r0,|L1.392|
00056c e5900000 LDR r0,[r0,#0] ; Stick_Ins
000570 e3500000 CMP r0,#0
000574 0afffff7 BEQ |L1.1368|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -