⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 int.txt

📁 SMDK2442所有设备的驱动测试程序。运行monitor程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; 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 + -