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

📄 myusart.txt

📁 STM32+ov7670
💻 TXT
📖 第 1 页 / 共 2 页
字号:
000106  f7fffffe          BL       UART_Transmit
                  |L1.266|
;;;119    	}
;;;120    	
;;;121    	UART_Transmit(ch_XOR);
00010a  4610              MOV      r0,r2
00010c  f7fffffe          BL       UART_Transmit
;;;122    	UART_Transmit(0x55);
000110  2055              MOVS     r0,#0x55
000112  f7fffffe          BL       UART_Transmit
;;;123    }
000116  e8bd83f0          POP      {r4-r9,pc}
;;;124    //函数增加了判断是否有新数据被收到的条件
                          ENDP

                  Get_PC_Rate PROC
;;;125    //修改日期:2008年,2月12日				
;;;126    unsigned char Get_PC_Rate(long int* p_Rate)
00011a  b5fe              PUSH     {r1-r7,lr}
;;;127    {
00011c  4605              MOV      r5,r0
;;;128    	unsigned char Temp_Array[9] = {0};
00011e  2000              MOVS     r0,#0
000120  9000              STR      r0,[sp,#0]
000122  9001              STR      r0,[sp,#4]
000124  9002              STR      r0,[sp,#8]
;;;129    	unsigned char i =0;						
000126  2400              MOVS     r4,#0
;;;130    	long int Temp = 0;						
000128  2700              MOVS     r7,#0
;;;131    	long int Temp_Rate = 0;
00012a  2600              MOVS     r6,#0
;;;132    	static unsigned char ch_CMD = 0;		//命令位用静态变量,保证数据能保持在
;;;133    											//上一次接收到的值(即不丢失)		
;;;134    	if(Get_PC_Data(Temp_Array, 9))			//如果收到新数据才进行数据校验与恢复
00012c  2109              MOVS     r1,#9
00012e  4668              MOV      r0,sp
000130  f7fffffe          BL       Get_PC_Data
000134  b1d8              CBZ      r0,|L1.366|
;;;135    	{										//这样提高了查询速度				
;;;136    		if((Temp_Array[0] == 0xaa)&&(Temp_Array[8] == 0x55))
000136  f89d0000          LDRB     r0,[sp,#0]
00013a  28aa              CMP      r0,#0xaa
00013c  d117              BNE      |L1.366|
00013e  f89d0008          LDRB     r0,[sp,#8]
000142  2855              CMP      r0,#0x55
000144  d113              BNE      |L1.366|
;;;137    		{
;;;138    			for(i=3; i<7; i++)
000146  2403              MOVS     r4,#3
000148  e00a              B        |L1.352|
                  |L1.330|
;;;139    			{
;;;140    				Temp = Temp_Array[i];
00014a  f81d7004          LDRB     r7,[sp,r4]
;;;141    				Temp_Rate |= Temp_Array[i]<<((6-i)<<3);//8*(6-i)				
00014e  f81d0004          LDRB     r0,[sp,r4]
000152  f1c40106          RSB      r1,r4,#6
000156  00c9              LSLS     r1,r1,#3
000158  4088              LSLS     r0,r0,r1
00015a  4306              ORRS     r6,r6,r0
00015c  1c60              ADDS     r0,r4,#1              ;138
00015e  b2c4              UXTB     r4,r0                 ;138
                  |L1.352|
000160  2c07              CMP      r4,#7                 ;138
000162  dbf2              BLT      |L1.330|
;;;142    			}
;;;143    			ch_CMD = Temp_Array[2];			//获取命令位						
000164  f89d0002          LDRB     r0,[sp,#2]
000168  492c              LDR      r1,|L1.540|
00016a  7008              STRB     r0,[r1,#0]
;;;144    			*p_Rate = Temp_Rate;			//获取数据位						
00016c  602e              STR      r6,[r5,#0]
                  |L1.366|
;;;145    		}
;;;146    	}
;;;147    	return ch_CMD;
00016e  482b              LDR      r0,|L1.540|
000170  7800              LDRB     r0,[r0,#0]  ; ch_CMD
;;;148    }
000172  bdfe              POP      {r1-r7,pc}
;;;149    void UART_Transmit(unsigned char ch_Data)
                          ENDP

                  Display_A_String PROC
;;;160    }
;;;161    void Display_A_String(unsigned char *p_STR)
000174  b500              PUSH     {lr}
;;;162    {
000176  4602              MOV      r2,r0
;;;163    	while(*p_STR)
000178  e003              B        |L1.386|
                  |L1.378|
;;;164    	{
;;;165    		UART_Transmit(*p_STR ++);
00017a  f8120b01          LDRB     r0,[r2],#1
00017e  f7fffffe          BL       UART_Transmit
                  |L1.386|
000182  7810              LDRB     r0,[r2,#0]            ;163
000184  2800              CMP      r0,#0                 ;163
000186  d1f8              BNE      |L1.378|
;;;166    	}
;;;167    }
000188  bd00              POP      {pc}
;;;168    unsigned char Is_Buffer_New(unsigned char* Buffer, unsigned char Buffer_Length)
                          ENDP

                  Is_Buffer_New PROC
00018a  b530              PUSH     {r4,r5,lr}
;;;169    {
00018c  4602              MOV      r2,r0
00018e  460b              MOV      r3,r1
;;;170    	unsigned char i = 0;
000190  2100              MOVS     r1,#0
;;;171    	unsigned char Flag = 0;
000192  2000              MOVS     r0,#0
;;;172    	static unsigned char Temp_Buffer[30] = {0};
;;;173    	{
;;;174    		for(i = 0; i< Buffer_Length; i++)
000194  bf00              NOP      
000196  e00a              B        |L1.430|
                  |L1.408|
;;;175    		{
;;;176    			if(Temp_Buffer[i] != Buffer[i])
000198  4c21              LDR      r4,|L1.544|
00019a  5c64              LDRB     r4,[r4,r1]
00019c  5c55              LDRB     r5,[r2,r1]
00019e  42ac              CMP      r4,r5
0001a0  d003              BEQ      |L1.426|
;;;177    			{
;;;178    				Temp_Buffer[i] = Buffer[i];
0001a2  5c54              LDRB     r4,[r2,r1]
0001a4  4d1e              LDR      r5,|L1.544|
0001a6  546c              STRB     r4,[r5,r1]
;;;179    				Flag = 1;
0001a8  2001              MOVS     r0,#1
                  |L1.426|
0001aa  1c4c              ADDS     r4,r1,#1              ;174
0001ac  b2e1              UXTB     r1,r4                 ;174
                  |L1.430|
0001ae  4299              CMP      r1,r3                 ;174
0001b0  dbf2              BLT      |L1.408|
;;;180    			}
;;;181    		}
;;;182    	}
;;;183    	return Flag;
;;;184    }
0001b2  bd30              POP      {r4,r5,pc}
;;;185    
                          ENDP

                  Is_USART_ISR PROC
;;;186    unsigned int Is_USART_ISR(void)
0001b4  481b              LDR      r0,|L1.548|
;;;187    {
;;;188    	return g_UART_ISR_CNT;
0001b6  6800              LDR      r0,[r0,#0]  ; g_UART_ISR_CNT
;;;189    }
0001b8  4770              BX       lr
;;;190    ////////////////////////////////////////////////////////////////////////////////
                          ENDP

                  UART_Debug PROC
;;;191    void UART_Debug(unsigned char Debug_Data)
0001ba  b500              PUSH     {lr}
;;;192    {
0001bc  4602              MOV      r2,r0
;;;193    	UART_Transmit(0xaa);
0001be  20aa              MOVS     r0,#0xaa
0001c0  f7fffffe          BL       UART_Transmit
;;;194    	UART_Transmit(Debug_Data);
0001c4  4610              MOV      r0,r2
0001c6  f7fffffe          BL       UART_Transmit
;;;195    	UART_Transmit(0x55);
0001ca  2055              MOVS     r0,#0x55
0001cc  f7fffffe          BL       UART_Transmit
;;;196    }
0001d0  bd00              POP      {pc}
;;;197    ////////////////////////////////////////////////////////////////////////////////
                          ENDP

                  UART_SendData PROC
;;;198    
;;;199    void UART_SendData(unsigned char* pbuf, unsigned char length)
0001d2  b510              PUSH     {r4,lr}
;;;200    {
0001d4  4602              MOV      r2,r0
0001d6  460c              MOV      r4,r1
;;;201    	unsigned char i = 0;
0001d8  2300              MOVS     r3,#0
;;;202    	pbuf[6] = 0;
0001da  2000              MOVS     r0,#0
0001dc  7190              STRB     r0,[r2,#6]
;;;203    	for(i = 1; i < 6; i ++)
0001de  2301              MOVS     r3,#1
0001e0  e005              B        |L1.494|
                  |L1.482|
;;;204    	{
;;;205    		pbuf[6] ^= pbuf[i];
0001e2  7990              LDRB     r0,[r2,#6]
0001e4  5cd1              LDRB     r1,[r2,r3]
0001e6  4048              EORS     r0,r0,r1
0001e8  7190              STRB     r0,[r2,#6]
0001ea  1c58              ADDS     r0,r3,#1              ;203
0001ec  b2c3              UXTB     r3,r0                 ;203
                  |L1.494|
0001ee  2b06              CMP      r3,#6                 ;203
0001f0  dbf7              BLT      |L1.482|
;;;206    	}
;;;207    	for(i = 0; i < length; i ++)
0001f2  2300              MOVS     r3,#0
0001f4  e004              B        |L1.512|
                  |L1.502|
;;;208    	{
;;;209    		UART_Transmit(pbuf[i]);
0001f6  5cd0              LDRB     r0,[r2,r3]
0001f8  f7fffffe          BL       UART_Transmit
0001fc  1c58              ADDS     r0,r3,#1              ;207
0001fe  b2c3              UXTB     r3,r0                 ;207
                  |L1.512|
000200  42a3              CMP      r3,r4                 ;207
000202  dbf8              BLT      |L1.502|
;;;210    	}
;;;211    }
000204  bd10              POP      {r4,pc}
;;;212    
                          ENDP

000206  0000              DCW      0x0000
                  |L1.520|
                          DCD      PC_Array_Buffer
                  |L1.524|
                          DCD      Index
                  |L1.528|
                          DCD      Frame_Length
                  |L1.532|
                          DCD      0x40013804
                  |L1.536|
                          DCD      0x40013800
                  |L1.540|
                          DCD      ch_CMD
                  |L1.544|
                          DCD      Temp_Buffer
                  |L1.548|
                          DCD      g_UART_ISR_CNT

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

                  PC_Array_Buffer
                          %        30
                  Temp_Buffer
                          %        30

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

                  g_UART_ISR_CNT
                          DCD      0x00000000
                  Index
000004  00                DCB      0x00
                  Frame_Length
000005  00                DCB      0x00
                  ch_CMD
000006  00                DCB      0x00

⌨️ 快捷键说明

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