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

📄 uart.txt

📁 该模板使用于周立功公司研发的EasyARM2100系列开发板
💻 TXT
📖 第 1 页 / 共 3 页
字号:
; 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 + -