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

📄 camproset.txt

📁 SMDK2442所有设备的驱动测试程序。运行monitor程序
💻 TXT
📖 第 1 页 / 共 4 页
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]

; commandline [-errors .\err\camproset.err -O0 -asm -g+ -cpu ARM920T -fs "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
                          CODE32

                          AREA ||.text||, CODE, READONLY

                  Wr_CamIIC PROC
;;;126    void Wr_CamIIC(U32 slvAddr, U32 addr, U8 data)
;;;127    {
                  |L1.0|
000000  e3a03001          MOV      r3,#1
;;;128    	_CAMiicMode      = CAMWRDATA;
000004  e59fc0b0          LDR      r12,|L1.188|
000008  e58c3000          STR      r3,[r12,#0]  ; _CAMiicMode
;;;129    	_CAMiicPt        = 0;
00000c  e3a03000          MOV      r3,#0
000010  e59fc0a8          LDR      r12,|L1.192|
000014  e58c3000          STR      r3,[r12,#0]  ; _CAMiicPt
;;;130    	_CAMiicData[0]   = (U8)addr;
000018  e59f30a4          LDR      r3,|L1.196|
00001c  e5c31000          STRB     r1,[r3,#0]  ; _CAMiicData
;;;131    	_CAMiicData[1]   = data;
000020  e59f309c          LDR      r3,|L1.196|
000024  e5c32001          STRB     r2,[r3,#1]  ; _CAMiicData
;;;132    	_CAMiicDataCount = 2;
000028  e3a03002          MOV      r3,#2
00002c  e59fc094          LDR      r12,|L1.200|
000030  e58c3000          STR      r3,[r12,#0]  ; _CAMiicDataCount
;;;133        
;;;134    	rIICDS        = slvAddr;            //0x5a: S5X532 Slave ID 
000034  e3a03454          MOV      r3,#0x54000000
000038  e583000c          STR      r0,[r3,#0xc]
;;;135    	rIICSTAT      = 0xf0; //Start Master TX Condition    
00003c  e3a030f0          MOV      r3,#0xf0
000040  e3a0c454          MOV      r12,#0x54000000
000044  e58c3004          STR      r3,[r12,#4]
;;;136    	rIICCON &= ~(1<<4);   //Clearing the pending bit isn't needed because the pending bit has been cleared.
000048  e3a03454          MOV      r3,#0x54000000
00004c  e5933000          LDR      r3,[r3,#0]
000050  e3c33010          BIC      r3,r3,#0x10
000054  e3a0c454          MOV      r12,#0x54000000
000058  e58c3000          STR      r3,[r12,#0]
;;;137    
;;;138    	while(_CAMiicDataCount!=-1);
00005c  e1a00000          NOP      
                  |L1.96|
000060  e59f3060          LDR      r3,|L1.200|
000064  e5933000          LDR      r3,[r3,#0]  ; _CAMiicDataCount
000068  e3730001          CMN      r3,#1
00006c  1afffffb          BNE      |L1.96|
;;;139    }
000070  e1a0f00e          MOV      pc,lr
                          ENDP

                  Camera_WriteBlock PROC
;;;274    void Camera_WriteBlock(void)
;;;275    {
000074  e92d4010          STMFD    sp!,{r4,lr}
;;;276    	unsigned int i, j, save_E, save_PE, RegAddr, RegData;
;;;277    	static U8 rdata[256]; 
;;;278    
;;;279    #if USED_CAM_TYPE==CAM_OV7620
;;;280    	for(i=0; i<(sizeof(Ov7620_YCbCr8bit)/2); i++)
;;;281    		Wr_CamIIC(CAM_ID, Ov7620_YCbCr8bit[i][0], Ov7620_YCbCr8bit[i][1]);
;;;282    #elif USED_CAM_TYPE==CAM_S5X532
;;;283    	for(i=0; i<(sizeof(S5X532_YCbCr8bit)/2); i++)
000078  e3a04000          MOV      r4,#0
                  |L1.124|
00007c  e354005e          CMP      r4,#0x5e
000080  2a00000a          BCS      |L1.176|
000084  ea000001          B        |L1.144|
                  |L1.136|
000088  e2844001          ADD      r4,r4,#1
00008c  eafffffa          B        |L1.124|
;;;284    		Wr_CamIIC(CAM_ID, S5X532_YCbCr8bit[i][0], S5X532_YCbCr8bit[i][1]);
                  |L1.144|
000090  e59f0034          LDR      r0,|L1.204|
000094  e0800084          ADD      r0,r0,r4,LSL #1
000098  e5d02001          LDRB     r2,[r0,#1]
00009c  e59f0028          LDR      r0,|L1.204|
0000a0  e7d01084          LDRB     r1,[r0,r4,LSL #1]
0000a4  e3a0005a          MOV      r0,#0x5a
0000a8  ebfffffe          BL       Wr_CamIIC
0000ac  eafffff5          B        |L1.136|
;;;285    #elif USED_CAM_TYPE==CAM_S5X3A1
;;;286    		for(i=0; i<(sizeof(S5X3A1_YCbCr8bit)/2); i++)
;;;287    			Wr_CamIIC(CAM_ID, S5X3A1_YCbCr8bit[i][0], S5X3A1_YCbCr8bit[i][1]);
;;;288    #elif USED_CAM_TYPE==CAM_AU70H
;;;289    	for(i=0; i<(sizeof(Au70h)/2); i++)
;;;290    		Wr_CamIIC(CAM_ID, Au70h[i][0], Au70h[i][1]);
;;;291    #endif
;;;292    	
;;;293       Uart_Printf("\nBlock TX Ended...\n");	
                  |L1.176|
0000b0  e28f0018          ADR      r0,|L1.208|
0000b4  ebfffffe          BL       Uart_Printf
;;;294    }
0000b8  e8bd8010          LDMFD    sp!,{r4,pc}
                  |L1.188|
0000bc  00000330          DCD      ||.bss$2|| + 816
                  |L1.192|
0000c0  00000334          DCD      ||.bss$2|| + 820
                  |L1.196|
0000c4  00000308          DCD      ||.bss$2|| + 776
                  |L1.200|
0000c8  00000328          DCD      ||.bss$2|| + 808
                  |L1.204|
0000cc  000001e4          DCD      ||.constdata$1|| + 484
                  |L1.208|
0000d0  6f6c420a          DCB      "\nBlo"
0000d4  54206b63          DCB      "ck T"
0000d8  6e452058          DCB      "X En"
0000dc  2e646564          DCB      "ded."
0000e0  000a2e2e          DCB      "..\n\0"
                          ENDP

                  Cam_IICInt PROC
;;;170    void __irq Cam_IICInt(void)
;;;171    {
0000e4  e92d503f          STMFD    sp!,{r0-r5,r12,lr}
;;;172    	U32 iicSt,i;
;;;173    
;;;174    	ClearPending(BIT_IIC);
0000e8  e3a00680          MOV      r0,#0x8000000
0000ec  e3a0144a          MOV      r1,#0x4a000000
0000f0  e5810000          STR      r0,[r1,#0]
0000f4  e3a00680          MOV      r0,#0x8000000
0000f8  e3a0144a          MOV      r1,#0x4a000000
0000fc  e5810010          STR      r0,[r1,#0x10]
000100  e3a0044a          MOV      r0,#0x4a000000
000104  e5900010          LDR      r0,[r0,#0x10]
;;;175    	iicSt   = rIICSTAT; 
000108  e3a00454          MOV      r0,#0x54000000
00010c  e5900004          LDR      r0,[r0,#4]
000110  e1a05000          MOV      r5,r0
;;;176    	rINTMSK |= BIT_IIC;
000114  e3a0044a          MOV      r0,#0x4a000000
000118  e5900008          LDR      r0,[r0,#8]
00011c  e3800680          ORR      r0,r0,#0x8000000
000120  e3a0144a          MOV      r1,#0x4a000000
000124  e5810008          STR      r0,[r1,#8]
;;;177    
;;;178    	if(iicSt & 0x8){}           //When bus arbitration is failed.
000128  e1a00000          NOP      
;;;179    	if(iicSt & 0x4){}           //When a slave address is matched with IICADD
00012c  e1a00000          NOP      
;;;180    	if(iicSt & 0x2){}           //When a slave address is 0000000b
000130  e1a00000          NOP      
;;;181    	if(iicSt & 0x1){}           //When ACK isn't received
000134  e1a00000          NOP      
;;;182    
;;;183    	switch(_CAMiicMode) {
000138  e51f0084          LDR      r0,|L1.188|
00013c  e5900000          LDR      r0,[r0,#0]  ; _CAMiicMode
000140  e3500001          CMP      r0,#1
000144  0a000039          BEQ      |L1.560|
000148  e3500003          CMP      r0,#3
00014c  0a000002          BEQ      |L1.348|
000150  e3500004          CMP      r0,#4
000154  1a000083          BNE      |L1.872|
000158  ea00005b          B        |L1.716|
;;;184    		case CAMRDDATA:
;;;185    			if((_CAMiicDataCount--)==0) {
                  |L1.348|
00015c  e51f009c          LDR      r0,|L1.200|
000160  e5900000          LDR      r0,[r0,#0]  ; _CAMiicDataCount
000164  e2401001          SUB      r1,r0,#1
000168  e51f00a8          LDR      r0,|L1.200|
00016c  e5902000          LDR      r2,[r0,#0]  ; _CAMiicDataCount
000170  e5801000          STR      r1,[r0,#0]  ; _CAMiicDataCount
000174  e3520000          CMP      r2,#0
000178  1a000013          BNE      |L1.460|
;;;186    				_CAMiicData[_CAMiicPt++] = rIICDS;
00017c  e3a00454          MOV      r0,#0x54000000
000180  e590100c          LDR      r1,[r0,#0xc]
000184  e51f00cc          LDR      r0,|L1.192|
000188  e5900000          LDR      r0,[r0,#0]  ; _CAMiicPt
00018c  e2802001          ADD      r2,r0,#1
000190  e51f30d8          LDR      r3,|L1.192|
000194  e5832000          STR      r2,[r3,#0]  ; _CAMiicPt
000198  e51f20dc          LDR      r2,|L1.196|
00019c  e7c21000          STRB     r1,[r2,r0]
;;;187                
;;;188    				rIICSTAT = 0x90;      //Stop MasRx condition 
0001a0  e3a00090          MOV      r0,#0x90
0001a4  e3a01454          MOV      r1,#0x54000000
0001a8  e5810004          STR      r0,[r1,#4]
;;;189    				rIICCON  &= ~(1<<4);      //Resumes IIC operation.
0001ac  e3a00454          MOV      r0,#0x54000000
0001b0  e5900000          LDR      r0,[r0,#0]
0001b4  e3c00010          BIC      r0,r0,#0x10
0001b8  e3a01454          MOV      r1,#0x54000000
0001bc  e5810000          STR      r0,[r1,#0]
;;;190    				Delay(1);                 //Wait until stop condtion is in effect., Too long time...  # need the time 2442:Delay(1), 24A0: Delay(2)
0001c0  e3a00001          MOV      r0,#1
0001c4  ebfffffe          BL       Delay
;;;191    								//The pending bit will not be set after issuing stop condition.
;;;192    				break;    
0001c8  ea000067          B        |L1.876|
;;;193    			}      
;;;194    			_CAMiicData[_CAMiicPt++] = rIICDS;     //The last data has to be read with no ack.
                  |L1.460|
0001cc  e3a00454          MOV      r0,#0x54000000
0001d0  e590100c          LDR      r1,[r0,#0xc]
0001d4  e51f011c          LDR      r0,|L1.192|
0001d8  e5900000          LDR      r0,[r0,#0]  ; _CAMiicPt
0001dc  e2802001          ADD      r2,r0,#1
0001e0  e51f3128          LDR      r3,|L1.192|
0001e4  e5832000          STR      r2,[r3,#0]  ; _CAMiicPt
0001e8  e51f212c          LDR      r2,|L1.196|
0001ec  e7c21000          STRB     r1,[r2,r0]
;;;195    
;;;196    			if((_CAMiicDataCount)==0)
0001f0  e51f0130          LDR      r0,|L1.200|
0001f4  e5900000          LDR      r0,[r0,#0]  ; _CAMiicDataCount
0001f8  e3500000          CMP      r0,#0
0001fc  1a000005          BNE      |L1.536|
;;;197    				rIICCON &= ~((1<<7)|(1<<4));      //Resumes IIC operation with NOACK in case of S5X532 Cameara  
000200  e3a00454          MOV      r0,#0x54000000
000204  e5900000          LDR      r0,[r0,#0]
000208  e3c00090          BIC      r0,r0,#0x90
00020c  e3a01454          MOV      r1,#0x54000000
000210  e5810000          STR      r0,[r1,#0]
000214  ea000004          B        |L1.556|
;;;198    //				rIICCON = 0x6f;			//Resumes IIC operation with NOACK in case of S5X532 Cameara	
;;;199    			else 
;;;200    				rIICCON &= ~(1<<4);      //Resumes IIC operation with ACK
                  |L1.536|
000218  e3a00454          MOV      r0,#0x54000000
00021c  e5900000          LDR      r0,[r0,#0]
000220  e3c00010          BIC      r0,r0,#0x10
000224  e3a01454          MOV      r1,#0x54000000
000228  e5810000          STR      r0,[r1,#0]
;;;201    			break;
                  |L1.556|
00022c  ea00004e          B        |L1.876|
;;;202    		case CAMWRDATA:
;;;203    			if((_CAMiicDataCount--)==0) {
                  |L1.560|
000230  e51f0170          LDR      r0,|L1.200|
000234  e5900000          LDR      r0,[r0,#0]  ; _CAMiicDataCount
000238  e2401001          SUB      r1,r0,#1
00023c  e51f017c          LDR      r0,|L1.200|
000240  e5902000          LDR      r2,[r0,#0]  ; _CAMiicDataCount
000244  e5801000          STR      r1,[r0,#0]  ; _CAMiicDataCount
000248  e3520000          CMP      r2,#0
00024c  1a00000a          BNE      |L1.636|
;;;204    				rIICSTAT = 0xd0;                //stop MasTx condition 
000250  e3a000d0          MOV      r0,#0xd0
000254  e3a01454          MOV      r1,#0x54000000
000258  e5810004          STR      r0,[r1,#4]
;;;205    				rIICCON  &= ~(1<<4);                //resumes IIC operation.
00025c  e3a00454          MOV      r0,#0x54000000
000260  e5900000          LDR      r0,[r0,#0]
000264  e3c00010          BIC      r0,r0,#0x10
000268  e3a01454          MOV      r1,#0x54000000
00026c  e5810000          STR      r0,[r1,#0]
;;;206    				Delay(1);                       //wait until stop condtion is in effect. # need the time 2442:Delay(1), 24A0: Delay(2)
000270  e3a00001          MOV      r0,#1
000274  ebfffffe          BL       Delay
;;;207    					//The pending bit will not be set after issuing stop condition.
;;;208    				break;    
000278  ea00003b          B        |L1.876|
;;;209    			}
;;;210    			rIICDS = _CAMiicData[_CAMiicPt++];        //_iicData[0] has dummy.
                  |L1.636|
00027c  e51f01c4          LDR      r0,|L1.192|
000280  e5900000          LDR      r0,[r0,#0]  ; _CAMiicPt
000284  e2801001          ADD      r1,r0,#1
000288  e51f21d0          LDR      r2,|L1.192|
00028c  e5821000          STR      r1,[r2,#0]  ; _CAMiicPt
000290  e51f11d4          LDR      r1,|L1.196|
000294  e7d10000          LDRB     r0,[r1,r0]
000298  e3a01454          MOV      r1,#0x54000000
00029c  e581000c          STR      r0,[r1,#0xc]
;;;211    			for(i=0;i<10;i++);                  //for setup time until rising edge of IICSCL
0002a0  e3a04000          MOV      r4,#0
                  |L1.676|
0002a4  e354000a          CMP      r4,#0xa
0002a8  2a000001          BCS      |L1.692|
0002ac  e2844001          ADD      r4,r4,#1
0002b0  eafffffb          B        |L1.676|
;;;212    				rIICCON &= ~(1<<4);                     //resumes IIC operation.
                  |L1.692|
0002b4  e3a00454          MOV      r0,#0x54000000
0002b8  e5900000          LDR      r0,[r0,#0]
0002bc  e3c00010          BIC      r0,r0,#0x10
0002c0  e3a01454          MOV      r1,#0x54000000
0002c4  e5810000          STR      r0,[r1,#0]
;;;213    			break;
0002c8  ea000027          B        |L1.876|
;;;214    		case CAMSETRDADDR: //Uart_Printf("[S%d]",_iicDataCount);
;;;215    			if((_CAMiicDataCount--)==0) {
                  |L1.716|
0002cc  e51f020c          LDR      r0,|L1.200|
0002d0  e5900000          LDR      r0,[r0,#0]  ; _CAMiicDataCount
0002d4  e2401001          SUB      r1,r0,#1
0002d8  e51f0218          LDR      r0,|L1.200|

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -