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

📄 time.lst

📁 飞利浦ARM7 LPC2103 示例程序
💻 LST
字号:
ARM COMPILER V2.51a,  Time                                                                 12/06/06  20:31:56  PAGE 1   


ARM COMPILER V2.51a, COMPILATION OF MODULE Time
OBJECT MODULE PLACED IN .\ram\Time.obj
COMPILER INVOKED BY: f:\Keilarm\ARM\BIN\CA.exe Time.c THUMB OPTIMIZE(7,SPEED) BROWSE DEBUG PRINT(.\RAM\TIME.LST) TABS(4)
                    - OBJECT(.\ram\Time.obj) 

stmt  level    source

    1          //文件名:Time.c
    2          //功能:  定时器Timer0的初始化以及定时器中断函数和延时函数
    3          //更多内容,敬请访问www.icdev.com.cn/bbs
    4          
    5          #include <LPC210x.H>                          
    6          #include "Timer.h"
    7          
    8          
    9          long timeval;  //延时用的全局变量
   10          
   11          /************************************************************/
   12          /*  函数名称 :   tc0                                        */
   13          /*  函数功能 : 定时器中断函数,每进入一次中断,timeval加1  */
   14          /*  参数     :  无                                          */
   15          /*  返回值   :  无                                          */
   16          /*----------------------------------------------------------*/
   17          
   18          void tc0 (void) __irq  
   19          {
   20   1            ++timeval;
   21   1            T0IR        = 1;                            // 清除中断标志
   22   1            VICVectAddr = 0;                            // 对VICVectAddr执行写操作,通知VIC中断处理结束
   23   1      }
   24          
   25          
   26          /**********************************************************************/
   27          /*  函数名称 :   init_timer                                           */
   28          /*  函数功能 : 定时器timer0的初始化,包括计数初值,设置中断优先级等  */
   29          /*  参数     :  无                                                    */
   30          /*  返回值   :  无                                                    */
   31          /*--------------------------------------------------------------------*/
   32          void init_timer (void) 
   33          {
   34   1            T0MR0 = 13823;//1ms的计数初值,当前处理器的时钟频率为11.0592 * 5 = 55.296M,具体设置见startup.s
   35   1            T0MCR = 3;    // 设置T0MR0匹配后复位T0TC,并产生中断标志
   36   1            T0TCR = 1;    //启动定时器                              
   37   1            VICVectAddr0 = (unsigned long)tc0;//设置中断服务程序的地址          
   38   1            VICVectCntl0 = 0x20 | 4;//分配timer0中断到中断向量0                    
   39   1            VICIntEnable = 0x00000010;//timer0中断使能                 
   40   1      }
   41          
   42          
   43          /**********************************************************************/
   44          /*  函数名称 :   wait                                                 */
   45          /*  函数功能 : 延时函数                                              */
   46          /*  参数     :  ms,单位ms(毫秒)                                    */
   47          /*  返回值   :  无                                                    */
   48          /*--------------------------------------------------------------------*/
   49          void wait (unsigned int ms)  
   50          {                             
   51   1            unsigned long i;
   52   1            i = timeval;
   53   1            while ((i + ms) != timeval);                  
   54   1      }
ARM COMPILER V2.51a,  Time                                                                 12/06/06  20:31:56  PAGE 2   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** PUBLICS:
 PUBLIC         init_timer?T
 PUBLIC         wait?T
 PUBLIC         tc0?A
 PUBLIC         timeval



*** DATA SEGMENT '?DT0?Time':
 00000000          timeval:
 00000000            DS          4



*** CODE SEGMENT '?PR?tc0?A?Time':
   18: void tc0 (void) __irq  
 00000000  E92D0003  STMDB       R13!,{R0-R1}
   20:       ++timeval;
 00000004  E5100000  LDR         R0,=timeval ; timeval
 00000008  E5901000  LDR         R1,[R0,#0x0] ; timeval
 0000000C  E2811001  ADD         R1,R1,#0x0001
 00000010  E5801000  STR         R1,[R0,#0x0] ; timeval
   21:       T0IR        = 1;                            // 清除中断标志
 00000014  E3A01001  MOV         R1,#0x1
 00000018  E5100000  LDR         R0,=0xE0004000
 0000001C  E5801000  STR         R1,[R0,#0x0]
   22:       VICVectAddr = 0;                            // 对VICVectAddr执行写操作,通知VIC中断处理结束
 00000020  E3A01000  MOV         R1,#0x0
 00000024  E5100000  LDR         R0,=0xFFFFF030
 00000028  E5801000  STR         R1,[R0,#0x0]
   23: }
 0000002C  E8BD0003  LDMIA       R13!,{R0-R1}
 00000030  E25EF004  SUBS        R15,R14,#0x0004
 00000034          ENDP ; 'tc0?A'


*** CODE SEGMENT '?PR?init_timer?T?Time':
   34:       T0MR0 = 13823;//1ms的计数初值,当前处理器的时钟频率为11.0592 * 5 = 55.296M,具体设置见startup.s
 00000000  4800      LDR         R1,=0x35FF
 00000002  4800      LDR         R0,=0xE0004018
 00000004  6001      STR         R1,[R0,#0x0]
   35:       T0MCR = 3;    // 设置T0MR0匹配后复位T0TC,并产生中断标志
 00000006  2103      MOV         R1,#0x3
 00000008  4800      LDR         R0,=0xE0004014
 0000000A  6001      STR         R1,[R0,#0x0]
   36:       T0TCR = 1;    //启动定时器                              
 0000000C  2101      MOV         R1,#0x1
 0000000E  4800      LDR         R0,=0xE0004004
 00000010  6001      STR         R1,[R0,#0x0]
   37:       VICVectAddr0 = (unsigned long)tc0;//设置中断服务程序的地址          
 00000012  4900      LDR         R1,=tc0?A ; tc0?A
 00000014  4800      LDR         R0,=0xFFFFF100
 00000016  6001      STR         R1,[R0,#0x0]
   38:       VICVectCntl0 = 0x20 | 4;//分配timer0中断到中断向量0                    
 00000018  2124      MOV         R1,#0x24
 0000001A  4800      LDR         R0,=0xFFFFF200
 0000001C  6001      STR         R1,[R0,#0x0]
   39:       VICIntEnable = 0x00000010;//timer0中断使能                 
 0000001E  2110      MOV         R1,#0x10
 00000020  4800      LDR         R0,=0xFFFFF010
 00000022  6001      STR         R1,[R0,#0x0]
   40: }
 00000024  4770      BX          R14
 00000026          ENDP ; 'init_timer?T'


*** CODE SEGMENT '?PR?wait?T?Time':
   49: void wait (unsigned int ms)  
 00000000  ---- Variable 'ms' assigned to Register 'R0' ----
   50: {                             
 00000000            ; SCOPE-START
ARM COMPILER V2.51a,  Time                                                                 12/06/06  20:31:56  PAGE 3   

   52:       i = timeval;
 00000000  4800      LDR         R1,=timeval ; timeval
 00000002  6809      LDR         R1,[R1,#0x0] ; timeval
 00000004  ---- Variable 'i' assigned to Register 'R1' ----
   53:       while ((i + ms) != timeval);                  
 00000004          L_1:
 00000004  1C03      MOV         R3,R0 ; ms
 00000006  1C0A      MOV         R2,R1 ; i
 00000008  18D2      ADD         R2,R3 ; i
 0000000A  4800      LDR         R3,=timeval ; timeval
 0000000C  681B      LDR         R3,[R3,#0x0] ; timeval
 0000000E  429A      CMP         R2,R3
 00000010  D1F8      BNE         L_1  ; T=0x00000004
 00000012            ; SCOPE-END
 00000012  4770      BX          R14
 00000014          ENDP ; 'wait?T'



Module Information          Static
----------------------------------
  code size            =    ------
  data size            =         4
  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 + -