📄 uart.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 919] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\debug_in_FLASH\uart.o --depend=.\debug_in_FLASH\uart.d --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips --omf_browse=.\debug_in_FLASH\uart.crf src\uart.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
DelayNS PROC
;;;13
;;;14 for(; dly>0; dly--)
000000 ea000006 B |L1.32|
|L1.4|
;;;15 for(i=0; i<50000; i++);
000004 e3a01000 MOV r1,#0
000008 ea000000 B |L1.16|
|L1.12|
00000c e2811001 ADD r1,r1,#1
|L1.16|
000010 e59f25c8 LDR r2,|L1.1504|
000014 e1510002 CMP r1,r2
000018 3afffffb BCC |L1.12|
00001c e2400001 SUB r0,r0,#1 ;14
|L1.32|
000020 e3500000 CMP r0,#0 ;14
000024 1afffff6 BNE |L1.4|
;;;16 }
000028 e12fff1e BX lr
;;;17 /****************************************************************************
ENDP
IRQ_UART0 PROC
;;;33 void __irq IRQ_UART0(void)
;;;34 {
00002c e92d0007 PUSH {r0-r2}
;;;35 if(0x04==(U0IIR&0x0F))
000030 e59f05ac LDR r0,|L1.1508|
000034 e5d00008 LDRB r0,[r0,#8]
000038 e200000f AND r0,r0,#0xf
00003c e3500004 CMP r0,#4
000040 1a000071 BNE |L1.524|
;;;36 {
;;;37
;;;38 if(no_full==0)
000044 e59f059c LDR r0,|L1.1512|
000048 e5d00000 LDRB r0,[r0,#0] ; no_full
00004c e3500000 CMP r0,#0
000050 1a00000a BNE |L1.128|
;;;39 {
;;;40 head_buff[n]=U0RBR;
000054 e59f0588 LDR r0,|L1.1508|
000058 e5d00000 LDRB r0,[r0,#0]
00005c e59f1588 LDR r1,|L1.1516|
000060 e59f2588 LDR r2,|L1.1520|
000064 e5d22000 LDRB r2,[r2,#0] ; n
000068 e7c10002 STRB r0,[r1,r2]
;;;41 n++;
00006c e59f057c LDR r0,|L1.1520|
000070 e5d00000 LDRB r0,[r0,#0] ; n
000074 e2800001 ADD r0,r0,#1
000078 e59f1570 LDR r1,|L1.1520|
00007c e5c10000 STRB r0,[r1,#0] ; n
|L1.128|
;;;42 }
;;;43
;;;44 if(n==6) //报头接收结束
000080 e59f0568 LDR r0,|L1.1520|
000084 e5d00000 LDRB r0,[r0,#0] ; n
000088 e3500006 CMP r0,#6
00008c 1a000008 BNE |L1.180|
;;;45 {
;;;46 n=0;
000090 e3a00000 MOV r0,#0
000094 e59f1554 LDR r1,|L1.1520|
000098 e5c10000 STRB r0,[r1,#0] ; n
;;;47 no_full=1;j=0;
00009c e3a00001 MOV r0,#1
0000a0 e59f1540 LDR r1,|L1.1512|
0000a4 e5c10000 STRB r0,[r1,#0] ; no_full
0000a8 e3a00000 MOV r0,#0
0000ac e59f1540 LDR r1,|L1.1524|
0000b0 e5c10000 STRB r0,[r1,#0] ; j
|L1.180|
;;;48 }
;;;49
;;;50 if((no_full==1)&&(verify==0)) //报头接收结束,对报头的正确性进行检验,获得数据包的长度,
0000b4 e59f052c LDR r0,|L1.1512|
0000b8 e5d00000 LDRB r0,[r0,#0] ; no_full
0000bc e3500001 CMP r0,#1
0000c0 1a00002d BNE |L1.380|
0000c4 e59f052c LDR r0,|L1.1528|
0000c8 e5d00000 LDRB r0,[r0,#0] ; verify
0000cc e3500000 CMP r0,#0
0000d0 1a000029 BNE |L1.380|
;;;51 {
;;;52 // temp=get_fanma(head_buff[5]); //取得包长的反码
;;;53 if((head_buff[0]==0xff)&&(head_buff[1]==0xff)&&(head_buff[2]==0xff)&&(head_buff[3]==0xff))
0000d4 e59f0510 LDR r0,|L1.1516|
0000d8 e5d00000 LDRB r0,[r0,#0] ; head_buff
0000dc e35000ff CMP r0,#0xff
0000e0 1a000022 BNE |L1.368|
0000e4 e59f0500 LDR r0,|L1.1516|
0000e8 e5d00001 LDRB r0,[r0,#1] ; head_buff
0000ec e35000ff CMP r0,#0xff
0000f0 1a00001e BNE |L1.368|
0000f4 e59f04f0 LDR r0,|L1.1516|
0000f8 e5d00002 LDRB r0,[r0,#2] ; head_buff
0000fc e35000ff CMP r0,#0xff
000100 1a00001a BNE |L1.368|
000104 e59f04e0 LDR r0,|L1.1516|
000108 e5d00003 LDRB r0,[r0,#3] ; head_buff
00010c e35000ff CMP r0,#0xff
000110 1a000016 BNE |L1.368|
;;;54 // if((head_buff[0]==0xff)&&(head_buff[1]==0xff)&&(head_buff[2]==0xff)&&(head_buff[3]==0xff)&&(head_buff[4]==temp))
;;;55 {
;;;56 recve_length=head_buff[4]; //取得数据包长度
000114 e59f04d0 LDR r0,|L1.1516|
000118 e5d00004 LDRB r0,[r0,#4] ; head_buff
00011c e59f14d8 LDR r1,|L1.1532|
000120 e5c10000 STRB r0,[r1,#0] ; recve_length
;;;57 if(recve_length==30) rcv_new = 1;
000124 e2810000 ADD r0,r1,#0
000128 e5d00000 LDRB r0,[r0,#0] ; recve_length
00012c e350001e CMP r0,#0x1e
000130 1a000003 BNE |L1.324|
000134 e3a00001 MOV r0,#1
000138 e59f14c0 LDR r1,|L1.1536|
00013c e5c10000 STRB r0,[r1,#0] ; rcv_new
000140 ea000006 B |L1.352|
|L1.324|
;;;58 else if(recve_length==34) rcv_new = 2;
000144 e59f04b0 LDR r0,|L1.1532|
000148 e5d00000 LDRB r0,[r0,#0] ; recve_length
00014c e3500022 CMP r0,#0x22
000150 1a000002 BNE |L1.352|
000154 e3a00002 MOV r0,#2
000158 e59f14a0 LDR r1,|L1.1536|
00015c e5c10000 STRB r0,[r1,#0] ; rcv_new
|L1.352|
;;;59 verify=1;
000160 e3a00001 MOV r0,#1
000164 e59f148c LDR r1,|L1.1528|
000168 e5c10000 STRB r0,[r1,#0] ; verify
00016c ea000002 B |L1.380|
|L1.368|
;;;60 }
;;;61 else recve_length=0;
000170 e3a00000 MOV r0,#0
000174 e59f1480 LDR r1,|L1.1532|
000178 e5c10000 STRB r0,[r1,#0] ; recve_length
|L1.380|
;;;62 }
;;;63 if(recve_length>0)
00017c e59f0478 LDR r0,|L1.1532|
000180 e5d00000 LDRB r0,[r0,#0] ; recve_length
000184 e3500000 CMP r0,#0
000188 da00001f BLE |L1.524|
;;;64 {
;;;65 rcv_buf[j-1]=U0RBR;
00018c e59f0450 LDR r0,|L1.1508|
000190 e5d00000 LDRB r0,[r0,#0]
000194 e59f1458 LDR r1,|L1.1524|
000198 e5d11000 LDRB r1,[r1,#0] ; j
00019c e2411001 SUB r1,r1,#1
0001a0 e59f245c LDR r2,|L1.1540|
0001a4 e7c20001 STRB r0,[r2,r1]
;;;66 if(j==recve_length) //接收到最后一个字节
0001a8 e59f0444 LDR r0,|L1.1524|
0001ac e5d00000 LDRB r0,[r0,#0] ; j
0001b0 e59f1444 LDR r1,|L1.1532|
0001b4 e5d11000 LDRB r1,[r1,#0] ; recve_length
0001b8 e1500001 CMP r0,r1
0001bc 1a00000d BNE |L1.504|
;;;67 {
;;;68 j=0;
0001c0 e3a00000 MOV r0,#0
0001c4 e59f1428 LDR r1,|L1.1524|
0001c8 e5c10000 STRB r0,[r1,#0] ; j
;;;69 recve_length=0;
0001cc e59f1428 LDR r1,|L1.1532|
0001d0 e5c10000 STRB r0,[r1,#0] ; recve_length
;;;70 verify=0;
0001d4 e59f141c LDR r1,|L1.1528|
0001d8 e5c10000 STRB r0,[r1,#0] ; verify
;;;71 no_full=0;
0001dc e59f1404 LDR r1,|L1.1512|
0001e0 e5c10000 STRB r0,[r1,#0] ; no_full
;;;72 answer_falg=rcv_buf[0]; //如果发送数据正确,放大器返回0X55;
0001e4 e59f0418 LDR r0,|L1.1540|
0001e8 e5d00000 LDRB r0,[r0,#0] ; rcv_buf
0001ec e59f1414 LDR r1,|L1.1544|
0001f0 e5c10000 STRB r0,[r1,#0] ; answer_falg
0001f4 ea000004 B |L1.524|
|L1.504|
;;;73 // if(rcv_new==1) re_crc_value=(rcv_buf[26]<<8)|rcv_buf[27];
;;;74 // else if(rcv_new==2) re_crc_value=(rcv_buf[32]<<8)|rcv_buf[33];
;;;75
;;;76 }
;;;77 else j++;
0001f8 e59f03f4 LDR r0,|L1.1524|
0001fc e5d00000 LDRB r0,[r0,#0] ; j
000200 e2800001 ADD r0,r0,#1
000204 e59f13e8 LDR r1,|L1.1524|
000208 e5c10000 STRB r0,[r1,#0] ; j
|L1.524|
;;;78
;;;79 }
;;;80
;;;81 }
;;;82 VICVectAddr = 0x00; // 中断处理结束
00020c e3a00000 MOV r0,#0
000210 e5000fd0 STR r0,[r0,#-0xfd0]
;;;83
;;;84 }
000214 e8bd0007 POP {r0-r2}
000218 e25ef004 SUBS pc,lr,#4
;;;85 /****************************************************************************
ENDP
UART0_Ini PROC
;;;91 void UART0_Ini(uint32 bps)
;;;92 { uint16 Fdiv;
00021c e92d4070 PUSH {r4-r6,lr}
000220 e1a04000 MOV r4,r0
;;;93 U0LCR = 0x83; // DLAB = 1,可设置波特率
000224 e3a00083 MOV r0,#0x83
000228 e59f13b4 LDR r1,|L1.1508|
00022c e5c1000c STRB r0,[r1,#0xc]
;;;94 Fdiv = (Fpclk / 16) / bps; // 设置波特率
000230 e1a01004 MOV r1,r4
000234 e59f03d0 LDR r0,|L1.1548|
000238 ebfffffe BL __aeabi_uidivmod
00023c e1a05800 LSL r5,r0,#16
000240 e1a05825 LSR r5,r5,#16
;;;95 U0DLM = Fdiv / 256;
000244 e1a00005 MOV r0,r5
000248 e1a01fc5 ASR r1,r5,#31
00024c e0851c21 ADD r1,r5,r1,LSR #24
000250 e1a01801 LSL r1,r1,#16
000254 e1a01c21 LSR r1,r1,#24
000258 e59f2384 LDR r2,|L1.1508|
00025c e5c21004 STRB r1,[r2,#4]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -