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

📄 uart.lst

📁 AT91M40800源码
💻 LST
字号:
##############################################################################
#                                                                            #
# IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION    10/Sep/2008  16:13:49 #
# Copyright 1999-2005 IAR Systems. All rights reserved.                      #
#                                                                            #
#    Cpu mode        =  interwork                                            #
#    Endian          =  little                                               #
#    Stack alignment =  4                                                    #
#    Source file     =  E:\AT91EBxx\uart.c                                   #
#    Command line    =  E:\AT91EBxx\uart.c --fpu None -D RAMCODE=1 -lCN      #
#                       E:\AT91EBxx\ramcode-EBxx\List\ -o                    #
#                       E:\AT91EBxx\ramcode-EBxx\Obj\ -z3 --no_cse           #
#                       --no_unroll --no_inline --no_code_motion --no_tbaa   #
#                       --no_clustering --no_scheduling --debug --cpu_mode   #
#                       arm --endian little --cpu ARM7TDMI --stack_align 4   #
#                       --interwork -e --dlib_config "C:\Program Files\IAR   #
#                       Systems\Embedded Workbench 4.0                       #
#                       Evaluation\arm\LIB\dl4tpainl8n.h" -I "C:\Program     #
#                       Files\IAR Systems\Embedded Workbench 4.0             #
#                       Evaluation\arm\INC\"                                 #
#    List file       =  E:\AT91EBxx\ramcode-EBxx\List\uart.lst               #
#    Object file     =  E:\AT91EBxx\ramcode-EBxx\Obj\uart.r79                #
#                                                                            #
#                                                                            #
##############################################################################

E:\AT91EBxx\uart.c
      1          
      2          /*
      3           * $Revision: 1.4 $
      4           */
      5          
      6          #include <string.h>
      7          #include "config.h"
      8          #include "uart.h"
      9          #include "timer.h"
     10          
     11          #define RD_TIMEOUT 10
     12          

   \                                 In segment DATA_Z, align 4, align-sorted
     13          static char rbuf[RXBUF_SIZE];
   \                     rbuf:
   \   00000000                      DS8 256

   \                                 In segment DATA_Z, align 4, align-sorted
     14          static volatile int rptr = 0;
   \                     rptr:
   \   00000000                      DS8 4

   \                                 In segment DATA_Z, align 4, align-sorted
     15          static int(*getchar_function)();
   \                     getchar_function:
   \   00000000                      DS8 4

   \                                 In segment DATA_Z, align 4, align-sorted
     16          static void(*putchar_function)(int);
   \                     putchar_function:
   \   00000000                      DS8 4
     17          
     18          

   \                                 In segment CODE, align 4, keep-with-next
     19          void UartInit(int(*getchar_func)(), void(*putchar_func)(int))
     20          {
     21            getchar_function = getchar_func;
   \                     UartInit:
   \   00000000   ........           LDR      R2,??DataTable2  ;; getchar_function
   \   00000004   000082E5           STR      R0,[R2, #+0]
     22            putchar_function = putchar_func;
   \   00000008   ........           LDR      R0,??DataTable15  ;; putchar_function
   \   0000000C   001080E5           STR      R1,[R0, #+0]
     23          }
   \   00000010   1EFF2FE1           BX       LR               ;; return
     24          
     25          

   \                                 In segment CODE, align 4, keep-with-next
     26          void UartRxrdy()
     27          {
   \                     UartRxrdy:
   \   00000000   10402DE9           PUSH     {R4,LR}
     28            unsigned char value;
     29          
     30            value = (*getchar_function)();
   \   00000004   ........           LDR      R0,??DataTable2  ;; getchar_function
   \   00000008   000090E5           LDR      R0,[R0, #+0]
   \   0000000C   0FE0A0E1           MOV      LR,PC
   \   00000010   10FF2FE1           BX       R0
   \   00000014   0040B0E1           MOVS     R4,R0
     31          
     32            if (rptr >= RXBUF_SIZE)
   \   00000018   ........           LDR      R0,??DataTable12  ;; rptr
   \   0000001C   000090E5           LDR      R0,[R0, #+0]
   \   00000020   400F50E3           CMP      R0,#+256
   \   00000024   1A0000AA           BGE      ??UartRxrdy_0
     33              return;
     34          
     35            if(value==0xaa)
   \   00000028   FF4014E2           ANDS     R4,R4,#0xFF      ;; Zero extend
   \   0000002C   AA0054E3           CMP      R4,#+170
   \   00000030   0600001A           BNE      ??UartRxrdy_1
     36             {  
     37                (*putchar_function)(123);
   \   00000034   7B00A0E3           MOV      R0,#+123
   \   00000038   ........           LDR      R1,??DataTable15  ;; putchar_function
   \   0000003C   001091E5           LDR      R1,[R1, #+0]
   \   00000040   0FE0A0E1           MOV      LR,PC
   \   00000044   11FF2FE1           BX       R1
     38                AT91LedSet(0xFF);
   \   00000048   FF00A0E3           MOV      R0,#+255
   \   0000004C   ........           _BLF     AT91LedSet,??AT91LedSet??rA
     39          //    Sleep(1000);
     40          //      AT91LedSet(0x18);
     41             }
     42           if(value==0xbb)
   \                     ??UartRxrdy_1:
   \   00000050   FF4014E2           ANDS     R4,R4,#0xFF      ;; Zero extend
   \   00000054   BB0054E3           CMP      R4,#+187
   \   00000058   0600001A           BNE      ??UartRxrdy_2
     43             {  
     44                (*putchar_function)(234);
   \   0000005C   EA00A0E3           MOV      R0,#+234
   \   00000060   ........           LDR      R1,??DataTable15  ;; putchar_function
   \   00000064   001091E5           LDR      R1,[R1, #+0]
   \   00000068   0FE0A0E1           MOV      LR,PC
   \   0000006C   11FF2FE1           BX       R1
     45                AT91LedSet(0x00);
   \   00000070   0000A0E3           MOV      R0,#+0
   \   00000074   ........           _BLF     AT91LedSet,??AT91LedSet??rA
     46             }
     47            rbuf[rptr++] = value;  
   \                     ??UartRxrdy_2:
   \   00000078   ........           LDR      R0,??DataTable12  ;; rptr
   \   0000007C   000090E5           LDR      R0,[R0, #+0]
   \   00000080   ........           LDR      R1,??DataTable12  ;; rptr
   \   00000084   012090E2           ADDS     R2,R0,#+1
   \   00000088   002081E5           STR      R2,[R1, #+0]
   \   0000008C   ........           LDR      R1,??DataTable14  ;; rbuf
   \   00000090   0140C0E7           STRB     R4,[R0, +R1]
     48          }
   \                     ??UartRxrdy_0:
   \   00000094   1040BDE8           POP      {R4,LR}
   \   00000098   1EFF2FE1           BX       LR               ;; return
     49          
     50          

   \                                 In segment CODE, align 4, keep-with-next
     51          int ReceiveLine(char* line, int timeout)
     52          {
   \                     ReceiveLine:
   \   00000000   F0402DE9           PUSH     {R4-R7,LR}
   \   00000004   0040B0E1           MOVS     R4,R0
   \   00000008   0150B0E1           MOVS     R5,R1
     53            int n;
     54            int elapsed = 0;
   \   0000000C   0060A0E3           MOV      R6,#+0
     55            
     56            while (rptr == 0)
   \                     ??ReceiveLine_0:
   \   00000010   ........           LDR      R0,??DataTable12  ;; rptr
   \   00000014   000090E5           LDR      R0,[R0, #+0]
   \   00000018   000050E3           CMP      R0,#+0
   \   0000001C   0800001A           BNE      ??ReceiveLine_1
     57            {
     58              Sleep(RD_TIMEOUT);
   \   00000020   0A00A0E3           MOV      R0,#+10
   \   00000024   ........           _BLF     Sleep,??Sleep??rA
     59              elapsed += RD_TIMEOUT;
   \   00000028   0A6096E2           ADDS     R6,R6,#+10
     60              if (timeout && elapsed > timeout)
   \   0000002C   000055E3           CMP      R5,#+0
   \   00000030   F6FFFF0A           BEQ      ??ReceiveLine_0
   \   00000034   060055E1           CMP      R5,R6
   \   00000038   F4FFFFAA           BGE      ??ReceiveLine_0
     61                return 0;
   \   0000003C   0000A0E3           MOV      R0,#+0
   \   00000040   190000EA           B        ??ReceiveLine_2
     62            }
     63            
     64            for (;;)
     65            {
     66              n = rptr;
   \                     ??ReceiveLine_1:
   \   00000044   ........           LDR      R0,??DataTable12  ;; rptr
   \   00000048   007090E5           LDR      R7,[R0, #+0]
     67              Sleep(RD_TIMEOUT);
   \   0000004C   0A00A0E3           MOV      R0,#+10
   \   00000050   ........           _BLF     Sleep,??Sleep??rA
     68              elapsed += RD_TIMEOUT;
   \   00000054   0A6096E2           ADDS     R6,R6,#+10
     69              if (n == rptr)
   \   00000058   ........           LDR      R0,??DataTable12  ;; rptr
   \   0000005C   000090E5           LDR      R0,[R0, #+0]
   \   00000060   000057E1           CMP      R7,R0
   \   00000064   0B00001A           BNE      ??ReceiveLine_3
     70                break;
     71              if (timeout && elapsed > timeout)
     72                return 0;
     73            }
     74            
     75            rptr = 0;
   \   00000068   ........           LDR      R0,??DataTable12  ;; rptr
   \   0000006C   0010A0E3           MOV      R1,#+0
   \   00000070   001080E5           STR      R1,[R0, #+0]
     76            memcpy(line, rbuf, n);
   \   00000074   0720B0E1           MOVS     R2,R7
   \   00000078   ........           LDR      R1,??DataTable14  ;; rbuf
   \   0000007C   0400B0E1           MOVS     R0,R4
   \   00000080   ........           _BLF     memcpy,??memcpy??rA
     77            rbuf[n] = 0;
   \   00000084   ........           LDR      R0,??DataTable14  ;; rbuf
   \   00000088   0010A0E3           MOV      R1,#+0
   \   0000008C   0010C7E7           STRB     R1,[R7, +R0]
     78            
     79            return n;
   \   00000090   0700B0E1           MOVS     R0,R7
   \   00000094   040000EA           B        ??ReceiveLine_2
   \                     ??ReceiveLine_3:
   \   00000098   000055E3           CMP      R5,#+0
   \   0000009C   E8FFFF0A           BEQ      ??ReceiveLine_1
   \   000000A0   060055E1           CMP      R5,R6
   \   000000A4   E6FFFFAA           BGE      ??ReceiveLine_1
   \   000000A8   0000A0E3           MOV      R0,#+0
   \                     ??ReceiveLine_2:
   \   000000AC   F040BDE8           POP      {R4-R7,LR}
   \   000000B0   1EFF2FE1           BX       LR               ;; return
     80          }
     81          
     82          

   \                                 In segment CODE, align 4, keep-with-next
     83          void SendLine(char* line)
     84          {
   \                     SendLine:
   \   00000000   10402DE9           PUSH     {R4,LR}
   \   00000004   0040B0E1           MOVS     R4,R0
   \   00000008   050000EA           B        ??SendLine_0
     85            for ( ; *line; line++)
     86            {
     87              (*putchar_function)(*line);
   \                     ??SendLine_1:
   \   0000000C   0000D4E5           LDRB     R0,[R4, #+0]
   \   00000010   ........           LDR      R1,??DataTable15  ;; putchar_function
   \   00000014   001091E5           LDR      R1,[R1, #+0]
   \   00000018   0FE0A0E1           MOV      LR,PC
   \   0000001C   11FF2FE1           BX       R1
     88            }
   \   00000020   014094E2           ADDS     R4,R4,#+1
   \                     ??SendLine_0:
   \   00000024   0000D4E5           LDRB     R0,[R4, #+0]
   \   00000028   000050E3           CMP      R0,#+0
   \   0000002C   F6FFFF1A           BNE      ??SendLine_1
     89          }
   \   00000030   1040BDE8           POP      {R4,LR}
   \   00000034   1EFF2FE1           BX       LR               ;; return

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable2:
   \   00000000   ........           DC32     getchar_function

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable12:
   \   00000000   ........           DC32     rptr

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable14:
   \   00000000   ........           DC32     rbuf

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable15:
   \   00000000   ........           DC32     putchar_function
     90          
     91          

   Maximum stack usage in bytes:

     Function    CSTACK
     --------    ------
     ReceiveLine    20
     SendLine        8
     UartInit        0
     UartRxrdy       8


   Segment part sizes:

     Function/Label   Bytes
     --------------   -----
     rbuf              256
     rptr                4
     getchar_function    4
     putchar_function    4
     UartInit           20
     UartRxrdy         156
     ReceiveLine       180
     SendLine           56
     ??DataTable2        4
     ??DataTable12       4
     ??DataTable14       4
     ??DataTable15       4
      Others            64

 
 480 bytes in segment CODE
 268 bytes in segment DATA_Z
  12 bytes in segment INITTAB
 
 428 bytes of CODE memory (+ 64 bytes shared)
 268 bytes of DATA memory

Errors: none
Warnings: none

⌨️ 快捷键说明

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