📄 timer.txt
字号:
000a90 e5810000 STR r0,[r1,#0]
;;;421 rINTPND = BIT_TIMER0;
000a94 e3a00e40 MOV r0,#0x400
000a98 e1c11000 BIC r1,r1,r0
000a9c e5810010 STR r0,[r1,#0x10]
;;;422 rINTPND; //Prevent an double interrupt pending
000aa0 e1c10000 BIC r0,r1,r0
000aa4 e5900010 LDR r0,[r0,#0x10]
;;;423 variable0++;
000aa8 e59f0240 LDR r0,|L1.3312|
000aac e5900000 LDR r0,[r0,#0] ; variable0
000ab0 e2800001 ADD r0,r0,#1
000ab4 e59f1234 LDR r1,|L1.3312|
000ab8 e5810000 STR r0,[r1,#0] ; variable0
;;;424 }
000abc e8bd0003 LDMFD sp!,{r0,r1}
000ac0 e25ef004 SUBS pc,lr,#4
ENDP
Test_TimerInt PROC
;;;332 void Test_TimerInt(void)
;;;333 {
000ac4 e92d400e STMFD sp!,{r1-r3,lr}
;;;334 variable0 = 0;variable1 = 0;variable2 = 0;variable3 = 0;variable4 = 0;
000ac8 e3a00000 MOV r0,#0
000acc e59f121c LDR r1,|L1.3312|
000ad0 e5810000 STR r0,[r1,#0] ; variable0
000ad4 e3a00000 MOV r0,#0
000ad8 e59f120c LDR r1,|L1.3308|
000adc e5810000 STR r0,[r1,#0] ; variable1
000ae0 e3a00000 MOV r0,#0
000ae4 e59f11fc LDR r1,|L1.3304|
000ae8 e5810000 STR r0,[r1,#0] ; variable2
000aec e3a00000 MOV r0,#0
000af0 e59f11e8 LDR r1,|L1.3296|
000af4 e5810000 STR r0,[r1,#0] ; variable3
000af8 e3a00000 MOV r0,#0
000afc e59f11e0 LDR r1,|L1.3300|
000b00 e5810000 STR r0,[r1,#0] ; variable4
;;;335
;;;336 // timer interrupt enable
;;;337 // timer 3/4 source select with sub register - ows
;;;338 //Uart_Printf("rINTSUBMSK (Before) = 0x%8x\n",rINTSUBMSK);
;;;339 rINTSUBMSK = ~( BIT_SUB_TIMER3 | BIT_SUB_TIMER4);
000b04 e3e00d60 MVN r0,#0x1800
000b08 e59f11cc LDR r1,|L1.3292|
000b0c e581001c STR r0,[r1,#0x1c]
;;;340
;;;341 //Uart_Printf("rINTMSK (Before) = 0x%8x\n",rINTMSK);
;;;342 rINTMSK = ~( BIT_TIMER3_4| BIT_TIMER2 | BIT_TIMER1 | BIT_TIMER0);
000b10 e3e00df0 MVN r0,#0x3c00
000b14 e0011000 AND r1,r1,r0
000b18 e5810008 STR r0,[r1,#8]
;;;343 //Uart_Printf("rINTMSK (After) = 0x%8x <= Timer4,3,2,1 Bit[14:10]\n",rINTMSK);
;;;344
;;;345 pISR_TIMER0 = (int)Timer0Done;
000b1c e59f01d0 LDR r0,|L1.3316|
000b20 e59f11d0 LDR r1,|L1.3320|
000b24 e5810f48 STR r0,[r1,#0xf48]
;;;346 pISR_TIMER1 = (int)Timer1Done;
000b28 e59f01cc LDR r0,|L1.3324|
000b2c e5810f4c STR r0,[r1,#0xf4c]
;;;347 pISR_TIMER2 = (int)Timer2Done;
000b30 e59f01c8 LDR r0,|L1.3328|
000b34 e5810f50 STR r0,[r1,#0xf50]
;;;348 pISR_TIMER3_4= (int)Timer3_4Done;
000b38 e59f01c4 LDR r0,|L1.3332|
000b3c e5810f54 STR r0,[r1,#0xf54]
;;;349 // pISR_TIMER3 = (int)Timer3Done;
;;;350 // pISR_TIMER4 = (int)Timer4Done;
;;;351
;;;352 Uart_Printf("\n[ Timer 0,1,2,3,4 Interrupt Test ]\n\n");
000b40 e28f0f70 ADR r0,|L1.3336|
000b44 ebfffffe BL _printf
;;;353
;;;354 rTCFG0 = rTCFG0 & ~(0xffffff) | 0x000f0f; //Dead zone=0,Prescaler1=15(0x0f),Prescaler0=15(0x0f)
000b48 e3a00444 MOV r0,#0x44000000
000b4c e5900000 LDR r0,[r0,#0]
000b50 e20004ff AND r0,r0,#0xff000000
000b54 e3800ef0 ORR r0,r0,#0xf00
000b58 e380000f ORR r0,r0,#0xf
000b5c e3a01444 MOV r1,#0x44000000
000b60 e5810000 STR r0,[r1,#0]
;;;355 rTCFG1 =rTCFG1 & ~(0xffffff) | 0x001233; //All interrupt,Mux4=1/2,Mux3=1/4,Mux2=1/8,Mux1=1/16,Mux0=1/16
000b64 e3a00444 MOV r0,#0x44000000
000b68 e5900004 LDR r0,[r0,#4]
000b6c e20004ff AND r0,r0,#0xff000000
000b70 e3800d48 ORR r0,r0,#0x1200
000b74 e3800033 ORR r0,r0,#0x33
000b78 e3a01444 MOV r1,#0x44000000
000b7c e5810004 STR r0,[r1,#4]
;;;356
;;;357 //Timer input clock frequency = PCLK/(prescaler value+1)/(divider value)
;;;358 rTCNTB0 = 0xffff; //(1/(50MHz/16/16)) * 0xffff (65535) = 0.334s ( 2.994Hz)
000b80 e59f01a8 LDR r0,|L1.3376|
000b84 e3a01444 MOV r1,#0x44000000
000b88 e581000c STR r0,[r1,#0xc]
;;;359 rTCNTB1 = 0xffff; //(1/(50MHz/16/16)) * 0xffff (65535) = 0.334s ( 2.994Hz)
000b8c e3a01444 MOV r1,#0x44000000
000b90 e5810018 STR r0,[r1,#0x18]
;;;360 rTCNTB2 = 0xffff; //(1/(50MHz/16/8 )) * 0xffff (65535) = 0.163s ( 6.135Hz)
000b94 e3a01444 MOV r1,#0x44000000
000b98 e5810024 STR r0,[r1,#0x24]
;;;361 rTCNTB3 = 0xffff; //(1/(50MHz/16/4 )) * 0xffff (65535) = 0.078s (12.820Hz)
000b9c e3a01444 MOV r1,#0x44000000
000ba0 e5810030 STR r0,[r1,#0x30]
;;;362 rTCNTB4 = 0xffff; //(1/(50MHz/16/2 )) * 0xffff (65535) = 0.039s (25.641Hz)
000ba4 e3a01444 MOV r1,#0x44000000
000ba8 e581003c STR r0,[r1,#0x3c]
;;;363
;;;364 // [22:20] [19:16] [15:12] [11:8] [7:4] [3:0]
;;;365 // 110 1010 1010 1010 0000 0010
;;;366 // rTCON = 0x6aaa02; //Auto reload (T0=One-shot), Inverter off, Manual update, Dead zone disable, Stop
;;;367
;;;368 rTCON = rTCON & ~(0xffffff) | 0x6aaa0a; //Auto reload, Inverter off, Manual update, Dead zone disable, Stop
000bac e3a00444 MOV r0,#0x44000000
000bb0 e5900008 LDR r0,[r0,#8]
000bb4 e20004ff AND r0,r0,#0xff000000
000bb8 e51f12ec LDR r1,|L1.2260|
000bbc e1800001 ORR r0,r0,r1
000bc0 e3a01444 MOV r1,#0x44000000
000bc4 e5810008 STR r0,[r1,#8]
;;;369
;;;370 // [22:20] [19:16] [15:12] [11:8] [7:4] [3:0]
;;;371 // 101 1001 1001 1001 0000 0001
;;;372 rTCON = rTCON & ~(0xffffff) | 0x599901; //Auto reload(T0=One-shot),Inverter off,No operation,Dead zone disable,Start
000bc8 e3a00444 MOV r0,#0x44000000
000bcc e5900008 LDR r0,[r0,#8]
000bd0 e20004ff AND r0,r0,#0xff000000
000bd4 e59f1158 LDR r1,|L1.3380|
000bd8 e1800001 ORR r0,r0,r1
000bdc e3a01444 MOV r1,#0x44000000
000be0 e5810008 STR r0,[r1,#8]
;;;373
;;;374 //Uart_Printf("Probing PWM TOUT 0 : TP21\n");
;;;375 //Uart_Printf("Probing PWM TOUT 1 : TP20\n");
;;;376 //Uart_Printf("Probing PWM TOUT 2 : TP19\n");
;;;377 //Uart_Printf("Probing PWM TOUT 3 : TP18\n\n");
;;;378
;;;379 if(PCLK==50000000)
;;;380 {
;;;381 // Uart_Printf("PCLK 50MHz, Timer TOUT 0 : 0.334s ( 2.994Hz)\n");
;;;382 // Uart_Printf("PCLK 50MHz, Timer TOUT 1 : 0.334s ( 2.994Hz)\n");
;;;383 // Uart_Printf("PCLK 50MHz, Timer TOUT 2 : 0.163s ( 6.135Hz)\n");
;;;384 // Uart_Printf("PCLK 50MHz, Timer TOUT 3 : 0.078s (12.820Hz)\n");
;;;385 // Uart_Printf("PCLK 50MHz, Timer TOUT 4 : 0.039s (25.641Hz) <= No Pin Out\n\n");
;;;386 }
;;;387
;;;388 while(variable0 == 0);
000be4 e1a00000 NOP
|L1.3048|
000be8 e59f0100 LDR r0,|L1.3312|
000bec e5900000 LDR r0,[r0,#0] ; variable0
000bf0 e3500000 CMP r0,#0
000bf4 0afffffb BEQ |L1.3048|
;;;389
;;;390 Delay(1); //To compensate timer error(<1 tick period)
000bf8 e3a00001 MOV r0,#1
000bfc ebfffffe BL Delay
;;;391 rTCON = 0x0; //One-shot, Inverter off, No operation, Dead zone disable, Stop
000c00 e3a00000 MOV r0,#0
000c04 e3a01444 MOV r1,#0x44000000
000c08 e5810008 STR r0,[r1,#8]
;;;392
;;;393 if(variable4 == 8 && variable3==4 && variable2==2 && variable1==1 && variable0==1)
000c0c e59f00d0 LDR r0,|L1.3300|
000c10 e5900000 LDR r0,[r0,#0] ; variable4
000c14 e3500008 CMP r0,#8
000c18 1a000012 BNE |L1.3176|
000c1c e59f00bc LDR r0,|L1.3296|
000c20 e5900000 LDR r0,[r0,#0] ; variable3
000c24 e3500004 CMP r0,#4
000c28 1a00000e BNE |L1.3176|
000c2c e59f00b4 LDR r0,|L1.3304|
000c30 e5900000 LDR r0,[r0,#0] ; variable2
000c34 e3500002 CMP r0,#2
000c38 1a00000a BNE |L1.3176|
000c3c e59f00a8 LDR r0,|L1.3308|
000c40 e5900000 LDR r0,[r0,#0] ; variable1
000c44 e3500001 CMP r0,#1
000c48 1a000006 BNE |L1.3176|
000c4c e59f009c LDR r0,|L1.3312|
000c50 e5900000 LDR r0,[r0,#0] ; variable0
000c54 e3500001 CMP r0,#1
000c58 1a000002 BNE |L1.3176|
;;;394 {
;;;395 Uart_Printf("Timer 0,1,2,3,4Interrupt Test --> OK\n");
000c5c e28f00d4 ADR r0,|L1.3384|
000c60 ebfffffe BL _printf
000c64 ea000001 B |L1.3184|
;;;396 }
;;;397 else
;;;398 {
;;;399 Uart_Printf("Timer 0,1,2,3,4 Interrupt Test --> Fail............\n");
|L1.3176|
000c68 e28f00f0 ADR r0,|L1.3424|
000c6c ebfffffe BL _printf
;;;400 }
;;;401 Uart_Printf("Timer0 - %d (=1), Timer1 - %d (=1), Timer2 - %d (=2), Timer3 - %d (=4),Timer4 - %d (=8) \n",
|L1.3184|
000c70 e59f006c LDR r0,|L1.3300|
000c74 e5903000 LDR r3,[r0,#0] ; variable4
000c78 e59f0060 LDR r0,|L1.3296|
000c7c e5902000 LDR r2,[r0,#0] ; variable3
000c80 e59f0060 LDR r0,|L1.3304|
000c84 e88d000c STMIA sp,{r2,r3}
000c88 e5903000 LDR r3,[r0,#0] ; variable2
000c8c e59f0058 LDR r0,|L1.3308|
000c90 e5902000 LDR r2,[r0,#0] ; variable1
000c94 e59f0054 LDR r0,|L1.3312|
000c98 e5901000 LDR r1,[r0,#0] ; variable0
000c9c e59f00f4 LDR r0,|L1.3480|
000ca0 ebfffffe BL _printf
;;;402 variable0,variable1,variable2,variable3,variable4);
;;;403 Uart_Printf("Press any key to exit.....\n");
000ca4 e28f00f0 ADR r0,|L1.3484|
000ca8 ebfffffe BL _printf
;;;404 while(!Uart_Getch()); //Key board press check
000cac e1a00000 NOP
|L1.3248|
000cb0 ebfffffe BL Uart_Getch
000cb4 e3500000 CMP r0,#0
000cb8 0afffffc BEQ |L1.3248|
;;;405
;;;406 // timer interrupt disable
;;;407 //Uart_Printf("rINTSUBMSK (Before) = 0x%8x\n",rINTSUBMSK);
;;;408 rINTSUBMSK = ( BIT_SUB_TIMER3 | BIT_SUB_TIMER4);
000cbc e3a00d60 MOV r0,#0x1800
000cc0 e59f1014 LDR r1,|L1.3292|
000cc4 e581001c STR r0,[r1,#0x1c]
;;;409
;;;410 //Uart_Printf("rINTMSK (Before) = 0x%8x\n",rINTMSK);
;;;411 rINTMSK |= ( BIT_TIMER3_4| BIT_TIMER2 | BIT_TIMER1 | BIT_TIMER0);
000cc8 e1c10000 BIC r0,r1,r0
000ccc e5900008 LDR r0,[r0,#8]
000cd0 e3800df0 ORR r0,r0,#0x3c00
000cd4 e5810008 STR r0,[r1,#8]
;;;412 //Uart_Printf("rINTMSK (After) = 0x%8x\n",rINTMSK);
;;;413 }
000cd8 e8bd800e LDMFD sp!,{r1-r3,pc}
|L1.3292|
000cdc 40200000 DCD 0x40200000
|L1.3296|
000ce0 00000010 DCD ||.bss$2|| + 16
|L1.3300|
000ce4 00000014 DCD ||.bss$2|| + 20
|L1.3304|
000ce8 0000000c DCD ||.bss$2|| + 12
|L1.3308|
000cec 00000008 DCD ||.bss$2|| + 8
|L1.3312|
000cf0 00000004 DCD ||.bss$2|| + 4
|L1.3316|
000cf4 00000000 DCD Timer0Done
|L1.3320|
000cf8 13fff000 DCD 0x13fff000
|L1.3324|
000cfc 00000000 DCD Timer1Done
|L1.3328|
000d00 00000000 DCD Timer2Done
|L1.3332|
000d04 00000000 DCD Timer3_4Done
|L1.3336|
000d08 54205b0a
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -