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

📄 myusart.txt

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

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

                  Test_PORT_INIT PROC
;;;10     
;;;11     void Test_PORT_INIT(void)
000000  4770              BX       lr
;;;12     {
;;;13     	//DDRC=0x0f;
;;;14     	//PORTC=0x0f;
;;;15     }
;;;16     void UART_Device_INIT(void)
                          ENDP

                  UART_Device_INIT PROC
000002  4770              BX       lr
;;;17     {								
;;;18     /*	CLI();
;;;19     	DDRE &= ~BIT(PE0);
;;;20     	PORTE |= BIT(PE0);
;;;21     	
;;;22     	DDRE |= BIT(PE1);
;;;23     	PORTE |= BIT(PE1);
;;;24     	
;;;25     	UCSR0B = 0x00; //disable while setting baud rate
;;;26      UCSR0A = 0x00;
;;;27      UCSR0C = 0x06;
;;;28      UBRR0L = 0x17; //set baud rate lo
;;;29      UBRR0H = 0x00; //set baud rate hi
;;;30      UCSR0B = 0x98;
;;;31     	SEI();*/
;;;32     }
;;;33     //中断入口								
                          ENDP

                  UART0_RX_ISR PROC
;;;34     //#pragma interrupt_handler UART0_RX_ISR:iv_USART0_RXC
;;;35     void UART0_RX_ISR(void)
000004  4770              BX       lr
;;;36     {
;;;37     	/*PC_Array_Buffer[Index] = UDR0;
;;;38     	
;;;39     	if(Index < Frame_Length)
;;;40     	{
;;;41     		Index ++;
;;;42     		g_UART_ISR_CNT = USART_ISR_TOP;		//串口发送速率计数,该变量在T0模块中自减
;;;43     	}*/
;;;44     }
;;;45     
                          ENDP

                  UART0_RxIsrHandler PROC
;;;46     void UART0_RxIsrHandler(u8 rx_data)
000006  4980              LDR      r1,|L1.520|
;;;47     {
;;;48     	PC_Array_Buffer[Index] = rx_data;
000008  4a80              LDR      r2,|L1.524|
00000a  7812              LDRB     r2,[r2,#0]  ; Index
00000c  5488              STRB     r0,[r1,r2]
;;;49     	
;;;50     	if((Index < Frame_Length) && (PC_Array_Buffer[0] == 0xaa))
00000e  497f              LDR      r1,|L1.524|
000010  7809              LDRB     r1,[r1,#0]  ; Index
000012  4a7f              LDR      r2,|L1.528|
000014  7812              LDRB     r2,[r2,#0]  ; Frame_Length
000016  4291              CMP      r1,r2
000018  da08              BGE      |L1.44|
00001a  497b              LDR      r1,|L1.520|
00001c  7809              LDRB     r1,[r1,#0]  ; PC_Array_Buffer
00001e  29aa              CMP      r1,#0xaa
000020  d104              BNE      |L1.44|
;;;51     	{
;;;52     		Index ++;
000022  497a              LDR      r1,|L1.524|
000024  7809              LDRB     r1,[r1,#0]  ; Index
000026  1c49              ADDS     r1,r1,#1
000028  4a78              LDR      r2,|L1.524|
00002a  7011              STRB     r1,[r2,#0]
                  |L1.44|
;;;53     	}
;;;54     }
00002c  4770              BX       lr
;;;55     //保证只有在收完一个数据帧后数据才才能实
                          ENDP

                  Get_PC_Data PROC
;;;58     //修改日期:2008年,2月12日				
;;;59     unsigned char Get_PC_Data(unsigned char* p_Array, unsigned char ch_FL)
00002e  b510              PUSH     {r4,lr}
;;;60     {
000030  4603              MOV      r3,r0
000032  460a              MOV      r2,r1
;;;61     	unsigned char i = 0;
000034  2100              MOVS     r1,#0
;;;62     	if(Frame_Length != ch_FL)
000036  4876              LDR      r0,|L1.528|
000038  7800              LDRB     r0,[r0,#0]  ; Frame_Length
00003a  4290              CMP      r0,r2
00003c  d001              BEQ      |L1.66|
;;;63     	{
;;;64     		Frame_Length = ch_FL;
00003e  4874              LDR      r0,|L1.528|
000040  7002              STRB     r2,[r0,#0]
                  |L1.66|
;;;65     	}
;;;66     	if(Index == Frame_Length)
000042  4872              LDR      r0,|L1.524|
000044  7800              LDRB     r0,[r0,#0]  ; Index
000046  4c72              LDR      r4,|L1.528|
000048  7824              LDRB     r4,[r4,#0]  ; Frame_Length
00004a  42a0              CMP      r0,r4
00004c  d10f              BNE      |L1.110|
;;;67     	{
;;;68     		for(i=0; i< Frame_Length; i++)
00004e  2100              MOVS     r1,#0
000050  e004              B        |L1.92|
                  |L1.82|
;;;69     		{
;;;70     			p_Array[i] = PC_Array_Buffer[i];
000052  486d              LDR      r0,|L1.520|
000054  5c40              LDRB     r0,[r0,r1]
000056  5458              STRB     r0,[r3,r1]
000058  1c48              ADDS     r0,r1,#1              ;68
00005a  b2c1              UXTB     r1,r0                 ;68
                  |L1.92|
00005c  486c              LDR      r0,|L1.528|
00005e  7800              LDRB     r0,[r0,#0]            ;68  ; Frame_Length
000060  4281              CMP      r1,r0                 ;68
000062  dbf6              BLT      |L1.82|
;;;71     		}
;;;72     		Index = 0;
000064  2000              MOVS     r0,#0
000066  4c69              LDR      r4,|L1.524|
000068  7020              STRB     r0,[r4,#0]
;;;73     		return 1;
00006a  2001              MOVS     r0,#1
                  |L1.108|
;;;74     	}
;;;75     	return 0;
;;;76     }
00006c  bd10              POP      {r4,pc}
                  |L1.110|
00006e  2000              MOVS     r0,#0                 ;75
000070  e7fc              B        |L1.108|
;;;77     
                          ENDP

                  UART_Transmit PROC
;;;148    }
;;;149    void UART_Transmit(unsigned char ch_Data)
000072  4968              LDR      r1,|L1.532|
;;;150    {
;;;151    	/*while(!(UCSR0A&BIT(UDRE0)))
;;;152    		;
;;;153    	UDR0 = ch_Data;*/
;;;154    	USART1->DR = (u8) ch_Data;      
000074  8008              STRH     r0,[r1,#0]
;;;155    	while((USART1->SR&0X40)==0)
000076  bf00              NOP      
                  |L1.120|
000078  4967              LDR      r1,|L1.536|
00007a  8809              LDRH     r1,[r1,#0]
00007c  f0110f40          TST      r1,#0x40
000080  d0fa              BEQ      |L1.120|
;;;156    	{
;;;157    		;//循环发送,直到发送完毕  	
;;;158    	} 
;;;159    
;;;160    }
000082  4770              BX       lr
;;;161    void Display_A_String(unsigned char *p_STR)
                          ENDP

                  UART_Send_Line PROC
;;;77     
;;;78     void UART_Send_Line(long Data ,
000084  e92d43f0          PUSH     {r4-r9,lr}
;;;79     					unsigned char Is_H, 
;;;80     				    unsigned char Line_ID)
;;;81     {
000088  4603              MOV      r3,r0
00008a  4689              MOV      r9,r1
00008c  4614              MOV      r4,r2
;;;82     	signed char Temp_A_L;				
;;;83     	signed char Temp_A_H;
;;;84     	signed char Temp_B_L;
;;;85     	signed char Temp_B_H;
;;;86     	
;;;87     	unsigned char ch_XOR = 0;
00008e  2200              MOVS     r2,#0
;;;88     	
;;;89     	Temp_A_L = Data;
000090  b25d              SXTB     r5,r3
;;;90     	Temp_A_H = Data>>8;
000092  1218              ASRS     r0,r3,#8
000094  b246              SXTB     r6,r0
;;;91     	Temp_B_L = Data >> 16;
000096  1418              ASRS     r0,r3,#16
000098  b247              SXTB     r7,r0
;;;92     	Temp_B_H = Data >> 24;
00009a  ea4f6823          ASR      r8,r3,#24
;;;93     	
;;;94     	ch_XOR ^= 0x09;
00009e  f0820209          EOR      r2,r2,#9
;;;95     	ch_XOR ^= Line_ID;
0000a2  4062              EORS     r2,r2,r4
;;;96     	
;;;97     	ch_XOR ^= Temp_B_H;
0000a4  ea820008          EOR      r0,r2,r8
0000a8  b2c2              UXTB     r2,r0
;;;98     	ch_XOR ^= Temp_B_L;
0000aa  ea820007          EOR      r0,r2,r7
0000ae  b2c2              UXTB     r2,r0
;;;99     	ch_XOR ^= Temp_A_H;
0000b0  ea820006          EOR      r0,r2,r6
0000b4  b2c2              UXTB     r2,r0
;;;100    	ch_XOR ^= Temp_A_L;
0000b6  ea820005          EOR      r0,r2,r5
0000ba  b2c2              UXTB     r2,r0
;;;101    	
;;;102    	UART_Transmit(0xaa);
0000bc  20aa              MOVS     r0,#0xaa
0000be  f7fffffe          BL       UART_Transmit
;;;103    	UART_Transmit(0x09);
0000c2  2009              MOVS     r0,#9
0000c4  f7fffffe          BL       UART_Transmit
;;;104    	UART_Transmit(Line_ID);
0000c8  4620              MOV      r0,r4
0000ca  f7fffffe          BL       UART_Transmit
;;;105    	
;;;106    	if(Is_H)							//是否是先发高字节?					
0000ce  f1b90f00          CMP      r9,#0
0000d2  d00d              BEQ      |L1.240|
;;;107    	{
;;;108    		UART_Transmit(Temp_B_H);		//是									
0000d4  f00800ff          AND      r0,r8,#0xff
0000d8  f7fffffe          BL       UART_Transmit
;;;109    		UART_Transmit(Temp_B_L);
0000dc  b2f8              UXTB     r0,r7
0000de  f7fffffe          BL       UART_Transmit
;;;110    		UART_Transmit(Temp_A_H);
0000e2  b2f0              UXTB     r0,r6
0000e4  f7fffffe          BL       UART_Transmit
;;;111    		UART_Transmit(Temp_A_L);
0000e8  b2e8              UXTB     r0,r5
0000ea  f7fffffe          BL       UART_Transmit
0000ee  e00c              B        |L1.266|
                  |L1.240|
;;;112    	}
;;;113    	else
;;;114    	{
;;;115    		UART_Transmit(Temp_A_L);		//不是									
0000f0  b2e8              UXTB     r0,r5
0000f2  f7fffffe          BL       UART_Transmit
;;;116    		UART_Transmit(Temp_A_H);
0000f6  b2f0              UXTB     r0,r6
0000f8  f7fffffe          BL       UART_Transmit
;;;117    		UART_Transmit(Temp_B_L);
0000fc  b2f8              UXTB     r0,r7
0000fe  f7fffffe          BL       UART_Transmit
;;;118    		UART_Transmit(Temp_B_H);
000102  f00800ff          AND      r0,r8,#0xff

⌨️ 快捷键说明

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