📄 timer.txt
字号:
000590 e20004ff AND r0,r0,#0xff000000
000594 e59f1330 LDR r1,|L1.2252|
000598 e1800001 ORR r0,r0,r1
00059c e3a01444 MOV r1,#0x44000000
0005a0 e5810000 STR r0,[r1,#0]
;;;191 rTCFG1 = 0x1111;
0005a4 e59f0314 LDR r0,|L1.2240|
0005a8 e3a01444 MOV r1,#0x44000000
0005ac e5810004 STR r0,[r1,#4]
;;;192 break;
0005b0 ea00003f B |L1.1716|
;;;193 case 'h'://All Interrupt, MUX 4 ~ 0 : 1/8 //Dead zone=1,Prescaler1=255,Prescaler0=255
;;;194 rTCFG0 = rTCFG0 & ~(0xffffff) | 0x1ffff;
|L1.1460|
0005b4 e3a00444 MOV r0,#0x44000000
0005b8 e5900000 LDR r0,[r0,#0]
0005bc e20004ff AND r0,r0,#0xff000000
0005c0 e59f1304 LDR r1,|L1.2252|
0005c4 e1800001 ORR r0,r0,r1
0005c8 e3a01444 MOV r1,#0x44000000
0005cc e5810000 STR r0,[r1,#0]
;;;195 rTCFG1 = 0x2222;
0005d0 e59f02ec LDR r0,|L1.2244|
0005d4 e3a01444 MOV r1,#0x44000000
0005d8 e5810004 STR r0,[r1,#4]
;;;196 break;
0005dc ea000034 B |L1.1716|
;;;197 case 'i'://All Interrupt, MUX 4 ~ 0 : 1/16 //Dead zone=1,Prescaler1=255,Prescaler0=255
;;;198 rTCFG0 = rTCFG0 & ~(0xffffff) | 0x1ffff;
|L1.1504|
0005e0 e3a00444 MOV r0,#0x44000000
0005e4 e5900000 LDR r0,[r0,#0]
0005e8 e20004ff AND r0,r0,#0xff000000
0005ec e59f12d8 LDR r1,|L1.2252|
0005f0 e1800001 ORR r0,r0,r1
0005f4 e3a01444 MOV r1,#0x44000000
0005f8 e5810000 STR r0,[r1,#0]
;;;199 rTCFG1 = 0x3333;
0005fc e59f02c4 LDR r0,|L1.2248|
000600 e3a01444 MOV r1,#0x44000000
000604 e5810004 STR r0,[r1,#4]
;;;200 break;
000608 ea000029 B |L1.1716|
;;;201 // case 'j'://All Interrupt, MUX 4 ~ 0 : TCLK1 //Dead zone=1,Prescaler1=255,Prescaler0=255
;;;202 // rTCFG0 = rTCFG0 & ~(0xffffff) | 0x1ffff;
;;;203 // rTCFG1 = 0x4444;
;;;204 // break;
;;;205 case 'k'://All Interrupt, MUX 1 ~ 0 : 1/2 //Dead zone=40,Prescaler1=0,Prescaler0=0
;;;206 rTCFG0 = rTCFG0 & ~(0xffffff) | 0x280000;
|L1.1548|
00060c e3a00444 MOV r0,#0x44000000
000610 e5900000 LDR r0,[r0,#0]
000614 e20004ff AND r0,r0,#0xff000000
000618 e38009a0 ORR r0,r0,#0x280000
00061c e3a01444 MOV r1,#0x44000000
000620 e5810000 STR r0,[r1,#0]
;;;207 rTCFG1 = 0x0;
000624 e3a00000 MOV r0,#0
000628 e3a01444 MOV r1,#0x44000000
00062c e5810004 STR r0,[r1,#4]
;;;208 Deadzone_test_flag = 1;
000630 e3a04001 MOV r4,#1
;;;209 break;
000634 ea00001e B |L1.1716|
;;;210 case 'l'://All Interrupt, MUX 1 ~ 0 : 1/2 //Dead zone=1,Prescaler1=0,Prescaler0=0, PWM50%
;;;211 rTCFG0 = rTCFG0 & ~(0xffffff) | 0x280000;
|L1.1592|
000638 e3a00444 MOV r0,#0x44000000
00063c e5900000 LDR r0,[r0,#0]
000640 e20004ff AND r0,r0,#0xff000000
000644 e38009a0 ORR r0,r0,#0x280000
000648 e3a01444 MOV r1,#0x44000000
00064c e5810000 STR r0,[r1,#0]
;;;212 rTCFG1 = 0x0;
000650 e3a00000 MOV r0,#0
000654 e3a01444 MOV r1,#0x44000000
000658 e5810004 STR r0,[r1,#4]
;;;213 PWM50_test_flag = 1;
00065c e3a06001 MOV r6,#1
;;;214 break;
000660 ea000013 B |L1.1716|
;;;215 case 'm'://All Interrupt, MUX 4 ~ 0 : 1/2 //Dead zone=1,Prescaler1=0,Prescaler0=0, Invert ON
;;;216 rTCFG0 = rTCFG0 & ~(0xffffff) | 0x280000;
|L1.1636|
000664 e3a00444 MOV r0,#0x44000000
000668 e5900000 LDR r0,[r0,#0]
00066c e20004ff AND r0,r0,#0xff000000
000670 e38009a0 ORR r0,r0,#0x280000
000674 e3a01444 MOV r1,#0x44000000
000678 e5810000 STR r0,[r1,#0]
;;;217 rTCFG1 = 0x0;
00067c e3a00000 MOV r0,#0
000680 e3a01444 MOV r1,#0x44000000
000684 e5810004 STR r0,[r1,#4]
;;;218 Inverton_test_flag = 1;
000688 e3a05001 MOV r5,#1
;;;219 break;
00068c ea000008 B |L1.1716|
;;;220
;;;221 default:
;;;222 rTCON = 0x0;
|L1.1680|
000690 e3a00000 MOV r0,#0
000694 e3a01444 MOV r1,#0x44000000
000698 e5810008 STR r0,[r1,#8]
;;;223 rGPCON_U = save_GPCON_U;
00069c e2810880 ADD r0,r1,#0x800000
0006a0 e5808000 STR r8,[r0,#0]
;;;224 rGPCON_L = save_GPCON_L;
0006a4 e5809008 STR r9,[r0,#8]
;;;225 rGPDAT = save_GPDAT;
0006a8 e580a00c STR r10,[r0,#0xc]
;;;226 rGPPU = save_rGPUP;
0006ac e580b010 STR r11,[r0,#0x10]
;;;227 return;
;;;228 }
;;;229
;;;230 ////////////////////////////////////////////////////////////////////////////////////
;;;231 // Step1>> write the rTCNTBn and rTCMPBn
;;;232 //(1/(PCLK/(Prescaler+1)/divider) * count(Max 65535) = Timer clock (Frequency)
;;;233 ////////////////////////////////////////////////////////////////////////////////////
;;;234
;;;235 rTCNTB0 = rTCNTB0 & ~(0xffff) | 2000; //(1/(50MHz/69/2)) * 2000 = 5.5200 msec (181.159 Hz)
;;;236 //(1/(50.7MHz/69/2))* 2000 = 5.4437 msec (183.698 Hz)
;;;237 //(1/(50MHz/1/2)) * 2000 = 0.0800 msec ( 12.500 KHz)
;;;238 //(1/(50.7MHz/1/2)) * 2000 = 0.0788 msec ( 12.690 KHz)
;;;239 rTCNTB1 = rTCNTB1 & ~(0xffff) | 4000; //(0.0000027600003) * 4000 = 11.0400 msec ( 90.579 Hz)
;;;240 //(0.0000027218935) * 4000 = 10.8875 msec ( 91.848 Hz)
;;;241 //(0.00000004) * 4000 = 0.1600 msec ( 6.250 KHz)
;;;242 //(0.0000000394477) * 4000 = 0.1577 msec ( 6.337 KHz)
;;;243 rTCNTB2 = rTCNTB2 & ~(0xffff) | 5000; //(0.0000027600003) * 5000 = 13.8000 msec ( 72.463 Hz)
;;;244 //(0.0000027218935) * 5000 = 13.6094 msec ( 73.478 Hz)
;;;245 //(0.00000004) * 5000 = 0.2000 msec ( 5.000 KHz)
;;;246 //(0.0000000394477) * 5000 = 0.1972 msec ( 5.070 KHz)
;;;247 rTCNTB3 = rTCNTB3 & ~(0xffff) | 10000; //(0.0000027600003) * 10000 = 27.6000 msec ( 36.231 Hz)
;;;248 //(0.0000027218935) * 10000 = 27.2189 msec ( 36.739 Hz)
;;;249 //(0.00000004) * 10000 = 0.4000 msec ( 2.500 KHz)
;;;250 //(0.0000000394477) * 10000 = 0.3944 msec ( 2.535 KHz)
;;;251
;;;252
;;;253 //Uart_Printf("rTCNTB0=%d |rTCNTB1=%d |rTCNTB2=%d | rTCNTB3=%d \n",rTCNTB0,rTCNTB1,rTCNTB2,rTCNTB3);
;;;254
;;;255 if(PWM50_test_flag ==1 ){
;;;256 rTCMPB0 = 2000; rTCMPB1 = 4000; rTCMPB2 = 5000; rTCMPB3 = 10000;
;;;257 PWM50_test_flag = 0;
;;;258 }else{
;;;259 rTCMPB0 = 2000 - 1000; rTCMPB1 = 4000 - 2000; rTCMPB2 = 5000 - 2500; rTCMPB3 = 10000-5000;
;;;260 }
;;;261
;;;262 //Uart_Printf("rTCMPB0=%d |rTCMPB1=%d |rTCMPB2=%d | rTCMPB3=%d \n",rTCMPB0,rTCMPB1,rTCMPB2,rTCMPB3);
;;;263
;;;264
;;;265 ////////////////////////////////////////////////////////////////////////////////////
;;;266 // Step2.>> Set the manual update bit[TCON] of the corresponging timer. it is recommended to configure
;;;267 // the inverter on/off bit
;;;268 ////////////////////////////////////////////////////////////////////////////////////
;;;269 //Uart_Printf("rTCON = 0x%6x (Before) <= Timer control register.\n",rTCON);
;;;270
;;;271 // [22:20] [19:16] [15:12] [11:8] [7:4] [3:0]
;;;272 // 110 1010 1010 1010 0000 1010
;;;273 if(Deadzone_test_flag == 1)
;;;274 rTCON = rTCON & ~(0xffffff) | 0x6aaa1a; //Auto reload, Inverter off, Manual update, Stop, Dead zone enable
;;;275 else
;;;276 rTCON = rTCON & ~(0xffffff) | 0x6aaa0a; //Auto reload, Inverter off, Manual update, Stop, Dead zone disable
;;;277
;;;278 if(Inverton_test_flag == 1) rTCON |= 0x44404;
;;;279
;;;280 //Uart_Printf("rTCON = 0x%6x (After) <= Timer control register.(0x6aaa0a)\n",rTCON);
;;;281
;;;282
;;;283 ////////////////////////////////////////////////////////////////////////////////////
;;;284 // Step3>> set start bit of corresponding timer to start the timer
;;;285 // (at the same time, clear the manual update bit)
;;;286 ////////////////////////////////////////////////////////////////////////////////////
;;;287
;;;288 // [22:20] [19:16] [15:12] [11:8] [7:4] [3:0]
;;;289 // 101 1001 1001 1001 0000 1001
;;;290 if(Deadzone_test_flag == 1){
;;;291 //Auto reload, Inverter off, No operation, Timer0&1 Start, Dead zone enable
;;;292 rTCON = rTCON & ~(0xffffff) | 0x099919;
;;;293 Deadzone_test_flag=0;
;;;294 }
;;;295 else{
;;;296 if(Inverton_test_flag ==1){
;;;297 rTCON = rTCON & ~(0xffffff) | 0x5ddd0d; // inverter on
;;;298 Inverton_test_flag = 0;
;;;299 }
;;;300 //Auto reload, Inverter off, No operation, Start, Dead zone disable
;;;301 rTCON = rTCON & ~(0xffffff) | 0x599909;
;;;302 }
;;;303
;;;304 Uart_Printf("rTCON = 0x%6x (After) <= Timer control register.(0x599909)\n\n",rTCON);
;;;305 Uart_Printf("rGPGONU = 0x%8x (After) <= Timer control register.(0x599909)\n\n",rGPCON_U);
;;;306 //Uart_Printf("\n");
;;;307 Uart_Printf("Probing PWM TOUT0,1,2,3 and ECLK, respectively TP20,19,18,17,16 \n");
;;;308 Uart_Printf("\nCheck PWM (Pulse Width Modulation) Output\n");
;;;309 Uart_Printf("Press any key to exit.\n");
;;;310 Uart_Printf("\n\n");
;;;311
;;;312 Uart_Getch();
;;;313
;;;314 goto LABEL;
;;;315 ////////////////////////////////////////////////////////////////////////////////////
;;;316 // Step4 >> Stop timer
;;;317 ////////////////////////////////////////////////////////////////////////////////////
;;;318 rTCON = 0x0; //One-shot, Inverter off, No operation, Dead zone disable, Stop
;;;319 //Uart_Printf("rTCNTB0=0x%6x|rTCNTB1=0x%6x|rTCNTB2=0x%6x|rTCNTB3=0x%6x\n",rTCNTB0,rTCNTB1,rTCNTB2,rTCNTB3);
;;;320 //Uart_Printf("rTCMPB0=0x%6x|rTCMPB2=0x%6x|rTCMPB2=0x%6x|rTCMPB3=0x%6x\n",rTCMPB0,rTCMPB1,rTCMPB2,rTCMPB3);
;;;321 //Uart_Printf("rTCON = 0x%6x <= Timer control register.(0x0)\n",rTCON);
;;;322 rGPCON_U = save_GPCON_U;
;;;323 rGPCON_L = save_GPCON_L;
;;;324 rGPDAT = save_GPDAT;
;;;325 rGPPU = save_rGPUP;
;;;326 }
0006b0 e8bd8ff8 LDMFD sp!,{r3-r11,pc}
|L1.1716|
0006b4 e3a00444 MOV r0,#0x44000000 ;235
0006b8 e590000c LDR r0,[r0,#0xc] ;235
0006bc e1a00820 MOV r0,r0,LSR #16 ;235
0006c0 e1a00800 MOV r0,r0,LSL #16 ;235
0006c4 e3800e7d ORR r0,r0,#0x7d0 ;235
0006c8 e3a01444 MOV r1,#0x44000000 ;235
0006cc e581000c STR r0,[r1,#0xc] ;235
0006d0 e3a00444 MOV r0,#0x44000000 ;239
0006d4 e5900018 LDR r0,[r0,#0x18] ;239
0006d8 e1a00820 MOV r0,r0,LSR #16 ;239
0006dc e1a00800 MOV r0,r0,LSL #16 ;239
0006e0 e3800efa ORR r0,r0,#0xfa0 ;239
0006e4 e3a01444 MOV r1,#0x44000000 ;239
0006e8 e5810018 STR r0,[r1,#0x18] ;239
0006ec e3a00444 MOV r0,#0x44000000 ;243
0006f0 e5900024 LDR r0,[r0,#0x24] ;243
0006f4 e1a00820 MOV r0,r0,LSR #16 ;243
0006f8 e1a00800 MOV r0,r0,LSL #16 ;243
0006fc e3800d40 ORR r0,r0,#0x1000 ;243
000700 e3800fe2 ORR r0,r0,#0x388 ;243
000704 e3a01444 MOV r1,#0x44000000 ;243
000708 e5810024 STR r0,[r1,#0x24] ;243
00070c e3a00444 MOV r0,#0x44000000 ;247
000710 e5900030 LDR r0,[r0,#0x30] ;247
000714 e1a00820 MOV r0,r0,LSR #16 ;247
000718 e1a00800 MOV r0,r0,LSL #16 ;247
00071c e3800d80 ORR r0,r0,#0x2000 ;247
000720 e3800e71 ORR r0,r0,#0x710 ;247
000724 e3a01444 MOV r1,#0x44000000 ;247
000728 e5810030 STR r0,[r1,#0x30] ;247
00072c e3560001 CMP r6,#1 ;255
000730 1a00000d BNE |L1.1900| ;255
000734 e3a00e7d MOV r0,#0x7d0 ;256
000738 e3a01444 MOV r1,#0x44000000 ;256
00073c e5810010 STR r0,[r1,#0x10] ;256
000740 e3a00efa MOV r0,#0xfa0 ;256
000744 e3a01444 MOV r1,#0x44000000 ;256
000748 e581001c STR r0,[r1,#0x1c] ;256
00074c e2800ffa ADD r0,r0,#0x3e8 ;256
000750 e3a01444 MOV r1,#0x44000000 ;256
000754 e5810028 STR r0,[r1,#0x28] ;256
000758 e1a00080 MOV r0,r0,LSL #1 ;256
00075c e3a01444 MOV r1,#0x44000000 ;256
000760 e5810034 STR r0,[r1,#0x34] ;256
000764 e3a06000 MOV r6,#0 ;257
000768 ea00000b B |L1.1948| ;257
|L1.1900|
00076c e3a00ffa MOV r0,#0x3e8 ;259
000770 e3a01444 MOV r1,#0x44000000 ;259
000774 e5810010 STR r0,[r1,#0x10] ;259
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -