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

📄 timer.lst

📁 lpc2478开发板基于IAR编译器移植ucos实验例程
💻 LST
📖 第 1 页 / 共 2 页
字号:
##############################################################################
#                                                                            #
# IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION    12/Dec/2008  17:14:27 #
# Copyright 1999-2005 IAR Systems. All rights reserved.                      #
#                                                                            #
#    Cpu mode        =  arm                                                  #
#    Endian          =  little                                               #
#    Stack alignment =  4                                                    #
#    Source file     =  E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\Common\src\time #
#                       r.c                                                  #
#    Command line    =  E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\Common\src\time #
#                       r.c -lCN E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\RAM_De #
#                       bug\List\ -o E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\RA #
#                       M_Debug\Obj\ -z2 --no_cse --no_unroll --no_inline    #
#                       --no_code_motion --no_tbaa --no_clustering           #
#                       --no_scheduling --debug --cpu_mode arm --endian      #
#                       little --cpu ARM7TDMI-S --stack_align 4 -e --fpu     #
#                       None --dlib_config "C:\Program Files\IAR             #
#                       Systems\Embedded Workbench 4.0                       #
#                       Evaluation\arm\LIB\dl4tpannl8n.h" -I                 #
#                       E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\include\ -I     #
#                       E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\ucos-ii\include #
#                       \ -I "C:\Program Files\IAR Systems\Embedded          #
#                       Workbench 4.0 Evaluation\arm\INC\"                   #
#    List file       =  E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\RAM_Debug\List\ #
#                       timer.lst                                            #
#    Object file     =  E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\RAM_Debug\Obj\t #
#                       imer.r79                                             #
#                                                                            #
#                                                                            #
##############################################################################

E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\Common\src\timer.c
      1          /*****************************************************************************
      2           *   timer.c:  Timer C file for NXP LPC23xx/24xx Family Microprocessors
      3           *
      4           *   Copyright(C) 2006, NXP Semiconductor
      5           *   All rights reserved.
      6           *
      7           *   History
      8           *   2006.09.01  ver 1.00    Prelimnary version, first Release
      9           *
     10          ******************************************************************************/
     11          #include "LPC2468.h"		/* LPC23xx/24xx Peripheral Registers	*/
     12          #include "type.h"
     13          #include "irq.h"
     14          #include "target.h"
     15          #include "timer.h"
     16          

   \                                 In segment DATA_Z, align 4, align-sorted
     17          volatile DWORD timer0_counter = 0;
   \                     timer0_counter:
   \   00000000                      DS8 4

   \                                 In segment DATA_Z, align 4, align-sorted
     18          volatile DWORD timer1_counter = 0;
   \                     timer1_counter:
   \   00000000                      DS8 4
     19          
     20          /*****************************************************************************
     21          ** Function name:		delayMs
     22          **
     23          ** Descriptions:		Start the timer delay in milo seconds
     24          **						until elapsed
     25          **
     26          ** parameters:			timer number, Delay value in milo second			
     27          ** 						
     28          ** Returned value:		None
     29          **
     30          *****************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
     31          void delayMs(BYTE timer_num, DWORD delayInMs)
     32          {
     33            if ( timer_num == 0 )
   \                     delayMs:
   \   00000000   000050E3           CMP      R0,#+0
   \   00000004   1E00001A           BNE      ??delayMs_0
     34            {
     35          	/*
     36          	* setup timer #0 for delay
     37          	*/
     38          	T0TCR = 0x02;		/* 复位定时器 */
   \   00000008   4E22A0E3           MOV      R2,#-536870908
   \   0000000C   402C82E3           ORR      R2,R2,#0x4000
   \   00000010   0230A0E3           MOV      R3,#+2
   \   00000014   003082E5           STR      R3,[R2, #+0]
     39          	T0PR  = 0x00;		/* 预分频设置: TC每PCLK加1 */
   \   00000018   CE22A0E3           MOV      R2,#-536870900
   \   0000001C   402C82E3           ORR      R2,R2,#0x4000
   \   00000020   0030A0E3           MOV      R3,#+0
   \   00000024   003082E5           STR      R3,[R2, #+0]
     40          	T0MR0 = delayInMs*(Fpclk/1000) - 1;   // 计数值
   \   00000028   ........           LDR      R2,??DataTable9  ;; 0xffffffffe0004018
   \   0000002C   8030A0E3           MOV      R3,#+128
   \   00000030   703C83E3           ORR      R3,R3,#0x7000
   \   00000034   93011CE0           MULS     R12,R3,R1
   \   00000038   01305CE2           SUBS     R3,R12,#+1
   \   0000003C   003082E5           STR      R3,[R2, #+0]
     41          	T0IR  = 0xff;		/* 中断复位 */
   \   00000040   E024A0E3           MOV      R2,#-536870912
   \   00000044   402C82E3           ORR      R2,R2,#0x4000
   \   00000048   FF30A0E3           MOV      R3,#+255
   \   0000004C   003082E5           STR      R3,[R2, #+0]
     42          	T0MCR = 0x04;		/* 发生匹配时停止计数 */
   \   00000050   ........           LDR      R2,??DataTable10  ;; 0xffffffffe0004014
   \   00000054   0430A0E3           MOV      R3,#+4
   \   00000058   003082E5           STR      R3,[R2, #+0]
     43          	T0TCR = 0x01;		/* 启动定时器 */
   \   0000005C   4E22A0E3           MOV      R2,#-536870908
   \   00000060   402C82E3           ORR      R2,R2,#0x4000
   \   00000064   0130A0E3           MOV      R3,#+1
   \   00000068   003082E5           STR      R3,[R2, #+0]
     44          
     45          	/* wait until delay time has elapsed */
     46          	while (T0TCR & 0x01);   // 当发生匹配,计数器停止,TCR最低位置0,循环结束
   \                     ??delayMs_1:
   \   0000006C   4E22A0E3           MOV      R2,#-536870908
   \   00000070   402C82E3           ORR      R2,R2,#0x4000
   \   00000074   002092E5           LDR      R2,[R2, #+0]
   \   00000078   010012E3           TST      R2,#0x1
   \   0000007C   FAFFFF1A           BNE      ??delayMs_1
   \   00000080   1F0000EA           B        ??delayMs_2
     47            }
     48            else if ( timer_num == 1 )
   \                     ??delayMs_0:
   \   00000084   010050E3           CMP      R0,#+1
   \   00000088   1D00001A           BNE      ??delayMs_2
     49            {
     50          	/*
     51          	* setup timer #1 for delay
     52          	*/
     53          	T1TCR = 0x02;		/* reset timer */
   \   0000008C   4E22A0E3           MOV      R2,#-536870908
   \   00000090   802C82E3           ORR      R2,R2,#0x8000
   \   00000094   0230A0E3           MOV      R3,#+2
   \   00000098   003082E5           STR      R3,[R2, #+0]
     54          	T1PR  = 0x00;		/* set prescaler to zero */
   \   0000009C   CE22A0E3           MOV      R2,#-536870900
   \   000000A0   802C82E3           ORR      R2,R2,#0x8000
   \   000000A4   0030A0E3           MOV      R3,#+0
   \   000000A8   003082E5           STR      R3,[R2, #+0]
     55          	T1MR0 = delayInMs*(Fpclk/1000) - 1;
   \   000000AC   ........           LDR      R2,??DataTable12  ;; 0xffffffffe0008018
   \   000000B0   8030A0E3           MOV      R3,#+128
   \   000000B4   703C83E3           ORR      R3,R3,#0x7000
   \   000000B8   93011CE0           MULS     R12,R3,R1
   \   000000BC   01305CE2           SUBS     R3,R12,#+1
   \   000000C0   003082E5           STR      R3,[R2, #+0]
     56          	T1IR  = 0xff;		/* reset all interrrupts */
   \   000000C4   E024A0E3           MOV      R2,#-536870912
   \   000000C8   802C82E3           ORR      R2,R2,#0x8000
   \   000000CC   FF30A0E3           MOV      R3,#+255
   \   000000D0   003082E5           STR      R3,[R2, #+0]
     57          	T1MCR = 0x04;		/* stop timer on match */
   \   000000D4   ........           LDR      R2,??DataTable13  ;; 0xffffffffe0008014
   \   000000D8   0430A0E3           MOV      R3,#+4
   \   000000DC   003082E5           STR      R3,[R2, #+0]
     58          	T1TCR = 0x01;		/* start timer */
   \   000000E0   4E22A0E3           MOV      R2,#-536870908
   \   000000E4   802C82E3           ORR      R2,R2,#0x8000
   \   000000E8   0130A0E3           MOV      R3,#+1
   \   000000EC   003082E5           STR      R3,[R2, #+0]
     59          
     60          	/* wait until delay time has elapsed */
     61          	while (T1TCR & 0x01);
   \                     ??delayMs_3:
   \   000000F0   4E22A0E3           MOV      R2,#-536870908
   \   000000F4   802C82E3           ORR      R2,R2,#0x8000
   \   000000F8   002092E5           LDR      R2,[R2, #+0]
   \   000000FC   010012E3           TST      R2,#0x1
   \   00000100   FAFFFF1A           BNE      ??delayMs_3
     62            }
     63            return;
   \                     ??delayMs_2:
   \   00000104   0EF0A0E1           MOV      PC,LR            ;; return
     64          }
     65          
     66          /******************************************************************************
     67          ** Function name:		Timer0Handler
     68          **
     69          ** Descriptions:		Timer/Counter 0 interrupt handler
     70          **						executes each 10ms @ 60 MHz CPU Clock
     71          **
     72          ** parameters:			None
     73          ** Returned value:		None
     74          **
     75          ******************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
     76          __irq __arm void Timer0Handler (void)
     77          {
   \                     Timer0Handler:
   \   00000000   04E04EE2           SUB      LR,LR,#+4
   \   00000004   03502DE9           PUSH     {R0,R1,R12,LR}
     78            T0IR = 1;			/* clear interrupt flag */
   \   00000008   E004A0E3           MOV      R0,#-536870912
   \   0000000C   400C80E3           ORR      R0,R0,#0x4000
   \   00000010   0110A0E3           MOV      R1,#+1
   \   00000014   001080E5           STR      R1,[R0, #+0]
     79            __enable_interrupt();		/* handles nested interrupt */
   \   00000018   ........           _BLF     ??EnI_a,??rA??EnI_a
     80          
     81            timer0_counter++;
   \   0000001C   ........           LDR      R0,??DataTable8  ;; timer0_counter
   \   00000020   ........           LDR      R1,??DataTable8  ;; timer0_counter
   \   00000024   001091E5           LDR      R1,[R1, #+0]
   \   00000028   011091E2           ADDS     R1,R1,#+1
   \   0000002C   001080E5           STR      R1,[R0, #+0]
     82          
     83            __disable_interrupt();
   \   00000030   ........           _BLF     ??DiI_a,??rA??DiI_a
     84          
     85            VICVectAddr = 0;	/* Acknowledge Interrupt */
   \   00000034   FF00E0E3           MVN      R0,#+255
   \   00000038   0010A0E3           MOV      R1,#+0
   \   0000003C   001080E5           STR      R1,[R0, #+0]
     86          }
   \   00000040   0390FDE8           LDM      SP!,{R0,R1,R12,PC}^  ;; return
     87          
     88          /******************************************************************************
     89          ** Function name:		Timer1Handler
     90          **
     91          ** Descriptions:		Timer/Counter 1 interrupt handler
     92          **						executes each 10ms @ 60 MHz CPU Clock
     93          **
     94          ** parameters:			None
     95          ** Returned value:		None
     96          **
     97          ******************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
     98          __irq __arm void Timer1Handler (void)
     99          {
   \                     Timer1Handler:
   \   00000000   04E04EE2           SUB      LR,LR,#+4
   \   00000004   03502DE9           PUSH     {R0,R1,R12,LR}
    100            T1IR = 1;			/* clear interrupt flag */
   \   00000008   E004A0E3           MOV      R0,#-536870912
   \   0000000C   800C80E3           ORR      R0,R0,#0x8000
   \   00000010   0110A0E3           MOV      R1,#+1
   \   00000014   001080E5           STR      R1,[R0, #+0]
    101            __enable_interrupt();			/* handles nested interrupt */
   \   00000018   ........           _BLF     ??EnI_a,??rA??EnI_a
    102          
    103            timer1_counter++;
   \   0000001C   ........           LDR      R0,??DataTable11  ;; timer1_counter
   \   00000020   ........           LDR      R1,??DataTable11  ;; timer1_counter
   \   00000024   001091E5           LDR      R1,[R1, #+0]
   \   00000028   011091E2           ADDS     R1,R1,#+1
   \   0000002C   001080E5           STR      R1,[R0, #+0]
    104          
    105            __disable_interrupt();
   \   00000030   ........           _BLF     ??DiI_a,??rA??DiI_a
    106          
    107            VICVectAddr = 0;	/* Acknowledge Interrupt */
   \   00000034   FF00E0E3           MVN      R0,#+255
   \   00000038   0010A0E3           MOV      R1,#+0
   \   0000003C   001080E5           STR      R1,[R0, #+0]
    108          }
   \   00000040   0390FDE8           LDM      SP!,{R0,R1,R12,PC}^  ;; return
    109          
    110          /******************************************************************************
    111          ** Function name:		enable_timer
    112          **
    113          ** Descriptions:		Enable timer
    114          **
    115          ** parameters:			timer number: 0 or 1
    116          ** Returned value:		None
    117          **
    118          ******************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    119          void enable_timer( BYTE timer_num )
    120          {
    121            if ( timer_num == 0 )
   \                     enable_timer:
   \   00000000   000050E3           CMP      R0,#+0
   \   00000004   0400001A           BNE      ??enable_timer_0
    122            {
    123          	T0TCR = 1;              // 计数器使能
   \   00000008   4E12A0E3           MOV      R1,#-536870908
   \   0000000C   401C81E3           ORR      R1,R1,#0x4000

⌨️ 快捷键说明

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