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

📄 main.txt

📁 STM32+ov7670
💻 TXT
字号:
; generated by ARM C/C++ Compiler, 4.1 [Build 481]
; commandline ArmCC [--debug -c --asm --interleave -o.\OBJ\main.o --depend=.\OBJ\main.d --cpu=Cortex-M3 --apcs=interwork -O0 -I..\Demo -I.\HARDWARE\EXTI -I.\HARDWARE\KEY -I.\HARDWARE\LCD -I.\HARDWARE\LED -I.\HARDWARE\TIMER -I.\HARDWARE\WDG -I.\SYSTEM\delay -I.\SYSTEM\sys -I.\SYSTEM\usart -I.\USER -IC:\Keil\ARM\INC -IC:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\OBJ\main.crf USER\main.c]
                          THUMB

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  main PROC
;;;19     
;;;20     int main(void)
000000  b0f8              SUB      sp,sp,#0x1e0
;;;21     {		
;;;22     
;;;23     	u32 i = 0;
000002  2500              MOVS     r5,#0
;;;24     	u16 j = 0;
000004  2600              MOVS     r6,#0
;;;25     	u16 temp = 0;
000006  2700              MOVS     r7,#0
;;;26     	u16 data = 0;
000008  2400              MOVS     r4,#0
;;;27     	
;;;28     	u16 buffer[240] = {0};
00000a  f44f71f0          MOV      r1,#0x1e0
00000e  4668              MOV      r0,sp
000010  f7fffffe          BL       __aeabi_memclr4
;;;29     	
;;;30     	u16 t = 0;
000014  bf00              NOP      
;;;31     	Stm32_Clock_Init(9);//系统时钟设置
000016  2009              MOVS     r0,#9
000018  f7fffffe          BL       Stm32_Clock_Init
;;;32     	delay_init(72);		//延时初始化
00001c  2048              MOVS     r0,#0x48
00001e  f7fffffe          BL       delay_init
;;;33     	uart_init(72, 38400);
000022  f44f4116          MOV      r1,#0x9600
000026  2048              MOVS     r0,#0x48
000028  f7fffffe          BL       uart_init
;;;34     	//LED_Init();
;;;35     	
;;;36     	//Config2401();
;;;37     	//SetRxMode();
;;;38     	
;;;39     	
;;;40     	//LCD_Clear(1234) ;	
;;;41     	//LCD_LED_ON;	
;;;42     	
;;;43     	//OV7670_init();	
;;;44     	
;;;45     	FIFO_PortInit();
00002c  f7fffffe          BL       FIFO_PortInit
;;;46     	FIFO_WRST_L;						//写指针复位,开始往FIFO写入数据		
000030  486b              LDR      r0,|L1.480|
000032  6800              LDR      r0,[r0,#0]
000034  f4206000          BIC      r0,r0,#0x800
000038  496a              LDR      r1,|L1.484|
00003a  f8c1080c          STR      r0,[r1,#0x80c]
;;;47     	Delay_nUS(100);
00003e  f04f0064          MOV      r0,#0x64
000042  f7fffffe          BL       delay_us
;;;48     	FIFO_WRST_H;
000046  4867              LDR      r0,|L1.484|
000048  f8d0080c          LDR      r0,[r0,#0x80c]
00004c  f4406000          ORR      r0,r0,#0x800
000050  4964              LDR      r1,|L1.484|
000052  f8c1080c          STR      r0,[r1,#0x80c]
;;;49     	
;;;50     	FIFO_RRST_L;						//写指针复位,开始往FIFO写入数据		
000056  4608              MOV      r0,r1
000058  f8d0080c          LDR      r0,[r0,#0x80c]
00005c  f4205080          BIC      r0,r0,#0x1000
000060  495f              LDR      r1,|L1.480|
000062  6008              STR      r0,[r1,#0]
;;;51     	Delay_nUS(100);
000064  f04f0064          MOV      r0,#0x64
000068  f7fffffe          BL       delay_us
;;;52     	FIFO_RRST_H;
00006c  485d              LDR      r0,|L1.484|
00006e  f8d0080c          LDR      r0,[r0,#0x80c]
000072  f4405080          ORR      r0,r0,#0x1000
000076  495b              LDR      r1,|L1.484|
000078  f8c1080c          STR      r0,[r1,#0x80c]
;;;53     	
;;;54     	LCD_DriverInit();
00007c  f7fffffe          BL       LCD_DriverInit
;;;55     	LCD_Clear(1234) ;
000080  f24040d2          MOV      r0,#0x4d2
000084  f7fffffe          BL       LCD_Clear
;;;56     	
;;;57     	EXTIX_Init();	
000088  f7fffffe          BL       EXTIX_Init
;;;58     	while(1)
00008c  e003              B        |L1.150|
                  |L1.142|
;;;59     	{
;;;60     		if(OV7670_init())
00008e  f7fffffe          BL       OV7670_init
000092  b100              CBZ      r0,|L1.150|
;;;61     		{
;;;62     			break;
000094  e000              B        |L1.152|
                  |L1.150|
000096  e7fa              B        |L1.142|
                  |L1.152|
000098  bf00              NOP      
;;;63     		}
;;;64     	}
;;;65     	
;;;66     	while(0)
00009a  bf00              NOP      
00009c  bf00              NOP      
;;;67     	{
;;;68     		LCD_Fill(0, 0, 25, 80, 0x1234);
;;;69     		for(i = 0; i < 100; i ++)
;;;70     		{
;;;71     			LCD_DrawPoint(i, i, 0x5678);
;;;72     		}
;;;73     	}	
;;;74     	FIFO_OE_L;
00009e  4852              LDR      r0,|L1.488|
0000a0  6800              LDR      r0,[r0,#0]
0000a2  f0200002          BIC      r0,r0,#2
0000a6  494f              LDR      r1,|L1.484|
0000a8  f8c10c0c          STR      r0,[r1,#0xc0c]
;;;75     	while(1)
0000ac  e096              B        |L1.476|
                  |L1.174|
;;;76     	{
;;;77     		if(1)//
;;;78     		{	
;;;79     			
;;;80     			if(VsyncCnt == 2)
0000ae  484f              LDR      r0,|L1.492|
0000b0  7800              LDRB     r0,[r0,#0]  ; VsyncCnt
0000b2  2802              CMP      r0,#2
0000b4  d17e              BNE      |L1.436|
;;;81     			{
;;;82     											//0地址读数据,硬件已将OE和RE连在一起
;;;83     				LCD_SetWindow(0, 0, X_END, Y_END);
0000b6  f240133f          MOV      r3,#0x13f
0000ba  22ef              MOVS     r2,#0xef
0000bc  2100              MOVS     r1,#0
0000be  4608              MOV      r0,r1
0000c0  f7fffffe          BL       LCD_SetWindow
;;;84     				LCD_WriteGRAM_EN();
0000c4  f7fffffe          BL       LCD_WriteGRAM_EN
;;;85     				
;;;86     				t = 0;
0000c8  bf00              NOP      
;;;87     				for(i = 0; i < 240; i ++)	//QVGA格式,240行;每行320个点		
0000ca  2500              MOVS     r5,#0
0000cc  e039              B        |L1.322|
                  |L1.206|
;;;88     				{
;;;89     					for(j = 0; j < 320; j ++)
0000ce  2600              MOVS     r6,#0
0000d0  e033              B        |L1.314|
                  |L1.210|
;;;90     					{
;;;91     						FIFO_RCLK_L;
0000d2  4845              LDR      r0,|L1.488|
0000d4  6800              LDR      r0,[r0,#0]
0000d6  f0200001          BIC      r0,r0,#1
0000da  4942              LDR      r1,|L1.484|
0000dc  f8c10c0c          STR      r0,[r1,#0xc0c]
;;;92     						__nop();
0000e0  bf00              NOP      
;;;93     						__nop();
0000e2  bf00              NOP      
;;;94     						FIFO_RCLK_H;
0000e4  4608              MOV      r0,r1
0000e6  f8d00c0c          LDR      r0,[r0,#0xc0c]
0000ea  f0400001          ORR      r0,r0,#1
0000ee  f8c10c0c          STR      r0,[r1,#0xc0c]
;;;95     						__nop();
0000f2  bf00              NOP      
;;;96     						__nop();
0000f4  bf00              NOP      
;;;97     						data = FIFO_DATA_PIN;
0000f6  483e              LDR      r0,|L1.496|
0000f8  6800              LDR      r0,[r0,#0]
0000fa  b2c4              UXTB     r4,r0
;;;98     						data <<= 8;			//先读高位							
0000fc  ea4f2404          LSL      r4,r4,#8
;;;99     
;;;100    						FIFO_RCLK_L;
000100  4608              MOV      r0,r1
000102  f8d00c0c          LDR      r0,[r0,#0xc0c]
000106  f0200001          BIC      r0,r0,#1
00010a  f8c10c0c          STR      r0,[r1,#0xc0c]
;;;101    						__nop();
00010e  bf00              NOP      
;;;102    						__nop();
000110  bf00              NOP      
;;;103    						FIFO_RCLK_H;
000112  4608              MOV      r0,r1
000114  f8d00c0c          LDR      r0,[r0,#0xc0c]
000118  f0400001          ORR      r0,r0,#1
00011c  f8c10c0c          STR      r0,[r1,#0xc0c]
;;;104    						__nop();
000120  bf00              NOP      
;;;105    						__nop();
000122  bf00              NOP      
;;;106    						//Delay_nUS(1);
;;;107    						temp = FIFO_DATA_PIN;//再读低位							
000124  4608              MOV      r0,r1
000126  f8d00808          LDR      r0,[r0,#0x808]
00012a  b2c7              UXTB     r7,r0
;;;108    						
;;;109    						data |= temp ;
00012c  ea440407          ORR      r4,r4,r7
;;;110    						
;;;111    						LCD_DATA_OUT(data);	//显示读到的数据(RGB565)			
000130  4620              MOV      r0,r4
000132  f7fffffe          BL       LCD_DATA_OUT
000136  1c70              ADDS     r0,r6,#1              ;89
000138  b286              UXTH     r6,r0                 ;89
                  |L1.314|
00013a  f5b67fa0          CMP      r6,#0x140             ;89
00013e  dbc8              BLT      |L1.210|
000140  1c6d              ADDS     r5,r5,#1              ;87
                  |L1.322|
000142  2df0              CMP      r5,#0xf0              ;87
000144  d3c3              BCC      |L1.206|
;;;112    					}
;;;113    				}
;;;114    				LCD_WR_END();
000146  2001              MOVS     r0,#1
000148  492a              LDR      r1,|L1.500|
00014a  6008              STR      r0,[r1,#0]
;;;115    				
;;;116    				FIFO_RRST_L;				//读指针复位						
00014c  4825              LDR      r0,|L1.484|
00014e  f8d0080c          LDR      r0,[r0,#0x80c]
000152  f4205080          BIC      r0,r0,#0x1000
000156  4923              LDR      r1,|L1.484|
000158  f8c1080c          STR      r0,[r1,#0x80c]
;;;117    				FIFO_RCLK_L;				//至少需要一个时钟周期的跳变才能复位
00015c  4608              MOV      r0,r1
00015e  f8d00c0c          LDR      r0,[r0,#0xc0c]
000162  f0200001          BIC      r0,r0,#1
000166  f8c10c0c          STR      r0,[r1,#0xc0c]
;;;118    				FIFO_RCLK_H;
00016a  4608              MOV      r0,r1
00016c  f8d00c0c          LDR      r0,[r0,#0xc0c]
000170  f0400001          ORR      r0,r0,#1
000174  f8c10c0c          STR      r0,[r1,#0xc0c]
;;;119    				FIFO_RCLK_L;				//至少需要一个时钟周期的跳变才能复位
000178  4608              MOV      r0,r1
00017a  f8d00c0c          LDR      r0,[r0,#0xc0c]
00017e  f0200001          BIC      r0,r0,#1
000182  f8c10c0c          STR      r0,[r1,#0xc0c]
;;;120    				FIFO_RCLK_H;
000186  4608              MOV      r0,r1
000188  f8d00c0c          LDR      r0,[r0,#0xc0c]
00018c  f0400001          ORR      r0,r0,#1
000190  f8c10c0c          STR      r0,[r1,#0xc0c]
;;;121    				FIFO_RRST_H;
000194  4608              MOV      r0,r1
000196  f8d0080c          LDR      r0,[r0,#0x80c]
00019a  f4405080          ORR      r0,r0,#0x1000
00019e  f8c1080c          STR      r0,[r1,#0x80c]
;;;122    				
;;;123    				FIFO_WEN_L;					//按照手册上说明,复位时WEN要置高,但 
0001a2  4608              MOV      r0,r1
0001a4  f8d0080c          LDR      r0,[r0,#0x80c]
0001a8  f4207080          BIC      r0,r0,#0x100
0001ac  f8c1080c          STR      r0,[r1,#0x80c]
;;;124    				FIFO_WRST_L;				//MCU的WEN和HREF是做与非逻辑后再输入								
0001b0  4608              MOV      r0,r1
0001b2  e000              B        |L1.438|
                  |L1.436|
0001b4  e012              B        |L1.476|
                  |L1.438|
0001b6  f8d0080c          LDR      r0,[r0,#0x80c]
0001ba  f4206000          BIC      r0,r0,#0x800
0001be  f8c1080c          STR      r0,[r1,#0x80c]
;;;125    				__nop();					//到AL422B的,所以MCU的WEN置低则输出到422的WEN一定为低
0001c2  bf00              NOP      
;;;126    				__nop();					//写指针复位需要一定的延时			
0001c4  bf00              NOP      
;;;127    				FIFO_WRST_H;
0001c6  4608              MOV      r0,r1
0001c8  f8d0080c          LDR      r0,[r0,#0x80c]
0001cc  f4406000          ORR      r0,r0,#0x800
0001d0  4903              LDR      r1,|L1.480|
0001d2  6008              STR      r0,[r1,#0]
;;;128    				VsyncCnt = 0;				//开始下一帧数据采集				
0001d4  f04f0000          MOV      r0,#0
0001d8  4904              LDR      r1,|L1.492|
0001da  7008              STRB     r0,[r1,#0]
                  |L1.476|
0001dc  e767              B        |L1.174|
;;;129    			}
;;;130    		}
;;;131    	}  
;;;132    }
;;;133    
                          ENDP

0001de  0000              DCW      0x0000
                  |L1.480|
                          DCD      0x4001080c
                  |L1.484|
                          DCD      0x40010000
                  |L1.488|
                          DCD      0x40010c0c
                  |L1.492|
                          DCD      VsyncCnt
                  |L1.496|
                          DCD      0x40010808
                  |L1.500|
                          DCD      0x422201a0

                  __ARM_use_no_argv EQU 0

⌨️ 快捷键说明

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