📄 timer.lst
字号:
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 + -