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

📄 uart.lst

📁 看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 最近在ADuC7027上写了一个ARM_00_OS
💻 LST
📖 第 1 页 / 共 2 页
字号:
ARM COMPILER V2.50a,  UART                                                                 16/05/06  14:55:45  PAGE 1   


ARM COMPILER V2.50a, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN UART.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe UART.c THUMB WARNINGLEVEL(3) BROWSE DEBUG TABS(4) 

stmt  level    source

    1          /**********************************************************************
    2            UART.c file
    3            ADuC7027的串口函数
    4            作者:Computer-lov
    5            建立日期:2006-3-22
    6            修改日期:2006-5-11
    7            版本:V1.0
    8            版权所有,盗版必究。
    9            Copyright(C) Computer-lov 2006-2016
   10            All rights reserved
   11          **********************************************************************/
   12          
   13          #include <ADuC7027.H>
   14          #include "My_type.h"
   15          #include "UART.H"
   16          
   17          //////////////////////////////////////////////////////////////////////
   18          void UART_init(void)
   19          {  
   20   1       GP1CON=0x00000011; //P1.0 P1.1设置为串口功能
   21   1      
   22   1       COMIEN0=0x00;   //禁止所有串口中断
   23   1      
   24   1      #define BitRate 57600
   25   1      
   26   1      #if (BitRate==19200) || (BitRate==9600)
                COMCON0=0x83;   //1 stop bit,8 data bits  最高位置1,寻址COMDIV1寄存器
                COMDIV1=0x00;
                COMDIV2=0x0000;
               #if BitRate==19200
                COMDIV0=0x44;   //19200 bps
               #else
                COMDIV0=0x88;  //9600bps                  
               #endif
                COMCON0=0x03;   //最高位置0,寻址COMTX寄存器。
                                //因为COMTX寄存器跟COMDIV1寄存器共用一个地址,由COMCON0的最高位选择
               #endif
   38   1      
   39   1      #if BitRate==57600
   40   1      
   41   1       COMCON0=0x83;   //1 stop bit,8 data bits  最高位置1,寻址COMDIV1寄存器
   42   1       COMDIV1=0x00;
   43   1       COMDIV2=0x426+(2<<11)+0x8000;   //M=2,N=0x642
   44   1       COMDIV0=0x09;
   45   1       COMCON0=0x03;   //最高位置0,寻址COMTX寄存器。
   46   1                       //因为COMTX寄存器跟COMDIV1寄存器共用一个地址,由COMCON0的最高位选择 
   47   1      #endif
   48   1      }
   49          //////////////////////////////////////////////////////////////////////
   50          
   51          //////////////////////////////////////////////////////////////////////
   52          void send_a_byte(uint8 a_byte)
   53          {
   54   1       while(!(COMSTA0 & 0x40));  //等待发送完毕
   55   1       COMTX=a_byte;
   56   1      }
   57          //////////////////////////////////////////////////////////////////////
   58          
   59          ////////////////////////////// 发送一个字符串 ///////////////////////////////////////////
ARM COMPILER V2.50a,  UART                                                                 16/05/06  14:55:45  PAGE 2   

   60          //////////////////入口参数: s-要发送的字符串的指针(字符串长度不得大于255)/////////////
   61          /////////////////////////////////////    newline-是否需要换行  0-不换行  非0-换行////////
   62          void prints(uint8 * s,uint32 newline)
   63          {
   64   1       unsigned char i;
   65   1       i=0;
   66   1       while(s[i]!=0)    //判断字符串是否结束
   67   1        {
   68   2         while(!(COMSTA0 & 0x40));  //等待发送完毕
   69   2         COMTX=s[i];
   70   2         i++;            //移到下字节
   71   2        }
   72   1       if(newline)       //如果需要换行
   73   1        {
   74   2         send_a_byte(13);
   75   2         send_a_byte(10);   //发送回车换行
   76   2        }
   77   1      }
   78          ////////////////////////////////////////////////////////////////////////////////////////////
   79          
   80          /////////////////////////////////////////////////////////////////////////////////
   81          void cls(void)
   82          {
   83   1       send_a_byte(0x0C);   //超级终端清屏指令
   84   1       send_a_byte(0x0C);
   85   1      }
   86          //////////////////////////////////////////////////////////////////////////////////
   87          
   88          
   89          //转换成十六进制时用的表
   90          const uint8 HEX_TABLE[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
   91          
   92          //////////////////////////将一个16位的整数按十六进制发到串口/////////////////////////////////
   93          void print_uint16(uint16 number)
   94          {
   95   1       send_a_byte('0');              //发送0x
   96   1       send_a_byte('x');
   97   1       send_a_byte(HEX_TABLE[(number>>12) & 0x0F]);  //依次发送各部分
   98   1       send_a_byte(HEX_TABLE[(number>>8)  & 0x0F]);
   99   1       send_a_byte(HEX_TABLE[(number>>4)  & 0x0F]);
  100   1       send_a_byte(HEX_TABLE[(number)     & 0x0F]);
  101   1       send_a_byte(' ');
  102   1      }
  103          //////////////////////////////////////////////////////////////////////////////////
  104          
  105          /////////////////////////将一个32位的整数按十进制发送到串口/////////////////////////////
  106          void print_uint32(uint32 number)
  107          {
  108   1       uint8 buf[12];
  109   1       uint32 i;
  110   1       
  111   1       for(i=0;i<10;i++)   //转换成字符串
  112   1        {
  113   2         buf[9-i]=(number%10)+'0';
  114   2         number/=10;
  115   2        }
  116   1       for(i=0;i<9;i++)    //将前面的0转换成空格
  117   1        {
  118   2         if(buf[i]=='0')
  119   2          {
  120   3           buf[i]=' ';
  121   3          }
  122   2         else
  123   2          {
  124   3           break;
  125   3          }
ARM COMPILER V2.50a,  UART                                                                 16/05/06  14:55:45  PAGE 3   

  126   2        }
  127   1       buf[10]=' ';
  128   1       buf[11]=0;       //字符串结束符
  129   1       prints(buf,0);
  130   1      }
  131          //////////////////////////////////////////////////////////////////////////////////////////
  132          
ARM COMPILER V2.50a,  UART                                                                 16/05/06  14:55:45  PAGE 4   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE16 (?C?UDIV?T)



*** PUBLICS:
 PUBLIC         UART_init?T
 PUBLIC         send_a_byte?T
 PUBLIC         prints?T
 PUBLIC         cls?T
 PUBLIC         print_uint16?T
 PUBLIC         print_uint32?T
 PUBLIC         HEX_TABLE



*** DATA SEGMENT '?CON?UART':
 00000000          HEX_TABLE:
 00000000           BEGIN_INIT
 00000000  30        DB          0x30
 00000001  31        DB          0x31
 00000002  32        DB          0x32
 00000003  33        DB          0x33
 00000004  34        DB          0x34
 00000005  35        DB          0x35
 00000006  36        DB          0x36
 00000007  37        DB          0x37
 00000008  38        DB          0x38
 00000009  39        DB          0x39
 0000000A  41        DB          0x41
 0000000B  42        DB          0x42
 0000000C  43        DB          0x43
 0000000D  44        DB          0x44
 0000000E  45        DB          0x45
 0000000F  46        DB          0x46
 00000010           END_INIT



*** CODE SEGMENT '?PR?UART_init?T?UART':
   20:  GP1CON=0x00000011; //P1.0 P1.1设置为串口功能
 00000000  2111      MOV         R1,#0x11
 00000002  4800      LDR         R0,=0xFFFFF404
 00000004  6001      STR         R1,[R0,#0x0]
   22:  COMIEN0=0x00;   //禁止所有串口中断
 00000006  2100      MOV         R1,#0x0
 00000008  4800      LDR         R0,=0xFFFF0704
 0000000A  6001      STR         R1,[R0,#0x0]
   41:  COMCON0=0x83;   //1 stop bit,8 data bits  最高位置1,寻址COMDIV1寄存器
 0000000C  2283      MOV         R2,#0x83
 0000000E  4800      LDR         R0,=0xFFFF070C
 00000010  6002      STR         R2,[R0,#0x0]
   42:  COMDIV1=0x00;
 00000012  4800      LDR         R0,=0xFFFF0704
 00000014  6001      STR         R1,[R0,#0x0]
   43:  COMDIV2=0x426+(2<<11)+0x8000;   //M=2,N=0x642
 00000016  4800      LDR         R1,=0x9426
 00000018  4800      LDR         R0,=0xFFFF072C
 0000001A  6001      STR         R1,[R0,#0x0]
   44:  COMDIV0=0x09;
 0000001C  2109      MOV         R1,#0x9
 0000001E  4800      LDR         R0,=0xFFFF0700
 00000020  6001      STR         R1,[R0,#0x0]
   45:  COMCON0=0x03;   //最高位置0,寻址COMTX寄存器。
 00000022  2103      MOV         R1,#0x3
 00000024  4800      LDR         R0,=0xFFFF070C
 00000026  6001      STR         R1,[R0,#0x0]
   48: }
 00000028  4770      BX          R14
ARM COMPILER V2.50a,  UART                                                                 16/05/06  14:55:45  PAGE 5   

 0000002A          ENDP ; 'UART_init?T'


*** CODE SEGMENT '?PR?send_a_byte?T?UART':
   52: void send_a_byte(uint8 a_byte)
 00000000  1C01      MOV         R1,R0 ; a_byte
 00000002  ---- Variable 'a_byte' assigned to Register 'R1' ----
   54:  while(!(COMSTA0 & 0x40));  //等待发送完毕
 00000002          L_1:
 00000002  4800      LDR         R0,=0xFFFF0714
 00000004  6800      LDR         R0,[R0,#0x0]
 00000006  2240      MOV         R2,#0x40
 00000008  4210      TST         R0,R2
 0000000A  D0FA      BEQ         L_1  ; T=0x00000002
   55:  COMTX=a_byte;
 0000000C  1C08      MOV         R0,R1 ; a_byte
 0000000E  0601      LSL         R1,R0,#0x18 ; a_byte
 00000010  0E09      LSR         R1,R1,#0x18
 00000012  4800      LDR         R0,=0xFFFF0700
 00000014  6001      STR         R1,[R0,#0x0]
   56: }
 00000016  4770      BX          R14
 00000018          ENDP ; 'send_a_byte?T'

⌨️ 快捷键说明

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