📄 main.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 + -