📄 2442lib.txt
字号:
;;;481 int hdivn=2, pdivn=0;
000a0c e3a04002 MOV r4,#2
000a10 e3a05000 MOV r5,#0
;;;482
;;;483 // hdivn_val (FCLK:HCLK)ratio hdivn
;;;484 // 11 1:1 (0)
;;;485 // 12 1:2 (1)
;;;486 // 13 1:3 (3)
;;;487 // 14 1:4 (2)
;;;488 // pdivn_val (HCLK:PCLK)ratio pdivn
;;;489 // 11 1:1 (0)
;;;490 // 12 1:2 (1)
;;;491 switch(hdivn_val) {
000a14 e246000b SUB r0,r6,#0xb
000a18 e3500007 CMP r0,#7
000a1c 908ff100 ADDLS pc,pc,r0,LSL #2
000a20 ea000011 B |L1.2668|
000a24 ea000006 B |L1.2628|
000a28 ea000007 B |L1.2636|
000a2c ea000008 B |L1.2644|
000a30 ea00000a B |L1.2656|
000a34 ea00000c B |L1.2668|
000a38 ea000006 B |L1.2648|
000a3c ea00000a B |L1.2668|
000a40 ea000007 B |L1.2660|
;;;492 case 11: hdivn=0; break;
|L1.2628|
000a44 e3a04000 MOV r4,#0
000a48 ea000007 B |L1.2668|
;;;493 case 12: hdivn=1; break;
|L1.2636|
000a4c e3a04001 MOV r4,#1
000a50 ea000005 B |L1.2668|
;;;494 case 13:
;;;495 case 16: hdivn=3; break;
|L1.2644|
000a54 e1a00000 NOP
|L1.2648|
000a58 e3a04003 MOV r4,#3
000a5c ea000002 B |L1.2668|
;;;496 case 14:
;;;497 case 18: hdivn=2; break;
|L1.2656|
000a60 e1a00000 NOP
|L1.2660|
000a64 e3a04002 MOV r4,#2
000a68 e1a00000 NOP
;;;498 }
;;;499
;;;500 switch(pdivn_val) {
|L1.2668|
000a6c e357000b CMP r7,#0xb
000a70 0a000002 BEQ |L1.2688|
000a74 e357000c CMP r7,#0xc
000a78 1a000004 BNE |L1.2704|
000a7c ea000001 B |L1.2696|
;;;501 case 11: pdivn=0; break;
|L1.2688|
000a80 e3a05000 MOV r5,#0
000a84 ea000001 B |L1.2704|
;;;502 case 12: pdivn=1; break;
|L1.2696|
000a88 e3a05001 MOV r5,#1
000a8c e1a00000 NOP
;;;503 }
;;;504
;;;505 //Uart_Printf("Clock division change [hdiv:%x, pdiv:%x]\n", hdivn, pdivn);
;;;506 rCLKDIVN = (hdivn<<1) | pdivn;
|L1.2704|
000a90 e1850084 ORR r0,r5,r4,LSL #1
000a94 e3a0144c MOV r1,#0x4c000000
000a98 e5810014 STR r0,[r1,#0x14]
;;;507 //Uart_Printf("rCLKDIVN:%x]\n", rCLKDIVN);
;;;508
;;;509 switch(hdivn_val) {
000a9c e3560010 CMP r6,#0x10
000aa0 0a000002 BEQ |L1.2736|
000aa4 e3560012 CMP r6,#0x12
000aa8 1a00000e BNE |L1.2792|
000aac ea000006 B |L1.2764|
;;;510 case 16: // when 1, HCLK=FCLK/6.
;;;511 rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<8);
|L1.2736|
000ab0 e3a0044c MOV r0,#0x4c000000
000ab4 e5900018 LDR r0,[r0,#0x18]
000ab8 e3c00fc0 BIC r0,r0,#0x300
000abc e3800f40 ORR r0,r0,#0x100
000ac0 e3a0144c MOV r1,#0x4c000000
000ac4 e5810018 STR r0,[r1,#0x18]
;;;512 break;
000ac8 ea000006 B |L1.2792|
;;;513 case 18: // when 1, HCLK=FCLK/8.
;;;514 rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<9);
|L1.2764|
000acc e3a0044c MOV r0,#0x4c000000
000ad0 e5900018 LDR r0,[r0,#0x18]
000ad4 e3c00fc0 BIC r0,r0,#0x300
000ad8 e3800f80 ORR r0,r0,#0x200
000adc e3a0144c MOV r1,#0x4c000000
000ae0 e5810018 STR r0,[r1,#0x18]
;;;515 break;
000ae4 e1a00000 NOP
;;;516 }
;;;517 //Uart_Printf("rCAMDIVN:%x]\n", rCAMDIVN);
;;;518
;;;519 if(hdivn!=0)
|L1.2792|
000ae8 e3540000 CMP r4,#0
000aec 0a000001 BEQ |L1.2808|
;;;520 MMU_SetAsyncBusMode();
000af0 ebfffffe BL MMU_SetAsyncBusMode
000af4 ea000000 B |L1.2812|
;;;521 else
;;;522 MMU_SetFastBusMode();
|L1.2808|
000af8 ebfffffe BL MMU_SetFastBusMode
;;;523 }
|L1.2812|
000afc e8bd80f8 LDMFD sp!,{r3-r7,pc}
ENDP
ChangeUPllValue PROC
;;;528 void ChangeUPllValue(int mdiv,int pdiv,int sdiv)
;;;529 {
000b00 e1a03600 MOV r3,r0,LSL #12
;;;530 rUPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;
000b04 e1833201 ORR r3,r3,r1,LSL #4
000b08 e1833002 ORR r3,r3,r2
000b0c e3a0c44c MOV r12,#0x4c000000
000b10 e58c3008 STR r3,[r12,#8]
;;;531 }
000b14 e1a0f00e MOV pc,lr
ENDP
malloc PROC
;;;538 //void *mallocPt=Image$$RW$$Limit;
;;;539 {
000b18 e1a01000 MOV r1,r0
;;;540 void *returnPt = mallocPt;
000b1c e59f0224 LDR r0,|L1.3400|
000b20 e5902000 LDR r2,[r0,#0] ; mallocPt
;;;541
;;;542 mallocPt = (int *)mallocPt+nbyte/4+((nbyte%4)>0); //To align 4byte
000b24 e1a00121 MOV r0,r1,LSR #2
000b28 e59f3218 LDR r3,|L1.3400|
000b2c e5933000 LDR r3,[r3,#0] ; mallocPt
000b30 e0833100 ADD r3,r3,r0,LSL #2
000b34 e3110003 TST r1,#3
000b38 0a000001 BEQ |L1.2884|
000b3c e3a00001 MOV r0,#1
000b40 ea000000 B |L1.2888|
|L1.2884|
000b44 e3a00000 MOV r0,#0
|L1.2888|
000b48 e0830100 ADD r0,r3,r0,LSL #2
000b4c e59f31f4 LDR r3,|L1.3400|
000b50 e5830000 STR r0,[r3,#0] ; mallocPt
;;;543
;;;544 if( (int)mallocPt > HEAPEND )
000b54 e59f01ec LDR r0,|L1.3400|
000b58 e5900000 LDR r0,[r0,#0] ; mallocPt
000b5c e290c4bd ADDS r12,r0,#0xbd000000
000b60 a25cc8ff SUBGES r12,r12,#0xff0000
000b64 da000003 BLE |L1.2936|
;;;545 {
;;;546 mallocPt = returnPt;
000b68 e59f01d8 LDR r0,|L1.3400|
000b6c e5802000 STR r2,[r0,#0] ; mallocPt
;;;547 return NULL;
000b70 e3a00000 MOV r0,#0
;;;548 }
;;;549 return returnPt;
;;;550 }
|L1.2932|
000b74 e1a0f00e MOV pc,lr
|L1.2936|
000b78 e1a00002 MOV r0,r2 ;549
000b7c eafffffc B |L1.2932| ;549
ENDP
free PROC
;;;553 void free(void *pt)
;;;554 {
000b80 e59f11c0 LDR r1,|L1.3400|
;;;555 mallocPt = pt;
000b84 e5810000 STR r0,[r1,#0] ; mallocPt
;;;556 }
000b88 e1a0f00e MOV pc,lr
ENDP
ChangeSromParameter PROC
;;;560 void ChangeSromParameter(char bank, char minacc) // only for Tacc
;;;561 {
000b8c e92d4070 STMFD sp!,{r4-r6,lr}
000b90 e24dd020 SUB sp,sp,#0x20
000b94 e1a05000 MOV r5,r0
000b98 e1a06001 MOV r6,r1
;;;562 int acc;
;;;563
;;;564 //1000000/(hclk/1000000.)=Unit Period(ns)*1000
;;;565 acc = (int)(minacc*(HCLK/1000000.)/1000+0.5);
000b9c e1a00006 MOV r0,r6
000ba0 ebfffffe BL _dflt
000ba4 e88d0003 STMIA sp,{r0,r1}
000ba8 e28f0f67 ADR r0,|L1.3404|
000bac e890000c LDMIA r0,{r2,r3}
000bb0 e59d0000 LDR r0,[sp,#0]
000bb4 ebfffffe BL _dmul
000bb8 e58d0008 STR r0,[sp,#8]
000bbc e58d100c STR r1,[sp,#0xc]
000bc0 e28f0f63 ADR r0,|L1.3412|
000bc4 e890000c LDMIA r0,{r2,r3}
000bc8 e59d0008 LDR r0,[sp,#8]
000bcc ebfffffe BL _ddiv
000bd0 e58d0010 STR r0,[sp,#0x10]
000bd4 e58d1014 STR r1,[sp,#0x14]
000bd8 e59f017c LDR r0,|L1.3420|
000bdc e890000c LDMIA r0,{r2,r3}
000be0 e59d0010 LDR r0,[sp,#0x10]
000be4 ebfffffe BL _dadd
000be8 e58d0018 STR r0,[sp,#0x18]
000bec e58d101c STR r1,[sp,#0x1c]
000bf0 ebfffffe BL _dfix
000bf4 e1a04000 MOV r4,r0
;;;566
;;;567 if(acc<=1)
000bf8 e3540001 CMP r4,#1
000bfc ca000001 BGT |L1.3080|
;;;568 acc=0;
000c00 e3a04000 MOV r4,#0
000c04 ea000020 B |L1.3212|
;;;569 else if(acc==2)
|L1.3080|
000c08 e3540002 CMP r4,#2
000c0c 1a000001 BNE |L1.3096|
;;;570 acc=1;
000c10 e3a04001 MOV r4,#1
000c14 ea00001c B |L1.3212|
;;;571 else if(acc==3)
|L1.3096|
000c18 e3540003 CMP r4,#3
000c1c 1a000001 BNE |L1.3112|
;;;572 acc=2;
000c20 e3a04002 MOV r4,#2
000c24 ea000018 B |L1.3212|
;;;573 else if(acc==4)
|L1.3112|
000c28 e3540004 CMP r4,#4
000c2c 1a000001 BNE |L1.3128|
;;;574 acc=3;
000c30 e3a04003 MOV r4,#3
000c34 ea000014 B |L1.3212|
;;;575 else if((5<acc)&&(acc<=6))
|L1.3128|
000c38 e3540005 CMP r4,#5
000c3c da000003 BLE |L1.3152|
000c40 e3540006 CMP r4,#6
000c44 ca000001 BGT |L1.3152|
;;;576 acc=4;
000c48 e3a04004 MOV r4,#4
000c4c ea00000e B |L1.3212|
;;;577 else if((7<acc)&&(acc<=8))
|L1.3152|
000c50 e3540007 CMP r4,#7
000c54 da000003 BLE |L1.3176|
000c58 e3540008 CMP r4,#8
000c5c ca000001 BGT |L1.3176|
;;;578 acc=5;
000c60 e3a04005 MOV r4,#5
000c64 ea000008 B |L1.3212|
;;;579 else if((9<acc)&&(acc<=10))
|L1.3176|
000c68 e3540009 CMP r4,#9
000c6c da000003 BLE |L1.3200|
000c70 e354000a CMP r4,#0xa
000c74 ca000001 BGT |L1.3200|
;;;580 acc=6;
000c78 e3a04006 MOV r4,#6
000c7c ea000002 B |L1.3212|
;;;581 else if(11<acc)
|L1.3200|
000c80 e354000b CMP r4,#0xb
000c84 da000000 BLE |L1.3212|
;;;582 acc=7;
000c88 e3a04007 MOV r4,#7
;;;583
;;;584 switch(bank)
|L1.3212|
000c8c e3550005 CMP r5,#5
000c90 908ff105 ADDLS pc,pc,r5,LSL #2
000c94 ea000029 B |L1.3392|
000c98 ea000004 B |L1.3248|
000c9c ea000009 B |L1.3272|
000ca0 ea00000e
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -