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

📄 sys.txt

📁 STM32+ov7670
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; generated by ARM C/C++ Compiler, 4.1 [Build 481]
; commandline ArmCC [--debug -c --asm --interleave -o.\OBJ\sys.o --depend=.\OBJ\sys.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\sys.crf SYSTEM\sys\sys.c]
                          THUMB

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

                  MY_NVIC_SetVectorTable PROC
;;;15     //091207
;;;16     void MY_NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset)	 
000000  4aab              LDR      r2,|L1.688|
;;;17     { 
;;;18       	//检查参数合法性
;;;19     	assert_param(IS_NVIC_VECTTAB(NVIC_VectTab));
;;;20     	assert_param(IS_NVIC_OFFSET(Offset));  	 
;;;21     	SCB->VTOR = NVIC_VectTab|(Offset & (u32)0x1FFFFF80);//设置NVIC的向量表偏移寄存器
000002  400a              ANDS     r2,r2,r1
000004  4302              ORRS     r2,r2,r0
000006  4bab              LDR      r3,|L1.692|
000008  601a              STR      r2,[r3,#0]
;;;22     	//用于标识向量表是在CODE区还是在RAM区
;;;23     }
00000a  4770              BX       lr
;;;24     //设置NVIC分组
                          ENDP

                  MY_NVIC_PriorityGroupConfig PROC
;;;27     //091209
;;;28     void MY_NVIC_PriorityGroupConfig(u8 NVIC_Group)	 
00000c  4601              MOV      r1,r0
;;;29     { 
;;;30     	u32 temp,temp1;	  
;;;31     	temp1=(~NVIC_Group)&0x07;//取后三位
00000e  2307              MOVS     r3,#7
000010  ea230201          BIC      r2,r3,r1
;;;32     	temp1<<=8;
000014  0212              LSLS     r2,r2,#8
;;;33     	temp=SCB->AIRCR;  //读取先前的设置
000016  4ba8              LDR      r3,|L1.696|
000018  6818              LDR      r0,[r3,#0]
;;;34     	temp&=0X0000F8FF; //清空先前分组
00001a  f64f03ff          MOV      r3,#0xf8ff
00001e  ea000003          AND      r0,r0,r3
;;;35     	temp|=0X05FA0000; //写入钥匙
000022  4ba6              LDR      r3,|L1.700|
000024  ea400003          ORR      r0,r0,r3
;;;36     	temp|=temp1;	   
000028  ea400002          ORR      r0,r0,r2
;;;37     	SCB->AIRCR=temp;  //设置分组	    	  				   
00002c  f04f23e0          MOV      r3,#0xe000e000
000030  f8c30d0c          STR      r0,[r3,#0xd0c]
;;;38     }
000034  4770              BX       lr
;;;39     //设置NVIC 
                          ENDP

                  MY_NVIC_Init PROC
;;;53     //100329
;;;54     void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)	 
000036  e92d47f0          PUSH     {r4-r10,lr}
;;;55     { 
00003a  4680              MOV      r8,r0
00003c  4689              MOV      r9,r1
00003e  4614              MOV      r4,r2
000040  461d              MOV      r5,r3
;;;56     	u32 temp;	
;;;57     	u8 IPRADDR=NVIC_Channel/4;  //每组只能存4个,得到组地址 
000042  4620              MOV      r0,r4
000044  17e1              ASRS     r1,r4,#31
000046  eb047191          ADD      r1,r4,r1,LSR #30
00004a  ea4f0aa1          ASR      r10,r1,#2
;;;58     	u8 IPROFFSET=NVIC_Channel%4;//在组内的偏移
00004e  17e1              ASRS     r1,r4,#31
000050  eb047191          ADD      r1,r4,r1,LSR #30
000054  1089              ASRS     r1,r1,#2
000056  eba40181          SUB      r1,r4,r1,LSL #2
00005a  b2cf              UXTB     r7,r1
;;;59     	IPROFFSET=IPROFFSET*8+4;    //得到偏移的确切位置
00005c  2004              MOVS     r0,#4
00005e  eb0000c7          ADD      r0,r0,r7,LSL #3
000062  b2c7              UXTB     r7,r0
;;;60     	MY_NVIC_PriorityGroupConfig(NVIC_Group);//设置分组
000064  4628              MOV      r0,r5
000066  f7fffffe          BL       MY_NVIC_PriorityGroupConfig
;;;61     	temp=NVIC_PreemptionPriority<<(4-NVIC_Group);	  
00006a  f1c50004          RSB      r0,r5,#4
00006e  fa08f600          LSL      r6,r8,r0
;;;62     	temp|=NVIC_SubPriority&(0x0f>>NVIC_Group);
000072  200f              MOVS     r0,#0xf
000074  4128              ASRS     r0,r0,r5
000076  ea000009          AND      r0,r0,r9
00007a  4306              ORRS     r6,r6,r0
;;;63     	temp&=0xf;//取低四位
00007c  f006060f          AND      r6,r6,#0xf
;;;64     
;;;65     	if(NVIC_Channel<32)NVIC->ISER[0]|=1<<NVIC_Channel;//使能中断位(要清除的话,相反操作就OK)
000080  2c20              CMP      r4,#0x20
000082  da0c              BGE      |L1.158|
000084  488e              LDR      r0,|L1.704|
000086  6800              LDR      r0,[r0,#0]
000088  f04f0101          MOV      r1,#1
00008c  fa01f104          LSL      r1,r1,r4
000090  ea400001          ORR      r0,r0,r1
000094  f04f21e0          MOV      r1,#0xe000e000
000098  f8c10100          STR      r0,[r1,#0x100]
00009c  e00d              B        |L1.186|
                  |L1.158|
;;;66     	else NVIC->ISER[1]|=1<<(NVIC_Channel-32);    
00009e  4889              LDR      r0,|L1.708|
0000a0  6800              LDR      r0,[r0,#0]
0000a2  f1a40120          SUB      r1,r4,#0x20
0000a6  f04f0201          MOV      r2,#1
0000aa  fa02f201          LSL      r2,r2,r1
0000ae  ea400002          ORR      r0,r0,r2
0000b2  f04f21e0          MOV      r1,#0xe000e000
0000b6  f8c10104          STR      r0,[r1,#0x104]
                  |L1.186|
;;;67     	NVIC->IPR[IPRADDR]|=temp<<IPROFFSET;//设置响应优先级和抢断优先级   	    	  				   
0000ba  4883              LDR      r0,|L1.712|
0000bc  f850002a          LDR      r0,[r0,r10,LSL #2]
0000c0  fa06f107          LSL      r1,r6,r7
0000c4  4308              ORRS     r0,r0,r1
0000c6  4980              LDR      r1,|L1.712|
0000c8  f841002a          STR      r0,[r1,r10,LSL #2]
;;;68     }
0000cc  e8bd87f0          POP      {r4-r10,pc}
;;;69     
                          ENDP

                  Ex_NVIC_Config PROC
;;;75     //待测试...
;;;76     void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM) 
0000d0  b570              PUSH     {r4-r6,lr}
;;;77     {
0000d2  4603              MOV      r3,r0
;;;78     	u8 EXTADDR;
;;;79     	u8 EXTOFFSET;
;;;80     	EXTADDR=BITx/4;//得到中断寄存器组的编号
0000d4  4608              MOV      r0,r1
0000d6  17ce              ASRS     r6,r1,#31
0000d8  eb017696          ADD      r6,r1,r6,LSR #30
0000dc  10b4              ASRS     r4,r6,#2
;;;81     	EXTOFFSET=(BITx%4)*4;
0000de  17ce              ASRS     r6,r1,#31
0000e0  eb017696          ADD      r6,r1,r6,LSR #30
0000e4  10b6              ASRS     r6,r6,#2
0000e6  eba10686          SUB      r6,r1,r6,LSL #2
0000ea  06b6              LSLS     r6,r6,#26
0000ec  0e35              LSRS     r5,r6,#24
;;;82     
;;;83     	RCC->APB2ENR|=0x01;//使能io复用时钟
0000ee  4877              LDR      r0,|L1.716|
0000f0  6980              LDR      r0,[r0,#0x18]
0000f2  f0400001          ORR      r0,r0,#1
0000f6  4e75              LDR      r6,|L1.716|
0000f8  61b0              STR      r0,[r6,#0x18]
;;;84     	AFIO->EXTICR[EXTADDR]|=GPIOx<<EXTOFFSET;//EXTI.BITx映射到GPIOx.BITx
0000fa  ea4f30b6          ROR      r0,r6,#14
0000fe  f8500024          LDR      r0,[r0,r4,LSL #2]
000102  fa03f605          LSL      r6,r3,r5
000106  4306              ORRS     r6,r6,r0
000108  4871              LDR      r0,|L1.720|
00010a  f8406024          STR      r6,[r0,r4,LSL #2]
;;;85     	
;;;86     	//自动设置
;;;87     	EXTI->IMR|=1<<BITx;//  开启line BITx上的中断
00010e  4871              LDR      r0,|L1.724|
000110  6800              LDR      r0,[r0,#0]
000112  f04f0601          MOV      r6,#1
000116  fa06f601          LSL      r6,r6,r1
00011a  ea400006          ORR      r0,r0,r6
00011e  4e6e              LDR      r6,|L1.728|
000120  f8c60400          STR      r0,[r6,#0x400]
;;;88     	//EXTI->EMR|=1<<BITx;//不屏蔽line BITx上的事件 (如果不屏蔽这句,在硬件上是可以的,但是在软件仿真的时候无法进入中断!)
;;;89      	if(TRIM&0x01)EXTI->FTSR|=1<<BITx;//line BITx上事件下降沿触发
000124  f0120f01          TST      r2,#1
000128  d00a              BEQ      |L1.320|
00012a  486c              LDR      r0,|L1.732|
00012c  6800              LDR      r0,[r0,#0]
00012e  f04f0601          MOV      r6,#1
000132  fa06f601          LSL      r6,r6,r1
000136  ea400006          ORR      r0,r0,r6
00013a  4e67              LDR      r6,|L1.728|
00013c  f8c6040c          STR      r0,[r6,#0x40c]
                  |L1.320|
;;;90     	if(TRIM&0x02)EXTI->RTSR|=1<<BITx;//line BITx上事件上升降沿触发
000140  f0120f02          TST      r2,#2
000144  d00a              BEQ      |L1.348|
000146  4866              LDR      r0,|L1.736|
000148  6800              LDR      r0,[r0,#0]
00014a  f04f0601          MOV      r6,#1
00014e  fa06f601          LSL      r6,r6,r1
000152  ea400006          ORR      r0,r0,r6
000156  4e60              LDR      r6,|L1.728|
000158  f8c60408          STR      r0,[r6,#0x408]
                  |L1.348|
;;;91     } 
00015c  bd70              POP      {r4-r6,pc}
;;;92     
                          ENDP

                  MYRCC_DeInit PROC
;;;97     //091209
;;;98     void MYRCC_DeInit(void)
00015e  b500              PUSH     {lr}
;;;99     {										  					   
;;;100    	RCC->APB1RSTR = 0x00000000;//复位结束			 
000160  2000              MOVS     r0,#0
000162  495a              LDR      r1,|L1.716|
000164  6108              STR      r0,[r1,#0x10]
;;;101    	RCC->APB2RSTR = 0x00000000; 
000166  60c8              STR      r0,[r1,#0xc]
;;;102    	  
;;;103      	RCC->AHBENR = 0x00000014;  //睡眠模式闪存和SRAM时钟使能.其他关闭.	  
000168  2014              MOVS     r0,#0x14
00016a  6148              STR      r0,[r1,#0x14]
;;;104      	RCC->APB2ENR = 0x00000000; //外设时钟关闭.			   
00016c  2000              MOVS     r0,#0
00016e  6188              STR      r0,[r1,#0x18]
;;;105      	RCC->APB1ENR = 0x00000000;   
000170  61c8              STR      r0,[r1,#0x1c]
;;;106    	RCC->CR |= 0x00000001;     //使能内部高速时钟HSION	 															 
000172  4608              MOV      r0,r1
000174  6800              LDR      r0,[r0,#0]
000176  f0400001          ORR      r0,r0,#1
00017a  6008              STR      r0,[r1,#0]
;;;107    	RCC->CFGR &= 0xF8FF0000;   //复位SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0]					 
00017c  4608              MOV      r0,r1
00017e  6840              LDR      r0,[r0,#4]
000180  4958              LDR      r1,|L1.740|
000182  4008              ANDS     r0,r0,r1
000184  4951              LDR      r1,|L1.716|
000186  6048              STR      r0,[r1,#4]
;;;108    	RCC->CR &= 0xFEF6FFFF;     //复位HSEON,CSSON,PLLON
000188  4608              MOV      r0,r1
00018a  6800              LDR      r0,[r0,#0]
00018c  4956              LDR      r1,|L1.744|
00018e  4008              ANDS     r0,r0,r1
000190  494e              LDR      r1,|L1.716|
000192  6008              STR      r0,[r1,#0]
;;;109    	RCC->CR &= 0xFFFBFFFF;     //复位HSEBYP	   	  
000194  4608              MOV      r0,r1
000196  6800              LDR      r0,[r0,#0]
000198  f4202080          BIC      r0,r0,#0x40000
00019c  6008              STR      r0,[r1,#0]
;;;110    	RCC->CFGR &= 0xFF80FFFF;   //复位PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE 

⌨️ 快捷键说明

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