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

📄 timer.lst

📁 lpc2478开发板基于IAR编译器移植ucos实验例程
💻 LST
📖 第 1 页 / 共 2 页
字号:
   \   00000010   0120A0E3           MOV      R2,#+1
   \   00000014   002081E5           STR      R2,[R1, #+0]
   \   00000018   030000EA           B        ??enable_timer_1
    124            }
    125            else
    126            {
    127          	T1TCR = 1;
   \                     ??enable_timer_0:
   \   0000001C   4E12A0E3           MOV      R1,#-536870908
   \   00000020   801C81E3           ORR      R1,R1,#0x8000
   \   00000024   0120A0E3           MOV      R2,#+1
   \   00000028   002081E5           STR      R2,[R1, #+0]
    128            }
    129            return;
   \                     ??enable_timer_1:
   \   0000002C   0EF0A0E1           MOV      PC,LR            ;; return
    130          }
    131          
    132          /******************************************************************************
    133          ** Function name:		disable_timer
    134          **
    135          ** Descriptions:		Disable timer
    136          **
    137          ** parameters:			timer number: 0 or 1
    138          ** Returned value:		None
    139          **
    140          ******************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    141          void disable_timer( BYTE timer_num )
    142          {
    143            if ( timer_num == 0 )
   \                     disable_timer:
   \   00000000   000050E3           CMP      R0,#+0
   \   00000004   0400001A           BNE      ??disable_timer_0
    144            {
    145          	T0TCR = 0;              // 计数器禁止
   \   00000008   4E12A0E3           MOV      R1,#-536870908
   \   0000000C   401C81E3           ORR      R1,R1,#0x4000
   \   00000010   0020A0E3           MOV      R2,#+0
   \   00000014   002081E5           STR      R2,[R1, #+0]
   \   00000018   030000EA           B        ??disable_timer_1
    146            }
    147            else
    148            {
    149          	T1TCR = 0;
   \                     ??disable_timer_0:
   \   0000001C   4E12A0E3           MOV      R1,#-536870908
   \   00000020   801C81E3           ORR      R1,R1,#0x8000
   \   00000024   0020A0E3           MOV      R2,#+0
   \   00000028   002081E5           STR      R2,[R1, #+0]
    150            }
    151            return;
   \                     ??disable_timer_1:
   \   0000002C   0EF0A0E1           MOV      PC,LR            ;; return
    152          }
    153          
    154          /******************************************************************************
    155          ** Function name:		reset_timer
    156          **
    157          ** Descriptions:		Reset timer
    158          **
    159          ** parameters:			timer number: 0 or 1
    160          ** Returned value:		None
    161          **
    162          ******************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    163          void reset_timer( BYTE timer_num )
    164          {
    165            DWORD regVal;
    166          
    167            if ( timer_num == 0 )
   \                     reset_timer:
   \   00000000   000050E3           CMP      R0,#+0
   \   00000004   0800001A           BNE      ??reset_timer_0
    168            {
    169          	regVal = T0TCR;
   \   00000008   4E22A0E3           MOV      R2,#-536870908
   \   0000000C   402C82E3           ORR      R2,R2,#0x4000
   \   00000010   002092E5           LDR      R2,[R2, #+0]
   \   00000014   0210B0E1           MOVS     R1,R2
    170          	regVal |= 0x02;
   \   00000018   021091E3           ORRS     R1,R1,#0x2
    171          	T0TCR = regVal;
   \   0000001C   4E22A0E3           MOV      R2,#-536870908
   \   00000020   402C82E3           ORR      R2,R2,#0x4000
   \   00000024   001082E5           STR      R1,[R2, #+0]
   \   00000028   070000EA           B        ??reset_timer_1
    172            }
    173            else
    174            {
    175          	regVal = T1TCR;
   \                     ??reset_timer_0:
   \   0000002C   4E22A0E3           MOV      R2,#-536870908
   \   00000030   802C82E3           ORR      R2,R2,#0x8000
   \   00000034   002092E5           LDR      R2,[R2, #+0]
   \   00000038   0210B0E1           MOVS     R1,R2
    176          	regVal |= 0x02;         // 复位。计数器和预分频计数器清0
   \   0000003C   021091E3           ORRS     R1,R1,#0x2
    177          	T1TCR = regVal;
   \   00000040   4E22A0E3           MOV      R2,#-536870908
   \   00000044   802C82E3           ORR      R2,R2,#0x8000
   \   00000048   001082E5           STR      R1,[R2, #+0]
    178            }
    179            return;
   \                     ??reset_timer_1:
   \   0000004C   0EF0A0E1           MOV      PC,LR            ;; return
    180          }
    181          
    182          /******************************************************************************
    183          ** Function name:		init_timer
    184          **
    185          ** Descriptions:		Initialize timer, set timer interval, reset timer,
    186          **						install timer interrupt handler
    187          **
    188          ** parameters:			timer number and timer interval
    189          ** Returned value:		true or false, if the interrupt handler can't be
    190          **						installed, return false.
    191          **
    192          ******************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    193          DWORD init_timer ( BYTE timer_num, DWORD TimerInterval )
    194          {
   \                     init_timer:
   \   00000000   30402DE9           PUSH     {R4,R5,LR}
   \   00000004   0040B0E1           MOVS     R4,R0
   \   00000008   0150B0E1           MOVS     R5,R1
    195            if ( timer_num == 0 )
   \   0000000C   000054E3           CMP      R4,#+0
   \   00000010   1200001A           BNE      ??init_timer_0
    196            {
    197          	timer0_counter = 0;
   \   00000014   ........           LDR      R0,??DataTable8  ;; timer0_counter
   \   00000018   0010A0E3           MOV      R1,#+0
   \   0000001C   001080E5           STR      R1,[R0, #+0]
    198          	T0MR0 = TimerInterval - 1;              // 设置计时初值,计数pclk脉冲个数
   \   00000020   ........           LDR      R0,??DataTable9  ;; 0xffffffffe0004018
   \   00000024   011055E2           SUBS     R1,R5,#+1
   \   00000028   001080E5           STR      R1,[R0, #+0]
    199          	T0MCR = 3;				// 计数器的值与MR值匹配时的动作:发生中断、TC复位
   \   0000002C   ........           LDR      R0,??DataTable10  ;; 0xffffffffe0004014
   \   00000030   0310A0E3           MOV      R1,#+3
   \   00000034   001080E5           STR      R1,[R0, #+0]
    200          	if ( install_irq( TIMER0_INT, (void *)Timer0Handler, HIGHEST_PRIORITY ) == FALSE )
   \   00000038   0120A0E3           MOV      R2,#+1
   \   0000003C   74109FE5           LDR      R1,??init_timer_1  ;; Timer0Handler
   \   00000040   0400A0E3           MOV      R0,#+4
   \   00000044   ........           _BLF     install_irq,??install_irq??rA
   \   00000048   000050E3           CMP      R0,#+0
   \   0000004C   0100001A           BNE      ??init_timer_2
    201          	{
    202          	  return (FALSE);
   \   00000050   0000A0E3           MOV      R0,#+0
   \   00000054   160000EA           B        ??init_timer_3
    203          	}
    204          	else
    205          	{
    206          	  return (TRUE);
   \                     ??init_timer_2:
   \   00000058   0100A0E3           MOV      R0,#+1
   \   0000005C   140000EA           B        ??init_timer_3
    207          	}
    208            }
    209            else if ( timer_num == 1 )
   \                     ??init_timer_0:
   \   00000060   010054E3           CMP      R4,#+1
   \   00000064   1100001A           BNE      ??init_timer_4
    210            {
    211          	timer1_counter = 0;
   \   00000068   ........           LDR      R0,??DataTable11  ;; timer1_counter
   \   0000006C   0010A0E3           MOV      R1,#+0
   \   00000070   001080E5           STR      R1,[R0, #+0]
    212          	T1MR0 = TimerInterval;
   \   00000074   ........           LDR      R0,??DataTable12  ;; 0xffffffffe0008018
   \   00000078   005080E5           STR      R5,[R0, #+0]
    213          	T1MCR = 3;				/* Interrupt and Reset on MR1 */
   \   0000007C   ........           LDR      R0,??DataTable13  ;; 0xffffffffe0008014
   \   00000080   0310A0E3           MOV      R1,#+3
   \   00000084   001080E5           STR      R1,[R0, #+0]
    214          	if ( install_irq( TIMER1_INT, (void *)Timer1Handler, HIGHEST_PRIORITY ) == FALSE )
   \   00000088   0120A0E3           MOV      R2,#+1
   \   0000008C   28109FE5           LDR      R1,??init_timer_1+0x4  ;; Timer1Handler
   \   00000090   0500A0E3           MOV      R0,#+5
   \   00000094   ........           _BLF     install_irq,??install_irq??rA
   \   00000098   000050E3           CMP      R0,#+0
   \   0000009C   0100001A           BNE      ??init_timer_5
    215          	{
    216          	  return (FALSE);
   \   000000A0   0000A0E3           MOV      R0,#+0
   \   000000A4   020000EA           B        ??init_timer_3
    217          	}
    218          	else
    219          	{
    220          	  return (TRUE);
   \                     ??init_timer_5:
   \   000000A8   0100A0E3           MOV      R0,#+1
   \   000000AC   000000EA           B        ??init_timer_3
    221          	}
    222            }
    223            return (FALSE);
   \                     ??init_timer_4:
   \   000000B0   0000A0E3           MOV      R0,#+0
   \                     ??init_timer_3:
   \   000000B4   3080BDE8           POP      {R4,R5,PC}       ;; return
   \                     ??init_timer_1:
   \   000000B8   ........           DC32     Timer0Handler
   \   000000BC   ........           DC32     Timer1Handler
    224          }

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable8:
   \   00000000   ........           DC32     timer0_counter

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable9:
   \   00000000   184000E0           DC32     0xffffffffe0004018

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable10:
   \   00000000   144000E0           DC32     0xffffffffe0004014

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable11:
   \   00000000   ........           DC32     timer1_counter

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable12:
   \   00000000   188000E0           DC32     0xffffffffe0008018

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable13:
   \   00000000   148000E0           DC32     0xffffffffe0008014
    225          
    226          /******************************************************************************
    227          **                            End Of File
    228          ******************************************************************************/

   Maximum stack usage in bytes:

     Function      CSTACK
     --------      ------
     Timer0Handler    16
     Timer1Handler    16
     delayMs           0
     disable_timer     0
     enable_timer      0
     init_timer       12
     reset_timer       0


   Segment part sizes:

     Function/Label Bytes
     -------------- -----
     timer0_counter    4
     timer1_counter    4
     delayMs         264
     Timer0Handler    68
     Timer1Handler    68
     enable_timer     48
     disable_timer    48
     reset_timer      80
     init_timer      192
     ??DataTable8      4
     ??DataTable9      4
     ??DataTable10     4
     ??DataTable11     4
     ??DataTable12     4
     ??DataTable13     4
      Others          48

 
 828 bytes in segment CODE
   8 bytes in segment DATA_Z
  12 bytes in segment INITTAB
 
 792 bytes of CODE memory (+ 48 bytes shared)
   8 bytes of DATA memory

Errors: none
Warnings: none

⌨️ 快捷键说明

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