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

📄 serial.lst

📁 基于keil环境
💻 LST
字号:
ARM COMPILER V2.51a,  Serial                                                               19/07/06  11:31:51  PAGE 1   


ARM COMPILER V2.51a, COMPILATION OF MODULE Serial
OBJECT MODULE PLACED IN Serial.OBJ
COMPILER INVOKED BY: D:\Embedded\KeilC\ARM\BIN\CA.exe Serial.c THUMB DEBUG TABS(4) 

stmt  level    source

    1          /*************************************************************************
    2          * File Name:Serial.c
    3          * Description:串口DMA发送方式通信--CPU工作频率为60MHz(开发板外接8MHz),波
    4          *              特率为19200bps,字符长度8位,奇偶校验位无,停止位1位。允许
    5          *              UART发送DMA,启用FIFO,发送FIFO触发DMA级别为空。不使用Modem
    6          *              自动流控。采用DMA方式通信。
    7          * Date:2006-07-19
    8          *************************************************************************/
    9          
   10          // 中断控制器寄存器定义
   11          #define INTCON      (*(volatile unsigned *)0x01E00000)
   12          #define INTPND      (*(volatile unsigned *)0x01E00004)
   13          #define INTMOD      (*(volatile unsigned *)0x01E00008)
   14          #define INTMSK      (*(volatile unsigned *)0x01E0000C)
   15          #define I_ISPC      (*(volatile unsigned *)0x01E00024)
   16          
   17          // DMA控制器寄存器定义
   18          #define BDCON0      (*(volatile unsigned *)0x01F80000)
   19          #define BDISRC0     (*(volatile unsigned *)0x01F80004)
   20          #define BDIDES0     (*(volatile unsigned *)0x01F80008)
   21          #define BDICNT0     (*(volatile unsigned *)0x01F8000C)
   22          #define BDCSRC0     (*(volatile unsigned *)0x01F80010)
   23          #define BDCDES0     (*(volatile unsigned *)0x01F80014)
   24          #define BDCCNT0     (*(volatile unsigned *)0x01F80018)
   25          
   26          // UART寄存器定义
   27          #define ULCON0      (*(volatile unsigned *)0x01D00000)
   28          #define UCON0       (*(volatile unsigned *)0x01D00004)
   29          #define UFCON0      (*(volatile unsigned *)0x01D00008)
   30          #define UMCON0      (*(volatile unsigned *)0x01D0000C)
   31          #define UTRSTAT0    (*(volatile unsigned *)0x01D00010)
   32          #define UERSTAT0    (*(volatile unsigned *)0x01D00014)
   33          #define UFSTAT0     (*(volatile unsigned *)0x01D00018)
   34          #define UMSTAT0     (*(volatile unsigned *)0x01D0001C)
   35          #define UTXH0       (*(volatile unsigned *)0x01D00020)
   36          #define URXH0       (*(volatile unsigned *)0x01D00024) 
   37          #define UBRDIV0     (*(volatile unsigned *)0x01D00028)
   38          
   39          #define MCLK 60000000   /* Master Clock */
   40          #define BR      19200   /* Baud Rate */
   41          #define BRD ((int)(MCLK/16.0/BR+0.5)-1) /* Baud Rate Divisor */
   42          #define TXDATA_SIZE     0xFF 
   43          
   44          void uart_init(void);       // Uart初始化
   45          void isr_init(void);        // 中断控制器初始化
   46          void dmac_init(void);       // DMA控制器初始化
   47          
   48          unsigned char txdata[TXDATA_SIZE];  // 发送缓冲区
   49          
   50          
   51          void main()
   52          {
   53   1          unsigned int k;
   54   1          
   55   1          // 初始化发送缓冲区
   56   1          for(k=0; k<TXDATA_SIZE; k++)
   57   1              txdata[k] = (unsigned char)k;
   58   1      
   59   1          uart_init( );       // Uart初始化
ARM COMPILER V2.51a,  Serial                                                               19/07/06  11:31:51  PAGE 2   

   60   1          isr_init( );        // 中断控制器初始化
   61   1          dmac_init( );       // DMA控制器初始化
   62   1          
   63   1          while(1)            // 死循环,等待中断
   64   1          {
   65   2          }
   66   1      }
   67          
   68          
   69          // 串口初始化
   70          void uart_init(void)
   71          {
   72   1          UBRDIV0 = BRD;          // 19200bps
   73   1          ULCON0 = 0x03;          // 帧长度8位,停止位1位,无校验
   74   1          UCON0 = 0x008;          // 发送BDMA0允许
   75   1          UFCON0 = 0x21;          // 启用FIFO,发送FIFO触发级别为空
   76   1      }
   77          
   78          
   79          // 中断控制器初始化
   80          void isr_init(void)
   81          {
   82   1          INTMSK &= 0x03FDFFFF;   // Global Interrupt Enable
   83   1                                  // BDMA0 Interrupt Enable
   84   1          INTCON  =  0x01;        // Disable FIQ, Enable IRQ, 
   85   1                                  // IRQ Vectored Interrupt Mode
   86   1      }
   87          
   88          
   89          // DMA控制器初始化
   90          void dmac_init(void)
   91          {
   92   1          // BDMA0 Initialize---UART Tx
   93   1          BDISRC0=(0<<30)+(1<<28)+(int)txdata;    // byte,inc,txdata
   94   1          BDIDES0=(1<<30)+(3<<28)+(int)(UTXH0);   // M2IO,fix,UTXH0
   95   1          // UART,reserved,TC,no reload,DMA disable,COUNT
   96   1          BDICNT0=(2<<30)+(1<<26)+(3<<22)+(0<<21)+(0<<20)+TXDATA_SIZE;
   97   1          BDICNT0 |= (1<<20);// DMA enable
   98   1          BDCON0 = 0x0<<2;
   99   1      }
  100          
  101          // 终止计数,则引起BDMA0中断,就会执行下面HandlerBDMA0中断服务子程序,
  102          // BDMA0重新初始化——UART接着重新发送
  103          /* BDMA0 Interrupt Handler */
  104          void HandlerBDMA0(void) __irq
  105          {
  106   1          I_ISPC = (1<<17);       // 清除BDMA0 Interrupt
  107   1          BDISRC0=(0<<30)+(1<<28)+(int)txdata;    // byte,inc,txdata
  108   1          BDIDES0=(1<<30)+(3<<28)+(int)(UTXH0);   // M2IO,fix,UTXH0
  109   1          // UART,reserved,TC,no reload,DMA disable,COUNT
  110   1          BDICNT0=(2<<30)+(1<<26)+(3<<22)+(0<<21)+(0<<20)+TXDATA_SIZE;
  111   1          BDICNT0 |= (1<<20);// DMA enable
  112   1          BDCON0 = 0x0<<2;
  113   1      }
ARM COMPILER V2.51a,  Serial                                                               19/07/06  11:31:51  PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN NUMBER (__startup)



*** PUBLICS:
 PUBLIC         uart_init?T
 PUBLIC         isr_init?T
 PUBLIC         dmac_init?T
 PUBLIC         main
 PUBLIC         HandlerBDMA0?A
 PUBLIC         txdata



*** DATA SEGMENT '?DT0?Serial':
 00000000          txdata:
 00000000            DS          255



*** CODE SEGMENT '?PR?main?Serial':
   51: void main()
 00000000  B500      PUSH        {LR}
   52: {
 00000002            ; SCOPE-START
   56:     for(k=0; k<TXDATA_SIZE; k++)
 00000002  2000      MOV         R0,#0x0
 00000004  ---- Variable 'k' assigned to Register 'R0' ----
 00000004          L_4:
   57:         txdata[k] = (unsigned char)k;
 00000004  1C01      MOV         R1,R0 ; k
 00000006  0609      LSL         R1,R1,#0x18 ; k
 00000008  0E09      LSR         R1,R1,#0x18
 0000000A  1C03      MOV         R3,R0 ; k
 0000000C  4800      LDR         R2,=txdata ; txdata
 0000000E  54D1      STRB        R1,[R2,R3]
 00000010  3001      ADD         R0,#0x1
 00000012  1C01      MOV         R1,R0 ; k
 00000014  29FF      CMP         R1,#0xFF ; k
 00000016  D3F5      BCC         L_4  ; T=0x00000004
   59:     uart_init( );       // Uart初始化
 00000018  F7FF      BL          uart_init?T  ; T=0x0001  (1)
 0000001A  FFF2      BL          uart_init?T  ; T=0x0001  (2)
   60:     isr_init( );        // 中断控制器初始化
 0000001C  F7FF      BL          isr_init?T  ; T=0x0001  (1)
 0000001E  FFF0      BL          isr_init?T  ; T=0x0001  (2)
   61:     dmac_init( );       // DMA控制器初始化
 00000020  F7FF      BL          dmac_init?T  ; T=0x0001  (1)
 00000022  FFEE      BL          dmac_init?T  ; T=0x0001  (2)
   65:     }
 00000024          L_6:
 00000024  E7FE      B           L_6  ; T=0x00000024
 00000026            ; SCOPE-END
   66: }
 00000026  BC08      POP         {R3}
 00000028  4718      BX          R3
 0000002A          ENDP ; 'main'


*** CODE SEGMENT '?PR?uart_init?T?Serial':
   72:     UBRDIV0 = BRD;          // 19200bps
 00000000  21C2      MOV         R1,#0xC2
 00000002  4800      LDR         R0,=0x1D00028
 00000004  6001      STR         R1,[R0,#0x0]
   73:     ULCON0 = 0x03;          // 帧长度8位,停止位1位,无校验
 00000006  2103      MOV         R1,#0x3
 00000008  4800      LDR         R0,=0x1D00000
 0000000A  6001      STR         R1,[R0,#0x0]
   74:     UCON0 = 0x008;          // 发送BDMA0允许
 0000000C  2108      MOV         R1,#0x8
ARM COMPILER V2.51a,  Serial                                                               19/07/06  11:31:51  PAGE 4   

 0000000E  4800      LDR         R0,=0x1D00004
 00000010  6001      STR         R1,[R0,#0x0]
   75:     UFCON0 = 0x21;          // 启用FIFO,发送FIFO触发级别为空
 00000012  2121      MOV         R1,#0x21
 00000014  4800      LDR         R0,=0x1D00008
 00000016  6001      STR         R1,[R0,#0x0]
   76: }
 00000018  4770      BX          R14
 0000001A          ENDP ; 'uart_init?T'


*** CODE SEGMENT '?PR?isr_init?T?Serial':
   82:     INTMSK &= 0x03FDFFFF;   // Global Interrupt Enable
 00000000  4800      LDR         R2,=0x3FDFFFF
 00000002  4800      LDR         R0,=0x1E0000C
 00000004  6801      LDR         R1,[R0,#0x0]
 00000006  4011      AND         R1,R2
 00000008  6001      STR         R1,[R0,#0x0]
   84:     INTCON  =  0x01;        // Disable FIQ, Enable IRQ, 
 0000000A  2101      MOV         R1,#0x1
 0000000C  4800      LDR         R0,=0x1E00000
 0000000E  6001      STR         R1,[R0,#0x0]
   86: }
 00000010  4770      BX          R14
 00000012          ENDP ; 'isr_init?T'


*** CODE SEGMENT '?PR?dmac_init?T?Serial':
   93:     BDISRC0=(0<<30)+(1<<28)+(int)txdata;    // byte,inc,txdata
 00000000  4800      LDR         R1,=txdata + 0x10000000 ; txdata+268435456
 00000002  4800      LDR         R0,=0x1F80004
 00000004  6001      STR         R1,[R0,#0x0]
   94:     BDIDES0=(1<<30)+(3<<28)+(int)(UTXH0);   // M2IO,fix,UTXH0
 00000006  4800      LDR         R0,=0x1D00020
 00000008  6801      LDR         R1,[R0,#0x0]
 0000000A  4800      LDR         R0,=0x70000000
 0000000C  1809      ADD         R1,R0
 0000000E  4800      LDR         R0,=0x1F80008
 00000010  6001      STR         R1,[R0,#0x0]
   96:     BDICNT0=(2<<30)+(1<<26)+(3<<22)+(0<<21)+(0<<20)+TXDATA_SIZE;
 00000012  4800      LDR         R1,=0x84C000FF
 00000014  4800      LDR         R0,=0x1F8000C
 00000016  6001      STR         R1,[R0,#0x0]
   97:     BDICNT0 |= (1<<20);// DMA enable
 00000018  4800      LDR         R2,=0x100000
 0000001A  4800      LDR         R0,=0x1F8000C
 0000001C  6801      LDR         R1,[R0,#0x0]
 0000001E  4311      ORR         R1,R2
 00000020  6001      STR         R1,[R0,#0x0]
   98:     BDCON0 = 0x0<<2;
 00000022  2100      MOV         R1,#0x0
 00000024  4800      LDR         R0,=0x1F80000
 00000026  6001      STR         R1,[R0,#0x0]
   99: }
 00000028  4770      BX          R14
 0000002A          ENDP ; 'dmac_init?T'


*** CODE SEGMENT '?PR?HandlerBDMA0?A?Serial':
  104: void HandlerBDMA0(void) __irq
 00000000  E92D0003  STMDB       R13!,{R0-R1}
  106:     I_ISPC = (1<<17);       // 清除BDMA0 Interrupt
 00000004  E3A01802  MOV         R1,#0x20000
 00000008  E5100000  LDR         R0,=0x1E00024
 0000000C  E5801000  STR         R1,[R0,#0x0]
  107:     BDISRC0=(0<<30)+(1<<28)+(int)txdata;    // byte,inc,txdata
 00000010  E5101000  LDR         R1,=txdata + 0x10000000 ; txdata+268435456
 00000014  E5100000  LDR         R0,=0x1F80004
 00000018  E5801000  STR         R1,[R0,#0x0]
  108:     BDIDES0=(1<<30)+(3<<28)+(int)(UTXH0);   // M2IO,fix,UTXH0
 0000001C  E5100000  LDR         R0,=0x1D00020
 00000020  E5901000  LDR         R1,[R0,#0x0]
ARM COMPILER V2.51a,  Serial                                                               19/07/06  11:31:51  PAGE 5   

 00000024  E2811207  ADD         R1,R1,#0x70000000
 00000028  E5100000  LDR         R0,=0x1F80008
 0000002C  E5801000  STR         R1,[R0,#0x0]
  110:     BDICNT0=(2<<30)+(1<<26)+(3<<22)+(0<<21)+(0<<20)+TXDATA_SIZE;
 00000030  E5101000  LDR         R1,=0x84C000FF
 00000034  E5100000  LDR         R0,=0x1F8000C
 00000038  E5801000  STR         R1,[R0,#0x0]
  111:     BDICNT0 |= (1<<20);// DMA enable
 0000003C  E5100000  LDR         R0,=0x1F8000C
 00000040  E5901000  LDR         R1,[R0,#0x0]
 00000044  E3811601  ORR         R1,R1,#0x100000
 00000048  E5801000  STR         R1,[R0,#0x0]
  112:     BDCON0 = 0x0<<2;
 0000004C  E3A01000  MOV         R1,#0x0
 00000050  E3A0077E  MOV         R0,#0x1F80000
 00000054  E5801000  STR         R1,[R0,#0x0]
  113: }
 00000058  E8BD0003  LDMIA       R13!,{R0-R1}
 0000005C  E25EF004  SUBS        R15,R14,#0x0004
 00000060          ENDP ; 'HandlerBDMA0?A'



Module Information          Static
----------------------------------
  code size            =    ------
  data size            =       255
  const size           =    ------
End of Module Information.


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

⌨️ 快捷键说明

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