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

📄 rs232.lst

📁 lpc2148的uart代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
###############################################################################
#                                                                             #
#                                                       18/Apr/2009  12:13:10 #
# IAR ARM ANSI C/C++ Compiler V5.11.0.30622/W32 KICKSTART                     #
# Copyright 1999-2007 IAR Systems. All rights reserved.                       #
#                                                                             #
#    Cpu mode     =  thumb                                                    #
#    Endian       =  little                                                   #
#    Source file  =  J:\IAR5\LPC2148_UART\src\rs232.c                         #
#    Command line =  J:\IAR5\LPC2148_UART\src\rs232.c -lCN                    #
#                    J:\IAR5\LPC2148_UART\Debug\List\ -o                      #
#                    J:\IAR5\LPC2148_UART\Debug\Obj\ --no_cse --no_unroll     #
#                    --no_inline --no_code_motion --no_tbaa --no_clustering   #
#                    --no_scheduling --debug --endian little --cpu            #
#                    ARM7TDMI-S -e --fpu None --dlib_config "C:\Program       #
#                    Files\IAR Systems\Embedded Workbench 5.0                 #
#                    Kickstart\ARM\INC\DLib_Config_Normal.h" -I               #
#                    J:\IAR5\LPC2148_UART\include\ -I "C:\Program Files\IAR   #
#                    Systems\Embedded Workbench 5.0 Kickstart\ARM\INC\"       #
#                    --interwork --cpu_mode thumb -Ol                         #
#    List file    =  J:\IAR5\LPC2148_UART\Debug\List\rs232.lst                #
#    Object file  =  J:\IAR5\LPC2148_UART\Debug\Obj\rs232.o                   #
#                                                                             #
#                                                                             #
###############################################################################

J:\IAR5\LPC2148_UART\src\rs232.c
      1          //rs232.c
      2          #include "rs232.h"
      3          
      4          /**** UART0 ****/

   \                                 In section .text, align 4, keep-with-next
      5          void UART0Initialize(unsigned int baud) {
   \                     UART0Initialize:
   \   00000000   10B5               PUSH     {R4,LR}
   \   00000002   0400               MOVS     R4,R0
      6            unsigned int divisor = GetPclk() / (16 * baud);
   \   00000004   ........           BL       GetPclk
   \   00000008   1021               MOVS     R1,#+16
   \   0000000A   4C43               MULS     R4,R1,R4
   \   0000000C   2100               MOVS     R1,R4
   \   0000000E   ........           BL       __aeabi_uidivmod
      7            // 设置行控制寄存器
      8            U0LCR_bit.WLS   = 0x3;    // 8位数据
   \   00000012   1C49               LDR      R1,??UART0Initialize_0  ;; 0xe000c00c
   \   00000014   0978               LDRB     R1,[R1, #+0]
   \   00000016   0322               MOVS     R2,#+3
   \   00000018   0A43               ORRS     R2,R2,R1
   \   0000001A   1A49               LDR      R1,??UART0Initialize_0  ;; 0xe000c00c
   \   0000001C   0A70               STRB     R2,[R1, #+0]
      9            U0LCR_bit.SBS   = 0x0;    // 1位停止位
   \   0000001E   1949               LDR      R1,??UART0Initialize_0  ;; 0xe000c00c
   \   00000020   0978               LDRB     R1,[R1, #+0]
   \   00000022   FB22               MOVS     R2,#+251
   \   00000024   0A40               ANDS     R2,R2,R1
   \   00000026   1749               LDR      R1,??UART0Initialize_0  ;; 0xe000c00c
   \   00000028   0A70               STRB     R2,[R1, #+0]
     10            U0LCR_bit.PE    = 0x0;    // 无校验
   \   0000002A   1649               LDR      R1,??UART0Initialize_0  ;; 0xe000c00c
   \   0000002C   0978               LDRB     R1,[R1, #+0]
   \   0000002E   F722               MOVS     R2,#+247
   \   00000030   0A40               ANDS     R2,R2,R1
   \   00000032   1449               LDR      R1,??UART0Initialize_0  ;; 0xe000c00c
   \   00000034   0A70               STRB     R2,[R1, #+0]
     11            U0LCR_bit.DLAB  = 0x1;    // 允许DLAB
   \   00000036   1349               LDR      R1,??UART0Initialize_0  ;; 0xe000c00c
   \   00000038   0978               LDRB     R1,[R1, #+0]
   \   0000003A   8022               MOVS     R2,#+128
   \   0000003C   0A43               ORRS     R2,R2,R1
   \   0000003E   1149               LDR      R1,??UART0Initialize_0  ;; 0xe000c00c
   \   00000040   0A70               STRB     R2,[R1, #+0]
     12            // 除法因子
     13            U0DLL = divisor & 0xFF;
   \   00000042   ....               LDR      R1,??DataTable12  ;; 0xe000c000
   \   00000044   0200               MOVS     R2,R0
   \   00000046   0A70               STRB     R2,[R1, #+0]
     14            U0DLM = (divisor >> 8) & 0xFF;
   \   00000048   000A               LSRS     R0,R0,#+8
   \   0000004A   0006               LSLS     R0,R0,#+24       ;; ZeroExtS R0,R0,#+24,#+24
   \   0000004C   000E               LSRS     R0,R0,#+24
   \   0000004E   0E49               LDR      R1,??UART0Initialize_0+0x4  ;; 0xe000c004
   \   00000050   0860               STR      R0,[R1, #+0]
     15            U0LCR &= ~0x80;
   \   00000052   0C48               LDR      R0,??UART0Initialize_0  ;; 0xe000c00c
   \   00000054   0078               LDRB     R0,[R0, #+0]
   \   00000056   4006               LSLS     R0,R0,#+25       ;; ZeroExtS R0,R0,#+25,#+25
   \   00000058   400E               LSRS     R0,R0,#+25
   \   0000005A   0A49               LDR      R1,??UART0Initialize_0  ;; 0xe000c00c
   \   0000005C   0870               STRB     R0,[R1, #+0]
     16            //配置引脚功能:  port0.0 -> TX0,  port0.1 -> RXD0
     17            PINSEL0_bit.P0_0 = 0x1;
   \   0000005E   ....               LDR      R0,??DataTable17  ;; 0xe002c000
   \   00000060   0068               LDR      R0,[R0, #+0]
   \   00000062   0321               MOVS     R1,#+3
   \   00000064   8843               BICS     R0,R0,R1
   \   00000066   0121               MOVS     R1,#+1
   \   00000068   0143               ORRS     R1,R1,R0
   \   0000006A   ....               LDR      R0,??DataTable17  ;; 0xe002c000
   \   0000006C   0160               STR      R1,[R0, #+0]
     18            PINSEL0_bit.P0_1 = 0x1;
   \   0000006E   ....               LDR      R0,??DataTable17  ;; 0xe002c000
   \   00000070   0068               LDR      R0,[R0, #+0]
   \   00000072   0C21               MOVS     R1,#+12
   \   00000074   8843               BICS     R0,R0,R1
   \   00000076   0421               MOVS     R1,#+4
   \   00000078   0143               ORRS     R1,R1,R0
   \   0000007A   ....               LDR      R0,??DataTable17  ;; 0xe002c000
   \   0000007C   0160               STR      R1,[R0, #+0]
     19          }
   \   0000007E   10BC               POP      {R4}
   \   00000080   01BC               POP      {R0}
   \   00000082   0047               BX       R0               ;; return
   \                     ??UART0Initialize_0:
   \   00000084   0CC000E0           DC32     0xe000c00c
   \   00000088   04C000E0           DC32     0xe000c004
   \   0000008C                      REQUIRE _A_PINSEL0
   \   0000008C                      REQUIRE U0RBRTHR
   \   0000008C                      REQUIRE _A_U0IER
   \   0000008C                      REQUIRE _A_U0LCR
     20          

   \                                 In section .text, align 4, keep-with-next
     21          void UART0WriteChar(unsigned char ch0) {
   \                     UART0WriteChar:
   \   00000000   01B5               PUSH     {R0,LR}
     22            //当 U0LSR_bit.THRE = 0 时, U0THR 包含有效数据
     23            while (U0LSR_bit.THRE == 0);
   \                     ??UART0WriteChar_0:
   \   00000002   ....               LDR      R1,??DataTable11  ;; 0xe000c014
   \   00000004   0978               LDRB     R1,[R1, #+0]
   \   00000006   8906               LSLS     R1,R1,#+26
   \   00000008   FBD5               BPL      ??UART0WriteChar_0
     24            U0THR = ch0;
   \   0000000A   ....               LDR      R1,??DataTable12  ;; 0xe000c000
   \   0000000C   0870               STRB     R0,[R1, #+0]
     25          }
   \   0000000E   08BC               POP      {R3}
   \   00000010   01BC               POP      {R0}
   \   00000012   0047               BX       R0               ;; return
   \   00000014                      REQUIRE U0RBRTHR
   \   00000014                      REQUIRE _A_U0LSR
     26          

   \                                 In section .text, align 4, keep-with-next
     27          unsigned char UART0ReadChar(void) {
   \                     UART0ReadChar:
   \   00000000   01B5               PUSH     {R0,LR}
     28            //当 U0LSR_bit.DR = 1 时, U0RBR 包含有效数据
     29            while (U0LSR_bit.DR == 0);
   \                     ??UART0ReadChar_0:
   \   00000002   ....               LDR      R0,??DataTable11  ;; 0xe000c014
   \   00000004   0078               LDRB     R0,[R0, #+0]
   \   00000006   C007               LSLS     R0,R0,#+31
   \   00000008   FBD5               BPL      ??UART0ReadChar_0
     30            return U0RBR;
   \   0000000A   ....               LDR      R0,??DataTable12  ;; 0xe000c000
   \   0000000C   0078               LDRB     R0,[R0, #+0]
   \   0000000E   0006               LSLS     R0,R0,#+24       ;; ZeroExtS R0,R0,#+24,#+24
   \   00000010   000E               LSRS     R0,R0,#+24
   \   00000012   08BC               POP      {R3}
   \   00000014   02BC               POP      {R1}
   \   00000016   0847               BX       R1               ;; return
   \   00000018                      REQUIRE U0RBRTHR
   \   00000018                      REQUIRE _A_U0LSR
     31          }
     32          

   \                                 In section .text, align 4, keep-with-next
     33          unsigned char UART0ReadChar_nostop(void) {
   \                     UART0ReadChar_nostop:
   \   00000000   01B5               PUSH     {R0,LR}
     34            //当 U0LSR_bit.DR = 1 时, U0RBR 包含有效数据
     35            if(U0LSR_bit.DR == 1) return U0RBR;
   \   00000002   ....               LDR      R0,??DataTable11  ;; 0xe000c014
   \   00000004   0078               LDRB     R0,[R0, #+0]
   \   00000006   C007               LSLS     R0,R0,#+31
   \   00000008   04D5               BPL      ??UART0ReadChar_nostop_0
   \   0000000A   ....               LDR      R0,??DataTable12  ;; 0xe000c000
   \   0000000C   0078               LDRB     R0,[R0, #+0]
   \   0000000E   0006               LSLS     R0,R0,#+24       ;; ZeroExtS R0,R0,#+24,#+24
   \   00000010   000E               LSRS     R0,R0,#+24
   \   00000012   00E0               B        ??UART0ReadChar_nostop_1
     36            else return 0;
   \                     ??UART0ReadChar_nostop_0:
   \   00000014   0020               MOVS     R0,#+0
   \                     ??UART0ReadChar_nostop_1:
   \   00000016   08BC               POP      {R3}
   \   00000018   02BC               POP      {R1}
   \   0000001A   0847               BX       R1               ;; return
   \   0000001C                      REQUIRE U0RBRTHR
   \   0000001C                      REQUIRE _A_U0LSR
     37          }
     38          

   \                                 In section .text, align 4, keep-with-next
     39          void UART0WriteChar_nostop(unsigned char ch0) {
   \                     UART0WriteChar_nostop:
   \   00000000   01B5               PUSH     {R0,LR}
     40            //当 U0LSR_bit.THRE = 0 时, U0THR 包含有效数据
     41            if(U0LSR_bit.THRE == 1) U0THR = ch0;
   \   00000002   ....               LDR      R1,??DataTable11  ;; 0xe000c014
   \   00000004   0978               LDRB     R1,[R1, #+0]
   \   00000006   8906               LSLS     R1,R1,#+26
   \   00000008   01D5               BPL      ??UART0WriteChar_nostop_0
   \   0000000A   ....               LDR      R1,??DataTable12  ;; 0xe000c000
   \   0000000C   0870               STRB     R0,[R1, #+0]
     42          }
   \                     ??UART0WriteChar_nostop_0:
   \   0000000E   08BC               POP      {R3}
   \   00000010   01BC               POP      {R0}
   \   00000012   0047               BX       R0               ;; return
   \   00000014                      REQUIRE U0RBRTHR
   \   00000014                      REQUIRE _A_U0LSR
     43          
     44          /**** UART1 ****/

   \                                 In section .text, align 4, keep-with-next
     45          void UART1Initialize(unsigned int baud) {
   \                     UART1Initialize:
   \   00000000   10B5               PUSH     {R4,LR}
   \   00000002   0400               MOVS     R4,R0
     46            unsigned int divisor = GetPclk() / (16 * baud);
   \   00000004   ........           BL       GetPclk
   \   00000008   1021               MOVS     R1,#+16
   \   0000000A   4C43               MULS     R4,R1,R4
   \   0000000C   2100               MOVS     R1,R4
   \   0000000E   ........           BL       __aeabi_uidivmod
     47            // 设置行控制寄存器
     48            U1LCR_bit.WLS   = 0x3;    // 8位数据
   \   00000012   1D49               LDR      R1,??UART1Initialize_0  ;; 0xe001000c
   \   00000014   0978               LDRB     R1,[R1, #+0]
   \   00000016   0322               MOVS     R2,#+3
   \   00000018   0A43               ORRS     R2,R2,R1
   \   0000001A   1B49               LDR      R1,??UART1Initialize_0  ;; 0xe001000c
   \   0000001C   0A70               STRB     R2,[R1, #+0]
     49            U1LCR_bit.SBS   = 0x0;    // 1位停止位

⌨️ 快捷键说明

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