drv_uart.txt

来自「该模板使用于周立功公司研发的EasyARM2100系列开发板」· 文本 代码 · 共 777 行 · 第 1/3 页

TXT
777
字号
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 919] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\debug_in_FLASH\drv_uart.o --depend=.\debug_in_FLASH\drv_uart.d --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips --omf_browse=.\debug_in_FLASH\drv_uart.crf src\drv_uart.c]
                          ARM

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

                  crc16_bit PROC
;;;58     unsigned int crc16_bit(unsigned char *ptr,unsigned char len)        // ptr 为数据指针,len 为数据长度 
;;;59     { 
000000  e1a02000          MOV      r2,r0
;;;60       unsigned char i; 
;;;61       crc=0;                                                        // CRC  初值
000004  e3a00000          MOV      r0,#0
000008  e59fc594          LDR      r12,|L1.1444|
00000c  e1cc00b0          STRH     r0,[r12,#0]  ; crc
;;;62       ptr = &crcbuff[0];                                            //  指向第一个 Byte 数据 
000010  e59f2590          LDR      r2,|L1.1448|
;;;63       while(len--) 
000014  ea000024          B        |L1.172|
                  |L1.24|
;;;64       { 
;;;65           for(i=0x80; i!=0; i>>=1) 
000018  e3a03080          MOV      r3,#0x80
00001c  ea00001f          B        |L1.160|
                  |L1.32|
;;;66         { 
;;;67             if((crc&0x8000)!=0) {crc<<=1; crc^=0x1021;}             //    1-1   
000020  e59f057c          LDR      r0,|L1.1444|
000024  e1d000b0          LDRH     r0,[r0,#0]  ; crc
000028  e3100902          TST      r0,#0x8000
00002c  0a00000b          BEQ      |L1.96|
000030  e59f056c          LDR      r0,|L1.1444|
000034  e1d000b0          LDRH     r0,[r0,#0]  ; crc
000038  e59fc56c          LDR      r12,|L1.1452|
00003c  e00c0080          AND      r0,r12,r0,LSL #1
000040  e59fc55c          LDR      r12,|L1.1444|
000044  e1cc00b0          STRH     r0,[r12,#0]  ; crc
000048  e28c0000          ADD      r0,r12,#0
00004c  e1d000b0          LDRH     r0,[r0,#0]  ; crc
000050  e2200a01          EOR      r0,r0,#0x1000
000054  e2200021          EOR      r0,r0,#0x21
000058  e1cc00b0          STRH     r0,[r12,#0]  ; crc
00005c  ea000005          B        |L1.120|
                  |L1.96|
;;;68               else crc<<=1;                                         //    1-2 
000060  e59f053c          LDR      r0,|L1.1444|
000064  e1d000b0          LDRH     r0,[r0,#0]  ; crc
000068  e59fc53c          LDR      r12,|L1.1452|
00006c  e00c0080          AND      r0,r12,r0,LSL #1
000070  e59fc52c          LDR      r12,|L1.1444|
000074  e1cc00b0          STRH     r0,[r12,#0]  ; crc
                  |L1.120|
;;;69           if((*ptr&i)!=0) crc^=0x1021;                              //    1-3   
000078  e5d20000          LDRB     r0,[r2,#0]
00007c  e1100003          TST      r0,r3
000080  0a000005          BEQ      |L1.156|
000084  e59f0518          LDR      r0,|L1.1444|
000088  e1d000b0          LDRH     r0,[r0,#0]  ; crc
00008c  e2200a01          EOR      r0,r0,#0x1000
000090  e2200021          EOR      r0,r0,#0x21
000094  e59fc508          LDR      r12,|L1.1444|
000098  e1cc00b0          STRH     r0,[r12,#0]  ; crc
                  |L1.156|
00009c  e1a030c3          ASR      r3,r3,#1              ;65
                  |L1.160|
0000a0  e3530000          CMP      r3,#0                 ;65
0000a4  1affffdd          BNE      |L1.32|
;;;70         } 
;;;71         ptr++; 
0000a8  e2822001          ADD      r2,r2,#1
                  |L1.172|
0000ac  e1b00001          MOVS     r0,r1                 ;63
0000b0  e241c001          SUB      r12,r1,#1             ;63
0000b4  e20c10ff          AND      r1,r12,#0xff          ;63
0000b8  1affffd6          BNE      |L1.24|
;;;72       } 
;;;73       return(crc); 
0000bc  e59f04e0          LDR      r0,|L1.1444|
0000c0  e1d000b0          LDRH     r0,[r0,#0]  ; crc
;;;74     } 
0000c4  e12fff1e          BX       lr
;;;75     /*********************************************************************************************************
                          ENDP

                  crc16_tab PROC
;;;89     uint16 crc16_tab(uint8 *ptr,uint8 len)      //  字节查表法求 CRC 
;;;90     { 
0000c8  e1a03000          MOV      r3,r0
;;;91       uint8 da; 
;;;92       crc=0; 
0000cc  e3a00000          MOV      r0,#0
0000d0  e59fc4cc          LDR      r12,|L1.1444|
0000d4  e1cc00b0          STRH     r0,[r12,#0]  ; crc
;;;93       /* if(sendcrcfalg==0x55)
;;;94           {
;;;95           sendcrcfalg=0;
;;;96            ptr = &crcbuff[8];
;;;97           }
;;;98         else
;;;99           {
;;;100           ptr = &crcbuff[6];                        
;;;101         } */  
;;;102        ptr = &crcbuff[6];  //ptr = &crcbuff[0];                      
0000d8  e59f34d0          LDR      r3,|L1.1456|
;;;103        while(len--!=0) 
0000dc  ea000016          B        |L1.316|
                  |L1.224|
;;;104      { 
;;;105          da=(uint8) (crc/256);        // 以 8 位二进制数暂存 CRC 的高 8 位   
0000e0  e59fc4bc          LDR      r12,|L1.1444|
0000e4  e1dc00b0          LDRH     r0,[r12,#0]  ; crc
0000e8  e1a0cfc0          ASR      r12,r0,#31
0000ec  e080cc2c          ADD      r12,r0,r12,LSR #24
0000f0  e1a0c80c          LSL      r12,r12,#16
0000f4  e1a02c2c          LSR      r2,r12,#24
;;;106          crc<<=8;                 //  左移 8 位 
0000f8  e59f04a4          LDR      r0,|L1.1444|
0000fc  e1d000b0          LDRH     r0,[r0,#0]  ; crc
000100  e59fc4a4          LDR      r12,|L1.1452|
000104  e00c0400          AND      r0,r12,r0,LSL #8
000108  e59fc494          LDR      r12,|L1.1444|
00010c  e1cc00b0          STRH     r0,[r12,#0]  ; crc
;;;107          crc^=crc_ta[da^*ptr];        //  高字节和当前数据 XOR 再查表 
000110  e5d30000          LDRB     r0,[r3,#0]
000114  e0200002          EOR      r0,r0,r2
000118  e59fc494          LDR      r12,|L1.1460|
00011c  e08c0080          ADD      r0,r12,r0,LSL #1
000120  e1d000b0          LDRH     r0,[r0,#0]
000124  e59fc478          LDR      r12,|L1.1444|
000128  e1dcc0b0          LDRH     r12,[r12,#0]  ; crc
00012c  e020000c          EOR      r0,r0,r12
000130  e59fc46c          LDR      r12,|L1.1444|
000134  e1cc00b0          STRH     r0,[r12,#0]  ; crc
;;;108          ptr++; 
000138  e2833001          ADD      r3,r3,#1
                  |L1.316|
00013c  e1b00001          MOVS     r0,r1                 ;103
000140  e241c001          SUB      r12,r1,#1             ;103
000144  e20c10ff          AND      r1,r12,#0xff          ;103
000148  1affffe4          BNE      |L1.224|
;;;109      } 
;;;110        return(crc); 
00014c  e59f0450          LDR      r0,|L1.1444|
000150  e1d000b0          LDRH     r0,[r0,#0]  ; crc
;;;111    }
000154  e12fff1e          BX       lr
;;;112    /*********************************************************************************************************
                          ENDP

                  rec_crc16 PROC
;;;126    uint16 rec_crc16(uint8 *ptr,uint8 len)      //  字节查表法求 CRC 
;;;127    { 
000158  e1a02000          MOV      r2,r0
;;;128      uint8 da; 
;;;129      crc=0; 
00015c  e3a00000          MOV      r0,#0
000160  e59fc43c          LDR      r12,|L1.1444|
000164  e1cc00b0          STRH     r0,[r12,#0]  ; crc
;;;130        ptr = &crcbuff[0];                      
000168  e59f2438          LDR      r2,|L1.1448|
;;;131        while(len--!=0) 
00016c  ea000016          B        |L1.460|
                  |L1.368|
;;;132      { 
;;;133          da=(uint8) (crc/256);        // 以 8 位二进制数暂存 CRC 的高 8 位   
000170  e59fc42c          LDR      r12,|L1.1444|
000174  e1dc00b0          LDRH     r0,[r12,#0]  ; crc
000178  e1a0cfc0          ASR      r12,r0,#31
00017c  e080cc2c          ADD      r12,r0,r12,LSR #24
000180  e1a0c80c          LSL      r12,r12,#16
000184  e1a03c2c          LSR      r3,r12,#24
;;;134          crc<<=8;                 //  左移 8 位 
000188  e59f0414          LDR      r0,|L1.1444|
00018c  e1d000b0          LDRH     r0,[r0,#0]  ; crc
000190  e59fc414          LDR      r12,|L1.1452|
000194  e00c0400          AND      r0,r12,r0,LSL #8
000198  e59fc404          LDR      r12,|L1.1444|
00019c  e1cc00b0          STRH     r0,[r12,#0]  ; crc
;;;135          crc^=crc_ta[da^*ptr];        //  高字节和当前数据 XOR 再查表 
0001a0  e5d20000          LDRB     r0,[r2,#0]
0001a4  e0200003          EOR      r0,r0,r3
0001a8  e59fc404          LDR      r12,|L1.1460|
0001ac  e08c0080          ADD      r0,r12,r0,LSL #1
0001b0  e1d000b0          LDRH     r0,[r0,#0]
0001b4  e59fc3e8          LDR      r12,|L1.1444|
0001b8  e1dcc0b0          LDRH     r12,[r12,#0]  ; crc
0001bc  e020000c          EOR      r0,r0,r12
0001c0  e59fc3dc          LDR      r12,|L1.1444|
0001c4  e1cc00b0          STRH     r0,[r12,#0]  ; crc
;;;136          ptr++; 
0001c8  e2822001          ADD      r2,r2,#1
                  |L1.460|
0001cc  e1b00001          MOVS     r0,r1                 ;131
0001d0  e241c001          SUB      r12,r1,#1             ;131
0001d4  e20c10ff          AND      r1,r12,#0xff          ;131
0001d8  1affffe4          BNE      |L1.368|
;;;137      } 
;;;138        return(crc); 
0001dc  e59f03c0          LDR      r0,|L1.1444|
0001e0  e1d000b0          LDRH     r0,[r0,#0]  ; crc
;;;139    }
0001e4  e12fff1e          BX       lr
;;;140    
                          ENDP

                  get_fanma PROC
;;;156    unsigned char get_fanma(unsigned char dat)
;;;157    {
0001e8  e1a01000          MOV      r1,r0
;;;158    unsigned char i,s;
;;;159    unsigned char dump=0;
0001ec  e3a00000          MOV      r0,#0
;;;160    for(i=0;i<8;i++) 
0001f0  e3a03000          MOV      r3,#0
0001f4  ea00000b          B        |L1.552|
                  |L1.504|
;;;161      {
;;;162       dump=(dump<<1);
0001f8  e1a0cc80          LSL      r12,r0,#25
0001fc  e1a00c2c          LSR      r0,r12,#24
;;;163       if(dat&0x80) s=0;
000200  e3110080          TST      r1,#0x80
000204  0a000001          BEQ      |L1.528|
000208  e3a02000          MOV      r2,#0
00020c  ea000000          B        |L1.532|
                  |L1.528|
;;;164       else  s=1;
000210  e3a02001          MOV      r2,#1
                  |L1.532|
;;;165       dat<<=1;
000214  e1a0cc81          LSL      r12,r1,#25
000218  e1a01c2c          LSR      r1,r12,#24
;;;166       dump|=s;
00021c  e1800002          ORR      r0,r0,r2
000220  e283c001          ADD      r12,r3,#1             ;160
000224  e20c30ff          AND      r3,r12,#0xff          ;160
                  |L1.552|
000228  e3530008          CMP      r3,#8                 ;160
00022c  bafffff1          BLT      |L1.504|
;;;167      }
;;;168     return dump;
;;;169    }
000230  e12fff1e          BX       lr
;;;170    /*********************************************************************************************************
                          ENDP

                  command PROC
;;;184    void command(uint8 type)
;;;185    {
000234  e92d4070          PUSH     {r4-r6,lr}
000238  e1a04000          MOV      r4,r0
;;;186    uint8 i;
;;;187    send232[0]=0xff;
00023c  e3a000ff          MOV      r0,#0xff
000240  e59f1370          LDR      r1,|L1.1464|
000244  e5c10000          STRB     r0,[r1,#0]  ; send232
;;;188    send232[1]=0xff;
000248  e5c10001          STRB     r0,[r1,#1]  ; send232
;;;189    send232[2]=0xff;

⌨️ 快捷键说明

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