📄 int.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]
; commandline [-errors .\err\int.err -O0 -asm -g+ -cpu ARM920T -fs "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
Test_Int PROC
;;;40 void Test_Int(void)
;;;41 {
|L1.0|
000000 e92d4010 STMFD sp!,{r4,lr}
;;;42 int i;
;;;43
;;;44 Uart_Printf("Interrupt test.\n");
000004 e28f00c0 ADR r0,|L1.204|
000008 ebfffffe BL Uart_Printf
;;;45
;;;46
;;;47 while(1)
00000c e1a00000 NOP
|L1.16|
000010 e1a00000 NOP
;;;48 {
;;;49 i=0;
000014 e3a04000 MOV r4,#0
;;;50 Uart_Printf("\n\n");
000018 e28f00c0 ADR r0,|L1.224|
00001c ebfffffe BL Uart_Printf
;;;51 while(1)
000020 e1a00000 NOP
|L1.36|
000024 e1a00000 NOP
;;;52 { //display menu
;;;53 Uart_Printf("%2d:%s",i,func_int_test[i][1]);
000028 e59f00b4 LDR r0,|L1.228|
00002c e0800184 ADD r0,r0,r4,LSL #3
000030 e1a01004 MOV r1,r4
000034 e5902004 LDR r2,[r0,#4]
000038 e28f00a8 ADR r0,|L1.232|
00003c ebfffffe BL Uart_Printf
;;;54 i++;
000040 e2844001 ADD r4,r4,#1
;;;55 if((int)(func_int_test[i][0])==0)
000044 e59f0098 LDR r0,|L1.228|
000048 e7900184 LDR r0,[r0,r4,LSL #3]
00004c e3500000 CMP r0,#0
000050 1a000002 BNE |L1.96|
;;;56 {
;;;57 Uart_Printf("\n");
000054 e28f0094 ADR r0,|L1.240|
000058 ebfffffe BL Uart_Printf
;;;58 break;
00005c ea000007 B |L1.128|
;;;59 }
;;;60 if((i%3)==0)
|L1.96|
000060 e1a01004 MOV r1,r4
000064 e3a00003 MOV r0,#3
000068 ebfffffe BL __rt_sdiv
00006c e3510000 CMP r1,#0
000070 1a000001 BNE |L1.124|
;;;61 Uart_Printf("\n");
000074 e28f0074 ADR r0,|L1.240|
000078 ebfffffe BL Uart_Printf
;;;62 }
|L1.124|
00007c eaffffe8 B |L1.36|
;;;63
;;;64 Uart_Printf("\nSelect (\"-1\" to exit) : ");
|L1.128|
000080 e28f006c ADR r0,|L1.244|
000084 ebfffffe BL Uart_Printf
;;;65 i = Uart_GetIntNum();
000088 ebfffffe BL Uart_GetIntNum
00008c e1a04000 MOV r4,r0
;;;66 if(i==-1) break; // return.
000090 e3740001 CMN r4,#1
000094 1a000000 BNE |L1.156|
000098 ea000008 B |L1.192|
;;;67 if(i>=0 && (i<((sizeof(func_int_test)-1)/8)) ) // select and execute...
|L1.156|
00009c e3540000 CMP r4,#0
0000a0 ba000005 BLT |L1.188|
0000a4 e3540004 CMP r4,#4
0000a8 2a000003 BCS |L1.188|
;;;68 ( (void (*)(void)) (func_int_test[i][0]) )();
0000ac e59f1030 LDR r1,|L1.228|
0000b0 e7910184 LDR r0,[r1,r4,LSL #3]
0000b4 e1a0e00f MOV lr,pc
0000b8 e1a0f000 MOV pc,r0
;;;69 }
|L1.188|
0000bc eaffffd3 B |L1.16|
;;;70
;;;71 Uart_Printf("Interrupt test end.\n");
|L1.192|
0000c0 e28f0048 ADR r0,|L1.272|
0000c4 ebfffffe BL Uart_Printf
;;;72 }
0000c8 e8bd8010 LDMFD sp!,{r4,pc}
|L1.204|
0000cc 65746e49 DCB "Inte"
0000d0 70757272 DCB "rrup"
0000d4 65742074 DCB "t te"
0000d8 0a2e7473 DCB "st.\n"
0000dc 00000000 DCB "\0\0\0\0"
|L1.224|
0000e0 00000a0a DCB "\n\n\0\0"
|L1.228|
0000e4 00000000 DCD func_int_test
|L1.232|
0000e8 3a643225 DCB "%2d:"
0000ec 00007325 DCB "%s\0\0"
|L1.240|
0000f0 0000000a DCB "\n\0\0\0"
|L1.244|
0000f4 6c65530a DCB "\nSel"
0000f8 20746365 DCB "ect "
0000fc 312d2228 DCB "(\"-1"
000100 6f742022 DCB "\" to"
000104 69786520 DCB " exi"
000108 3a202974 DCB "t) :"
00010c 00000020 DCB " \0\0\0"
|L1.272|
000110 65746e49 DCB "Inte"
000114 70757272 DCB "rrup"
000118 65742074 DCB "t te"
00011c 65207473 DCB "st e"
000120 0a2e646e DCB "nd.\n"
000124 00000000 DCB "\0\0\0\0"
ENDP
T0Int PROC
;;;75 static void __irq T0Int(void) //FIQ
;;;76 {
|L1.296|
000128 e92d0003 STMFD sp!,{r0,r1}
;;;77 ClearPending(BIT_TIMER0);
00012c e3a00e40 MOV r0,#0x400
000130 e3a0144a MOV r1,#0x4a000000
000134 e5810000 STR r0,[r1,#0]
000138 e3a00e40 MOV r0,#0x400
00013c e3a0144a MOV r1,#0x4a000000
000140 e5810010 STR r0,[r1,#0x10]
000144 e3a0044a MOV r0,#0x4a000000
000148 e5900010 LDR r0,[r0,#0x10]
;;;78 fiqCnt0 += 1;
00014c e59f01d4 LDR r0,|L1.808|
000150 e5900000 LDR r0,[r0,#0] ; fiqCnt0
000154 e2800001 ADD r0,r0,#1
000158 e59f11c8 LDR r1,|L1.808|
00015c e5810000 STR r0,[r1,#0] ; fiqCnt0
;;;79 }
000160 e8bd0003 LDMFD sp!,{r0,r1}
000164 e25ef004 SUBS pc,lr,#4
ENDP
T1Int PROC
;;;82 static void __irq T1Int(void) //IRQ
;;;83 {
|L1.360|
000168 e92d1003 STMFD sp!,{r0,r1,r12}
;;;84 ClearPending(BIT_TIMER1); //Timer1 Clear Interrupt
00016c e3a00e80 MOV r0,#0x800
000170 e3a0144a MOV r1,#0x4a000000
000174 e5810000 STR r0,[r1,#0]
000178 e3a00e80 MOV r0,#0x800
00017c e3a0144a MOV r1,#0x4a000000
000180 e5810010 STR r0,[r1,#0x10]
000184 e3a0044a MOV r0,#0x4a000000
000188 e5900010 LDR r0,[r0,#0x10]
;;;85 fiqCnt1 += 1;
00018c e59f0198 LDR r0,|L1.812|
000190 e5900000 LDR r0,[r0,#0] ; fiqCnt1
000194 e2800001 ADD r0,r0,#1
000198 e59f118c LDR r1,|L1.812|
00019c e5810000 STR r0,[r1,#0] ; fiqCnt1
;;;86
;;;87 if(fiqCnt0!=fiqCnt1)
0001a0 e59f0180 LDR r0,|L1.808|
0001a4 e5900000 LDR r0,[r0,#0] ; fiqCnt0
0001a8 e59f117c LDR r1,|L1.812|
0001ac e5911000 LDR r1,[r1,#0] ; fiqCnt1
0001b0 e1500001 CMP r0,r1
0001b4 0a000002 BEQ |L1.452|
;;;88 fiqCnt1 = 0;
0001b8 e3a00000 MOV r0,#0
0001bc e59f1168 LDR r1,|L1.812|
0001c0 e5810000 STR r0,[r1,#0] ; fiqCnt1
;;;89 if(fiqCnt0==10000) //Because FIQ interrupt has higher priority,
|L1.452|
0001c4 e59f015c LDR r0,|L1.808|
0001c8 e5900000 LDR r0,[r0,#0] ; fiqCnt0
0001cc e240cd80 SUB r12,r0,#0x2000
0001d0 e25cce71 SUBS r12,r12,#0x710
0001d4 1a000002 BNE |L1.484|
;;;90 rTCON = 0x0; //fiqCnt0 will always be same with fiqCnt1.
0001d8 e3a00000 MOV r0,#0
0001dc e3a01451 MOV r1,#0x51000000
0001e0 e5810008 STR r0,[r1,#8]
;;;91 }
|L1.484|
0001e4 e8bd1003 LDMFD sp!,{r0,r1,r12}
0001e8 e25ef004 SUBS pc,lr,#4
ENDP
Test_Fiq PROC
;;;94 void Test_Fiq(void)
;;;95 {
0001ec e92d4010 STMFD sp!,{r4,lr}
;;;96 int intmod;
;;;97
;;;98 Uart_Printf("[ FIQ Interrupt Test ]\n");
0001f0 e28f0f4e ADR r0,|L1.816|
0001f4 ebfffffe BL Uart_Printf
;;;99 Uart_Printf("[ Set Timer0 with FIQ Interrupt ]\n");
0001f8 e28f0f52 ADR r0,|L1.840|
0001fc ebfffffe BL Uart_Printf
;;;100 fiqCnt0 = 0;
000200 e3a00000 MOV r0,#0
000204 e59f111c LDR r1,|L1.808|
000208 e5810000 STR r0,[r1,#0] ; fiqCnt0
;;;101 fiqCnt1 = 0;
00020c e3a00000 MOV r0,#0
000210 e59f1114 LDR r1,|L1.812|
000214 e5810000 STR r0,[r1,#0] ; fiqCnt1
;;;102 pISR_FIQ = (U32)T0Int; //Timer0 FIQ interrupt
000218 e59f014c LDR r0,|L1.876|
00021c e59f114c LDR r1,|L1.880|
000220 e5810f1c STR r0,[r1,#0xf1c]
;;;103 pISR_TIMER1 = (U32)T1Int; //Timer1 Interrupt
000224 e59f0148 LDR r0,|L1.884|
000228 e5810f4c STR r0,[r1,#0xf4c]
;;;104 intmod = rINTMOD; //Interrupt Mode backup
00022c e3a0044a MOV r0,#0x4a000000
000230 e5900004 LDR r0,[r0,#4]
000234 e1a04000 MOV r4,r0
;;;105 rINTMOD = BIT_TIMER0; //Timer0 FIQ mode
000238 e3a00e40 MOV r0,#0x400
00023c e3a0144a MOV r1,#0x4a000000
000240 e5810004 STR r0,[r1,#4]
;;;106 rSRCPND = BIT_TIMER0 | BIT_TIMER1; //Timer0,1 To clear the previous pending states
000244 e3a00ec0 MOV r0,#0xc00
000248 e3a0144a MOV r1,#0x4a000000
00024c e5810000 STR r0,[r1,#0]
;;;107 rINTPND = BIT_TIMER0 | BIT_TIMER1; //Timer0,1 Interrupt request
000250 e3a00ec0 MOV r0,#0xc00
000254 e3a0144a MOV r1,#0x4a000000
000258 e5810010 STR r0,[r1,#0x10]
;;;108
;;;109 //PWM Timer control
;;;110 //==============================================================================
;;;111 //Timer input clock Frequency = PCLK /{prescaler value + 1} / {divider value}
;;;112 // {prescaler value} = 0 ~ 255
;;;113 // {divider value} = 2,4,8,16
;;;114 //==============================================================================
;;;115 rTCFG0 = 0x0; //Dead zone length, Prescaler0=Timer0,1 Prescaler1=Timer2,3,4
00025c e3a00000 MOV r0,#0
000260 e3a01451 MOV r1,#0x51000000
000264 e5810000 STR r0,[r1,#0]
;;;116 rTCFG1 = 0x0; //Select DMA request channel All Interrupt, Select MUX input for PWM Timer0~4 = 1/2
000268 e3a00000 MOV r0,#0
00026c e3a01451 MOV r1,#0x51000000
000270 e5810004 STR r0,[r1,#4]
;;;117 rTCNTB0 = 2570; //0xa0a, Timer0 count buffer register
000274 e59f00fc LDR r0,|L1.888|
000278 e3a01451 MOV r1,#0x51000000
00027c e581000c STR r0,[r1,#0xc]
;;;118 rTCNTB1 = 2570; //0xa0a, Timer1 count buffer register
000280 e3a01451 MOV r1,#0x51000000
000284 e5810018 STR r0,[r1,#0x18]
;;;119 rTCON = 0xa0a; //1010 0000 1010 Timer0,1:Auto-Reload,Inverter off, Update TCNTB0,1, TCMPB0,1, Stop
000288 e3a01451 MOV r1,#0x51000000
00028c e5810008 STR r0,[r1,#8]
;;;120 rTCON = 0x909; //1001 0000 1001 Timer0,1:Auto-Reload,Inverter off, No operation, Start for Timer0,1
000290 e59f00e4 LDR r0,|L1.892|
000294 e3a01451 MOV r1,#0x51000000
000298 e5810008 STR r0,[r1,#8]
;;;121
;;;122 rINTMSK = ~(BIT_TIMER0 | BIT_TIMER1); //Timer0,1 Interrupt service is available
00029c e3e00ec0 MVN r0,#0xc00
0002a0 e3a0144a MOV r1,#0x4a000000
0002a4 e5810008 STR r0,[r1,#8]
;;;123
;;;124 while(fiqCnt1<10000)
0002a8 e1a00000 NOP
|L1.684|
0002ac e59f0078 LDR r0,|L1.812|
0002b0 e5900000 LDR r0,[r0,#0] ; fiqCnt1
0002b4 e250cd80 SUBS r12,r0,#0x2000
0002b8 a25cce71 SUBGES r12,r12,#0x710
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -