📄 myusart.txt
字号:
; 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 + -