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

📄 timer.lst

📁 ARM入门的好帮手.包含了从简单到相对较复杂的程序.
💻 LST
📖 第 1 页 / 共 2 页
字号:
     79              tc_ptr->TC[0].TC_CCR = TC_CLKEN ;
   \   000000A0   0100A0E3              MOV      R0,#+0x1
   \   000000A4   000084E5              STR      R0,[R4, #+0]
     80          
     81              //* Setup Timer 1
     82              tc_ptr->TC[1].TC_CMR = CHRONO_TC1_MODE ;
   \   000000A8   54009FE5              LDR      R0,??at91_tc_open_count_0+4  ;; #+0x46C006
   \   000000AC   440084E5              STR      R0,[R4, #+68]
     83              tc_ptr->TC[1].TC_RC = 1000 ;
   \   000000B0   FA0FA0E3              MOV      R0,#+0x3E8
   \   000000B4   5C0084E5              STR      R0,[R4, #+92]
     84              tc_ptr->TC[1].TC_RA = 500 ;
   \   000000B8   7D0FA0E3              MOV      R0,#+0x1F4
   \   000000BC   540084E5              STR      R0,[R4, #+84]
     85              tc_ptr->TC[1].TC_CCR = TC_CLKEN ;
   \   000000C0   0100A0E3              MOV      R0,#+0x1
   \   000000C4   400084E5              STR      R0,[R4, #+64]
     86          
     87              //* Setup Timer 2
     88              tc_ptr->TC[2].TC_CMR = CHRONO_TC2_MODE ;
   \   000000C8   38009FE5              LDR      R0,??at91_tc_open_count_0+8  ;; #+0x46C007
   \   000000CC   840084E5              STR      R0,[R4, #+132]
     89              tc_ptr->TC[2].TC_RC = 0xFFFF ;
   \   000000D0   FF00A0E3              MOV      R0,#+0xFF
   \   000000D4   FF0C80E2              ADD      R0,R0,#+0xFF00
   \   000000D8   9C0084E5              STR      R0,[R4, #+156]
     90              tc_ptr->TC[2].TC_CCR = TC_CLKEN ;
   \   000000DC   0100A0E3              MOV      R0,#+0x1
   \   000000E0   800084E5              STR      R0,[R4, #+128]
     91          
     92              //* Clear the status
     93              tmp = tc_ptr->TC[0].TC_SR ;
   \   000000E4   200094E5              LDR      R0,[R4, #+32]
     94              tmp = tc_ptr->TC[1].TC_SR ;
   \   000000E8   600094E5              LDR      R0,[R4, #+96]
     95              tmp = tc_ptr->TC[2].TC_SR ;
   \   000000EC   A00094E5              LDR      R0,[R4, #+160]
     96          
     97              //* Trig Timer2
     98              tc_ptr->TC[2].TC_CCR = TC_SWTRG ;
   \   000000F0   0400A0E3              MOV      R0,#+0x4
   \   000000F4   800084E5              STR      R0,[R4, #+128]
     99          
    100              //* Trig Timer1, set TIOA and effective clear timer 2
    101              tc_ptr->TC[1].TC_CCR = TC_SWTRG ;
   \   000000F8   400084E5              STR      R0,[R4, #+64]
    102          
    103          }
   \   000000FC   7080BDE8              LDMIA    SP!,{R4-R6,PC}     ;; return
   \   00000100                         DATA     
   \                     ??at91_tc_open_count_0:
   \   00000100   40808000              DC32     +0x808040
   \   00000104   06C04600              DC32     +0x46C006
   \   00000108   07C04600              DC32     +0x46C007
    104          //*----------------------------------------------------------------------------
    105          //* Function Name       : at91_tc_start
    106          //* Object              :
    107          //* Input Parameters    : <TC_pt>  timer descriptor
    108          //* Output Parameters   :
    109          //*----------------------------------------------------------------------------

   \                                 In segment NEARFUNC_A, align 4
   \   00000000                         CODE32   
    110          void at91_tc_start( const TCBlockDesc *TC_pt )
    111          {
    112              //* -- Start timer by Software Trigger
    113              //* Trig Timer0, set TIOA and effective clear timer 1
    114              TC_pt->tc0_desc->tc_base->TC_CCR = TC_SWTRG ;
   \                     at91_tc_start:
   \   00000000   0410A0E3              MOV      R1,#+0x4
   \   00000004   002090E5              LDR      R2,[R0, #+0]
   \   00000008   000092E5              LDR      R0,[R2, #+0]
   \   0000000C   001080E5              STR      R1,[R0, #+0]
    115          }
   \   00000010   0EF0A0E1              MOV      PC,LR              ;; return
    116          //*----------------------------------------------------------------------------
    117          //* Function Name       : at91_tc_stop
    118          //* Object              :
    119          //* Input Parameters    : <TC_pt>  timer descriptor
    120          //* Output Parameters   :
    121          //*----------------------------------------------------------------------------

   \                                 In segment NEARFUNC_A, align 4
   \   00000000                         CODE32   
    122          u_int at91_tc_stop( const TCBlockDesc *TC_pt )
    123          {
   \                     at91_tc_stop:
   \   00000000   30402DE9              STMDB    SP!,{R4,R5,LR}     ;; Push
    124          	u_int mcki;
    125              StructTCBlock   *tc_ptr = (StructTCBlock *)TC_pt->tc0_desc->tc_base ;
   \   00000004   0040A0E1              MOV      R4,R0
   \   00000008   001094E5              LDR      R1,[R4, #+0]
   \   0000000C   000091E5              LDR      R0,[R1, #+0]
    126          
    127              //* Disable the clock of the Timer Counter channel 0
    128              TC_pt->tc0_desc->tc_base->TC_CCR = TC_CLKDIS ;
   \   00000010   0220A0E3              MOV      R2,#+0x2
   \   00000014   002080E5              STR      R2,[R0, #+0]
    129          
    130              //* Compute number of microseconds from counter values
    131              mcki =  tc_ptr->TC[0].TC_CV  ;
   \   00000018   100080E2              ADD      R0,R0,#+0x10
   \   0000001C   005090E5              LDR      R5,[R0, #+0]
    132              mcki += ( tc_ptr->TC[1].TC_CV * 1000 ) ;
   \   00000020   401090E5              LDR      R1,[R0, #+64]
   \   00000024   FA2FA0E3              MOV      R2,#+0x3E8
   \   00000028   915225E0              MLA      R5,R1,R2,R5
    133              mcki += ( tc_ptr->TC[2].TC_CV * 1000000 ) ;
   \   0000002C   801090E5              LDR      R1,[R0, #+128]
   \   00000030   090DA0E3              MOV      R0,#+0x240
   \   00000034   3D0980E2              ADD      R0,R0,#+0xF4000
   \   00000038   915025E0              MLA      R5,R1,R0,R5
    134              // TIMER CLOCK MCKI / 2
    135              mcki = mcki*2;
    136          
    137              //* Disable the clock and reset the timer
    138              // Close the timer
    139              at91_tc_close (TC_pt->tc0_desc);
   \   0000003C   000094E5              LDR      R0,[R4, #+0]
   \   00000040   ........              BL       at91_tc_close
    140              at91_tc_close (TC_pt->tc1_desc);
   \   00000044   040094E5              LDR      R0,[R4, #+4]
   \   00000048   ........              BL       at91_tc_close
    141              at91_tc_close (TC_pt->tc2_desc);
   \   0000004C   080094E5              LDR      R0,[R4, #+8]
   \   00000050   ........              BL       at91_tc_close
    142          
    143              return mcki;
   \   00000054   8500A0E1              MOV      R0,R5, LSL #+1
   \   00000058   3080BDE8              LDMIA    SP!,{R4,R5,PC}     ;; return
    144          //* End
    145          }

   Maximum stack usage in bytes:

     Function            CSTACK
     --------            ------
     at91_tc_open_count     16 
     at91_tc_start           0 
     at91_tc_stop           12 

 
 380 bytes in segment NEARFUNC_A
 
 380 bytes of CODE memory

Errors: none
Warnings: 1

⌨️ 快捷键说明

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