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

📄 usart.txt

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

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

                  _sys_exit PROC
;;;28     //定义_sys_exit()以避免使用半主机模式    
;;;29     _sys_exit(int x) 
000000  4601              MOV      r1,r0
;;;30     { 
;;;31     	x = x; 
000002  bf00              NOP      
;;;32     } 
000004  4770              BX       lr
;;;33     //重定义fputc函数 
                          ENDP

                  fputc PROC
;;;34     int fputc(int ch, FILE *f)
000006  b2c2              UXTB     r2,r0
;;;35     {      
;;;36     	USART1->DR = (u8) ch;      
000008  4b3e              LDR      r3,|L1.260|
00000a  801a              STRH     r2,[r3,#0]
;;;37     	while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
00000c  bf00              NOP      
                  |L1.14|
00000e  4a3e              LDR      r2,|L1.264|
000010  8812              LDRH     r2,[r2,#0]
000012  f0120f40          TST      r2,#0x40
000016  d0fa              BEQ      |L1.14|
;;;38     	return ch;
;;;39     }
000018  4770              BX       lr
;;;40     #endif 
                          ENDP

                  USART1_IRQHandler PROC
;;;53       
;;;54     void USART1_IRQHandler(void)
00001a  b510              PUSH     {r4,lr}
;;;55     {
;;;56     	u8 res;	    
;;;57     	if(USART1->SR&(1<<5))//接收到数据
00001c  483a              LDR      r0,|L1.264|
00001e  8800              LDRH     r0,[r0,#0]
000020  f0100f20          TST      r0,#0x20
000024  d005              BEQ      |L1.50|
;;;58     	{	 
;;;59     		res=USART1->DR; 
000026  4837              LDR      r0,|L1.260|
000028  8800              LDRH     r0,[r0,#0]
00002a  b2c4              UXTB     r4,r0
;;;60     		/*if((USART_RX_STA&0x80)==0)//接收未完成
;;;61     		{
;;;62     			if(USART_RX_STA&0x40)//接收到了0x0d
;;;63     			{
;;;64     				if(res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
;;;65     				else USART_RX_STA|=0x80;	//接收完成了 
;;;66     			}else //还没收到0X0D
;;;67     			{	
;;;68     				if(res==0x0d)USART_RX_STA|=0x40;
;;;69     				else
;;;70     				{
;;;71     					USART_RX_BUF[USART_RX_STA&0X3F]=res;
;;;72     					USART_RX_STA++;
;;;73     					if(USART_RX_STA>63)USART_RX_STA=0;//接收数据错误,重新开始接收	  
;;;74     				}		 
;;;75     			}
;;;76     		}*/ 	
;;;77     		UART0_RxIsrHandler(res);								     
00002c  4620              MOV      r0,r4
00002e  f7fffffe          BL       UART0_RxIsrHandler
                  |L1.50|
;;;78     	}  											 
;;;79     } 
000032  bd10              POP      {r4,pc}
;;;80     #endif										 
                          ENDP

                  uart_init PROC
;;;85     //091209
;;;86     void uart_init(u32 pclk2,u32 bound)
000034  e92d5ff0          PUSH     {r4-r12,lr}
;;;87     {  	 
000038  4605              MOV      r5,r0
00003a  460e              MOV      r6,r1
;;;88     	float temp;
;;;89     	u16 mantissa;
;;;90     	u16 fraction;	   
;;;91     	temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
00003c  0130              LSLS     r0,r6,#4
00003e  f7fffffe          BL       __aeabi_ui2f
000042  4681              MOV      r9,r0
000044  4931              LDR      r1,|L1.268|
000046  fb05f001          MUL      r0,r5,r1
00004a  f7fffffe          BL       __aeabi_ui2f
00004e  4682              MOV      r10,r0
000050  4649              MOV      r1,r9
000052  f7fffffe          BL       __aeabi_fdiv
000056  4607              MOV      r7,r0
;;;92     	mantissa=temp;				 //得到整数部分
000058  4638              MOV      r0,r7
00005a  f7fffffe          BL       __aeabi_f2uiz
00005e  b284              UXTH     r4,r0
;;;93     	fraction=(temp-mantissa)*16; //得到小数部分	 
000060  4620              MOV      r0,r4
000062  f7fffffe          BL       __aeabi_ui2f
000066  4683              MOV      r11,r0
000068  4639              MOV      r1,r7
00006a  f7fffffe          BL       __aeabi_frsub
00006e  4682              MOV      r10,r0
000070  f04f4183          MOV      r1,#0x41800000
000074  f7fffffe          BL       __aeabi_fmul
000078  4681              MOV      r9,r0
00007a  f7fffffe          BL       __aeabi_f2uiz
00007e  4680              MOV      r8,r0
;;;94         mantissa<<=4;
000080  0124              LSLS     r4,r4,#4
;;;95     	mantissa+=fraction; 
000082  eb040008          ADD      r0,r4,r8
000086  b284              UXTH     r4,r0
;;;96     	RCC->APB2ENR|=1<<2;   //使能PORTA口时钟  
000088  4821              LDR      r0,|L1.272|
00008a  6980              LDR      r0,[r0,#0x18]
00008c  f0400004          ORR      r0,r0,#4
000090  491f              LDR      r1,|L1.272|
000092  6188              STR      r0,[r1,#0x18]
;;;97     	RCC->APB2ENR|=1<<14;  //使能串口时钟 
000094  4608              MOV      r0,r1
000096  6980              LDR      r0,[r0,#0x18]
000098  f4404080          ORR      r0,r0,#0x4000
00009c  6188              STR      r0,[r1,#0x18]
;;;98     	GPIOA->CRH=0X444444B4;//IO状态设置
00009e  481d              LDR      r0,|L1.276|
0000a0  491d              LDR      r1,|L1.280|
0000a2  6008              STR      r0,[r1,#0]
;;;99     		  
;;;100    	RCC->APB2RSTR|=1<<14;   //复位串口1
0000a4  481a              LDR      r0,|L1.272|
0000a6  68c0              LDR      r0,[r0,#0xc]
0000a8  f4404080          ORR      r0,r0,#0x4000
0000ac  4918              LDR      r1,|L1.272|
0000ae  60c8              STR      r0,[r1,#0xc]
;;;101    	RCC->APB2RSTR&=~(1<<14);//停止复位	   	   
0000b0  4608              MOV      r0,r1
0000b2  68c0              LDR      r0,[r0,#0xc]
0000b4  f4204080          BIC      r0,r0,#0x4000
0000b8  60c8              STR      r0,[r1,#0xc]
;;;102    	//波特率设置
;;;103     	USART1->BRR=mantissa; // 波特率设置	 
0000ba  4818              LDR      r0,|L1.284|
0000bc  f8a04808          STRH     r4,[r0,#0x808]
;;;104    	USART1->CR1|=0X200C;  //1位停止,无校验位.
0000c0  4817              LDR      r0,|L1.288|
0000c2  8800              LDRH     r0,[r0,#0]
0000c4  f242010c          MOV      r1,#0x200c
0000c8  ea400001          ORR      r0,r0,r1
0000cc  4913              LDR      r1,|L1.284|
0000ce  f8a1080c          STRH     r0,[r1,#0x80c]
;;;105    #ifdef EN_USART1_RX		  //如果使能了接收
;;;106    	//使能接收中断
;;;107    	USART1->CR1|=1<<8;    //PE中断使能
0000d2  4608              MOV      r0,r1
0000d4  f8b0080c          LDRH     r0,[r0,#0x80c]
0000d8  f4407080          ORR      r0,r0,#0x100
0000dc  f8a1080c          STRH     r0,[r1,#0x80c]
;;;108    	USART1->CR1|=1<<5;    //接收缓冲区非空中断使能	    	
0000e0  4608              MOV      r0,r1
0000e2  f8b0080c          LDRH     r0,[r0,#0x80c]
0000e6  f0400020          ORR      r0,r0,#0x20
0000ea  f8a1080c          STRH     r0,[r1,#0x80c]
;;;109    	MY_NVIC_Init(3,3,USART1_IRQChannel,2);//组2,最低优先级 
0000ee  f04f0302          MOV      r3,#2
0000f2  f04f0225          MOV      r2,#0x25
0000f6  f04f0103          MOV      r1,#3
0000fa  4608              MOV      r0,r1
0000fc  f7fffffe          BL       MY_NVIC_Init
;;;110    #endif
;;;111    }
000100  e8bd9ff0          POP      {r4-r12,pc}
                          ENDP

                  |L1.260|
                          DCD      0x40013804
                  |L1.264|
                          DCD      0x40013800
                  |L1.268|
                          DCD      0x000f4240
                  |L1.272|
                          DCD      0x40021000
                  |L1.276|
                          DCD      0x444444b4
                  |L1.280|
                          DCD      0x40010804
                  |L1.284|
                          DCD      0x40013000
                  |L1.288|
                          DCD      0x4001380c

                          AREA ||.bss||, DATA, NOINIT, ALIGN=0

                  USART_RX_BUF
                          %        64

                          AREA ||.data||, DATA, ALIGN=2

                  USART_RX_STA
000000  00000000          DCB      0x00,0x00,0x00,0x00
                  __stdout
                          DCD      0x00000000

⌨️ 快捷键说明

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