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

📄 uart0.lst

📁 基于ARM的电梯控制程序
💻 LST
字号:
ARM COMPILER V2.40a,  UART0                                                                19/07/07  01:23:00  PAGE 1   


ARM COMPILER V2.40a, COMPILATION OF MODULE UART0
OBJECT MODULE PLACED IN UART0.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\ARM\BIN\CA.exe UART0.c THUMB DEBUG TABS(4) 

stmt  level    source

    1          /****************************************************************************
    2          * 文件名:SENDSTR.C
    3          * 功能:向串口发送数据。
    4          * 说明:使用外部11.0592MHz晶振,根据CONFIG.H文件配置,Fpclk=11.0592MHz;
    5          *      通讯波特率115200,8位数据位,1位停止位,无奇偶校验。
    6          ****************************************************************************/
    7          #include  "config.h"
    8          #define  UART_BPS   19200           /* 定义通讯波特率 */
    9          
   10          /****************************************************************************
   11          * 名称:UART0_Ini()
   12          * 功能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
   13          * 入口参数:无
   14          * 出口参数:无
   15          ****************************************************************************/
   16          void  UART0_Ini(void)
   17          {  uint16 Fdiv;
   18   1         PINSEL0 |= 0x00000005;           // 设置I/O连接到UART0
   19   1         U0LCR = 0x83;                    // DLAB = 1,可设置波特率
   20   1         Fdiv = (Fpclk / 16) / UART_BPS;  // 设置波特率
   21   1         U0DLM = Fdiv / 256;                          
   22   1         U0DLL = Fdiv % 256;                      
   23   1         U0LCR = 0x03;                        
   24   1      
   25   1         U0FCR = 0x01;                        // 使能FIFO , 来一个数据就产生中断
   26   1         U0IER = 0x01;                        // 允许RBR中断,即接收中断
   27   1         
   28   1         /* 设置UART0中断允许 */
   29   1         VICIntSelect = 0x00000000;           // 设置所有通道为IRQ中断
   30   1         VICVectCntl1 = 0x26;                 // UART0中断通道分配到IRQ slot 0,即优先级最高
   31   1         VICVectAddr1 = (int)IRQ_UART0;       // 设置UART0向量地址
   32   1         VICIntEnable = 0x00000040;           // 使能UART0中断
   33   1         
   34   1      }
   35          
   36          /****************************************************************************
   37          * 名称:UART0_SendByte()
   38          * 功能:向串口发送字节数据,并等待发送完毕。
   39          * 入口参数:data        要发送的数据
   40          * 出口参数:无
   41          ****************************************************************************/
   42          void  UART0_SendByte(uint8 data)
   43          {  U0THR = data;                    // 发送数据
   44   1      
   45   1         while( (U0LSR&0x40)==0 );        // 等待数据发送完毕
   46   1      }
   47          
   48          /****************************************************************************
   49          * 名称:UART0_SendStr()
   50          * 功能:向串口发送一字符串
   51          * 入口参数:srt     要发送的字符串的指针
   52          * 出口参数:无
   53          ****************************************************************************/
   54          void  UART0_SendStr(uint8 const *str)
   55          {  while(1)
   56   1         {  if( *str == '\0' ) break;
   57   2            UART0_SendByte(*str++);       // 发送数据
   58   2         }
   59   1      }
ARM COMPILER V2.40a,  UART0                                                                19/07/07  01:23:00  PAGE 2   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE32 (IRQ_UART0?A)
 EXTERN CODE16 (?C?SDIV?T)



*** PUBLICS:
 PUBLIC         UART0_Ini?T
 PUBLIC         UART0_SendByte?T
 PUBLIC         UART0_SendStr?T



*** CODE SEGMENT '?PR?UART0_Ini?T?UART0':
   16: void  UART0_Ini(void)
 00000000  B500      PUSH        {LR}
   17: {  uint16 Fdiv;
 00000002            ; SCOPE-START
   18:    PINSEL0 |= 0x00000005;           // 设置I/O连接到UART0
 00000002  2205      MOV         R2,#0x5
 00000004  4800      LDR         R0,=0xE002C000
 00000006  6801      LDR         R1,[R0,#0x0]
 00000008  4311      ORR         R1,R2
 0000000A  6001      STR         R1,[R0,#0x0]
   19:    U0LCR = 0x83;                    // DLAB = 1,可设置波特率
 0000000C  2183      MOV         R1,#0x83
 0000000E  4800      LDR         R0,=0xE000C00C
 00000010  7001      STRB        R1,[R0,#0x0]
   20:    Fdiv = (Fpclk / 16) / UART_BPS;  // 设置波特率
 00000012  2224      MOV         R2,#0x24
 00000014  ---- Variable 'Fdiv' assigned to Register 'R2' ----
   21:    U0DLM = Fdiv / 256;                          
 00000014  1C10      MOV         R0,R2 ; Fdiv
 00000016  0400      LSL         R0,R0,#0x10 ; Fdiv
 00000018  0C00      LSR         R0,R0,#0x10
 0000001A  4940      LDR         R1,=0x100
 0000001C  F7FF      BL          ?C?SDIV?T  ; T=0x0001  (1) ; ?C?SDIV?T
 0000001E  FFF0      BL          ?C?SDIV?T  ; T=0x0001  (2) ; ?C?SDIV?T
 00000020  1C08      MOV         R0,R1
 00000022  4800      LDR         R0,=0xE000C004
 00000024  7001      STRB        R1,[R0,#0x0]
   22:    U0DLL = Fdiv % 256;                      
 00000026  1C10      MOV         R0,R2 ; Fdiv
 00000028  0400      LSL         R0,R0,#0x10 ; Fdiv
 0000002A  0C00      LSR         R0,R0,#0x10
 0000002C  4940      LDR         R1,=0x100
 0000002E  F7FF      BL          ?C?SDIV?T  ; T=0x0001  (1) ; ?C?SDIV?T
 00000030  FFE7      BL          ?C?SDIV?T  ; T=0x0001  (2) ; ?C?SDIV?T
 00000032  1C01      MOV         R1,R0
 00000034  4800      LDR         R0,=0xE000C000
 00000036  7001      STRB        R1,[R0,#0x0]
   23:    U0LCR = 0x03;                        
 00000038  2103      MOV         R1,#0x3
 0000003A  4800      LDR         R0,=0xE000C00C
 0000003C  7001      STRB        R1,[R0,#0x0]
   25:    U0FCR = 0x01;                        // 使能FIFO , 来一个数据就产生中断
 0000003E  2101      MOV         R1,#0x1
 00000040  4800      LDR         R0,=0xE000C008
 00000042  7001      STRB        R1,[R0,#0x0]
   26:    U0IER = 0x01;                        // 允许RBR中断,即接收中断
 00000044  2101      MOV         R1,#0x1
 00000046  4800      LDR         R0,=0xE000C004
 00000048  6001      STR         R1,[R0,#0x0]
   29:    VICIntSelect = 0x00000000;           // 设置所有通道为IRQ中断
 0000004A  2100      MOV         R1,#0x0
 0000004C  4800      LDR         R0,=0xFFFFF00C
 0000004E  6001      STR         R1,[R0,#0x0]
ARM COMPILER V2.40a,  UART0                                                                19/07/07  01:23:00  PAGE 3   

   30:    VICVectCntl1 = 0x26;                 // UART0中断通道分配到IRQ slot 0,即优先级最高
 00000050  2126      MOV         R1,#0x26
 00000052  4800      LDR         R0,=0xFFFFF204
 00000054  6001      STR         R1,[R0,#0x0]
   31:    VICVectAddr1 = (int)IRQ_UART0;       // 设置UART0向量地址
 00000056  4900      LDR         R1,=IRQ_UART0?A ; IRQ_UART0?A
 00000058  4800      LDR         R0,=0xFFFFF104
 0000005A  6001      STR         R1,[R0,#0x0]
   32:    VICIntEnable = 0x00000040;           // 使能UART0中断
 0000005C  2140      MOV         R1,#0x40
 0000005E  4800      LDR         R0,=0xFFFFF010
 00000060  6001      STR         R1,[R0,#0x0]
 00000062            ; SCOPE-END
   34: }
 00000062  BC08      POP         {R3}
 00000064  4718      BX          R3
 00000066          ENDP ; 'UART0_Ini?T'


*** CODE SEGMENT '?PR?UART0_SendByte?T?UART0':
   42: void  UART0_SendByte(uint8 data)
 00000000  1C02      MOV         R2,R0 ; data
 00000002  ---- Variable 'data' assigned to Register 'R2' ----
   43: {  U0THR = data;                    // 发送数据
 00000002  1C11      MOV         R1,R2 ; data
 00000004  4800      LDR         R0,=0xE000C000
 00000006  7001      STRB        R1,[R0,#0x0]
   45:    while( (U0LSR&0x40)==0 );        // 等待数据发送完毕
 00000008          L_1:
 00000008  4800      LDR         R0,=0xE000C014
 0000000A  7800      LDRB        R0,[R0,#0x0]
 0000000C  2140      MOV         R1,#0x40
 0000000E  4208      TST         R0,R1
 00000010  D0FA      BEQ         L_1  ; T=0x00000008
   46: }
 00000012  4770      BX          R14
 00000014          ENDP ; 'UART0_SendByte?T'


*** CODE SEGMENT '?PR?UART0_SendStr?T?UART0':
   54: void  UART0_SendStr(uint8 const *str)
 00000000  B500      PUSH        {LR}
 00000002  1C03      MOV         R3,R0 ; str
 00000004  ---- Variable 'str' assigned to Register 'R3' ----
   55: {  while(1)
 00000004          L_7:
   56:    {  if( *str == '\0' ) break;
 00000004  1C18      MOV         R0,R3 ; str
 00000006  7800      LDRB        R0,[R0,#0x0] ; str
 00000008  2800      CMP         R0,#0x0
 0000000A  D005      BEQ         L_6  ; T=0x00000018
   57:       UART0_SendByte(*str++);       // 发送数据
 0000000C  1C18      MOV         R0,R3 ; str
 0000000E  3301      ADD         R3,#0x1
 00000010  7800      LDRB        R0,[R0,#0x0] ; str
 00000012  F7FF      BL          UART0_SendByte?T  ; T=0x0001  (1)
 00000014  FFF5      BL          UART0_SendByte?T  ; T=0x0001  (2)
   58:    }
 00000016  E7F5      B           L_7  ; T=0x00000004
 00000018          L_6:
   59: }
 00000018  BC08      POP         {R3}
 0000001A  4718      BX          R3
 0000001C          ENDP ; 'UART0_SendStr?T'



Module Information          Static
----------------------------------
  code size            =    ------
  data size            =    ------
  const size           =    ------
ARM COMPILER V2.40a,  UART0                                                                19/07/07  01:23:00  PAGE 4   

End of Module Information.


ARM COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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