📄 mainsrc.lst
字号:
180 ;*********************************************************
181 009a bf80 LACC #0H , 0
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00 Mon Aug 2 11:21:40 2004
Copyright (c) 1987-1999 Texas Instruments Incorporated
mainsrc.asm PAGE 5
009b 0000
182 009c bf09 LAR AR1 , #NO_DTMF_COUNT
009d 0830
183 009e bb1f RPT #01FH
184 009f 90a0 SACL *+ , 0
185
186 ;初始化检测到MFC数据缓冲区开始的32个
187 ;*********************************************************
188 00a0 bf80 LACC #07FFFH , 0
00a1 7fff
189 00a2 bf09 LAR AR1 , #RECIEVE_DTMF_BUF
00a3 0810
190 00a4 bb0f RPT #0FH
191 00a5 90a0 SACL *+ , 0
192
193 ;接收数据缓冲区的开头指针
194 00a6 bf80 LACC #RECDATA_BUF , 0
00a7 0b20
195 00a8 903e SACL GOERTZEL_DEC_DATA_PTR
196
197 ;*********************************************************
198 00a9 8b89 MAR * , AR1
199 00aa ae5e SPLK #0H , BEGIN_REC_PCMDATA_FLAG
00ab 0000
200 00ac ae20 SPLK #0H , REC_DEC_STATE
00ad 0000
201 00ae ae1b SPLK #RECDATA_BUF , REC_FTS_PCMDATA_PTR
00af 0b20
202 00b0 ae61 SPLK #0H , ASP_SEND_W_PTR
00b1 0000
203 00b2 ae60 SPLK #0H , ASP_SEND_R_PTR
00b3 0000
204
205
206 00b4 ae6b SPLK #0H , TIMER_1MS_FLAG
00b5 0000
207 00b6 ae6c SPLK #0H , TIMER_1MS_COUNT
00b7 0000
208 00b8 ae6d SPLK #0H , TIMER_5MS_FLAG
00b9 0000
209 00ba ae6e SPLK #0H , TIMER_5MS_COUNT
00bb 0000
210 00bc ae6f SPLK #0H , TIMER_50MS_FLAG
00bd 0000
211 00be ae70 SPLK #0H , TIMER_50MS_COUNT
00bf 0000
212 00c0 ae71 SPLK #0H , TIMER_200MS_FLAG
00c1 0000
213 00c2 ae72 SPLK #0H , TIMER_200MS_COUNT
00c3 0000
214 00c4 ae73 SPLK #0H , TIMER_1S_FLAG
00c5 0000
215 00c6 ae7a SPLK #0H , XF_CHANGE_COUNT
00c7 0000
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00 Mon Aug 2 11:21:40 2004
Copyright (c) 1987-1999 Texas Instruments Incorporated
mainsrc.asm PAGE 6
216 00c8 ae75 SPLK #0H , DIV_VALUE_VAR;
00c9 0000
217
218 00ca bf08 LAR AR0 , #(SEND_DTMF_BUF+0FH)
00cb 080f
219
220 00cc INIT_PREPARE_RUN:
221 00cc bc00 LDP #VAL_B2_DP
222
223 00cd ae64 SPLK #0C30H , RESET_SSP_T_R ;复位传送和接收
00ce 0c30
224 00cf 0c64 OUT RESET_SSP_T_R , SSPCR
00d0 fff1
225
226 00d1 ae63 SPLK #0C20H , RESET_SSP_T ;复位发送
00d2 0c20
227
228 00d3 ae04 SPLK #VAL_IMR , IMR
00d4 0016
229 00d5 ae06 SPLK #0FFFFH , IFR
00d6 ffff
230 00d7 ae41 SPLK #(VAL_SEND_BEGIN+2) , INT2_SEND_PTR
00d8 0802
231 00d9 ae4a SPLK #0H , SYNCH_COUNT
00da 0000
232
233 00db bc02 LDP #VAL_B0_DP1
234
235 00dc ae1f SPLK #0 , DEC_TIMESLOT_INDEX
00dd 0000
236 00de bf0d LAR AR5 , #VAL_SEND_BEGIN
00df 0800
237 00e0 041b LAR AR4 , REC_FTS_PCMDATA_PTR
238 00e1 ae1a SPLK #VAL_SLOTBUF_LONG , REC_PCMDATA_COUNT
00e2 0066
239 00e3 be40 CLRC INTM
240 00e4 be4c CLRC XF
241
242 ;准备工作
243 ;************************************************************
244 00e5 PREPARE_WORK: ;在初始化过程中,8k中断没有产生之前才会在这里,运行过程中不会到达这里
245 00e5 1020 LACC REC_DEC_STATE
246 00e6 e388 BCND PREPARE_WORK , EQ
00e7 00e5'
247
248 ***程序正式开始的地方
249 *************************************************************
250 00e8 MAIN_LOOP:
251 00e8 8b89 MAR * , AR1
252 00e9 7a80 CALL FUN_TIME_PRO , * ;处理时间关系或控制
00ea 0388'
253
254 00eb 1020 LACC REC_DEC_STATE ;当REC_DEC_STATE等于0时,需要开始检测数据了
255 00ec e388 BCND FUN_DEC_DTMF,EQ
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00 Mon Aug 2 11:21:40 2004
Copyright (c) 1987-1999 Texas Instruments Incorporated
mainsrc.asm PAGE 7
00ed 00f0'
256
257 00ee 7980 B MAIN_LOOP
00ef 00e8'
258
259 ;进入检测过程
260 ;*************************************************************
261 00f0 FUN_DEC_DTMF:
262 00f0 7a80 CALL FUN_TIME_PRO , * ;处理时间关系或控制
00f1 0388'
263
264 ;检测前初始化部分
265 ;*****************************************************************************
266 ;检测开始
267 ;***********************************************
268 00f2 101f LACC DEC_TIMESLOT_INDEX ;当前操作时隙接收序号
269
270 ;初始化能量区 将GOERTZEL_EN开始的16个地址数据设为0
271 ;***********************************************
272 00f3 INIT_FN_EN:
273 00f3 8b89 MAR * , AR1
274 00f4 bf09 LAR AR1 , #GOERTZEL_EN
00f5 0300
275 00f6 b213 LAR AR2 , #013H ;循环因子14H个
276 00f7 bf80 LACC #0H
00f8 0000
277 00f9 _FN_EN:
278 00f9 90aa SACL *+ , 0 , AR2
279 00fa 7b99 BANZ _FN_EN , *- , AR1
00fb 00f9'
280
281
282 ;GOERTZEL算法计算部分
283 ;*****************************************************************************
284 ;GOERTZEL能量叠加计算
285 ;************************************************
286 ;AR7 :计算能量数据量,作为循环累加变量因子
287 ;AR1 :存放能量计算结果地址 (F(n-1)F(n-2) ...顺序存放)
288 ;AR2 :接收数据指针
289 ;AR3 :COS参数系数
290 ;GOERTZEL_DEC_COUNT :要滤波频率个数
291 00fc GOERTZEL_ADD_TOTAL:
292 00fc b765 LAR AR7 , #(VAL_SLOTBUF_LONG-1) ;102个数据
293 00fd bf09 LAR AR1 , #(GOERTZEL_EN+1) ;从GOERTZEL_EN开始;注意这里用的是GOERTZEL_EN+1
00fe 0301
294 00ff 023e LAR AR2 , GOERTZEL_DEC_DATA_PTR
295
296 0100 bf0b LAR AR3 , #COSF_PARA
0101 0100
297 0102 bf80 LACC #8H , 0
0103 0008
298 0104 9027 SACL GOERTZEL_DEC_COUNT
299
300 0105 7a8b CALL FUN_GOERTZEL_ADD ,* , AR3 ;运算goertzel算法的能量累计
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00 Mon Aug 2 11:21:40 2004
Copyright (c) 1987-1999 Texas Instruments Incorporated
mainsrc.asm PAGE 8
0106 02cb'
301
302 ;GOERTZEL第二步,能量计算
303 ;************************************************
304 ;AR7:要计算滤波个数,作为循环因子运算8次
305 ;AR1:存放数据地址
306 ;AR2:存放cosf参数
307 0107 GOERTZEL_EN_COMPUTE:
308 0107 b707 LAR AR7 , #07H
309 0108 bf09 LAR AR1 , #(GOERTZEL_EN+15)
0109 030f
310 010a bf0a LAR AR2 , #(COSF_PARA+7)
010b 0107
311 010c _EN_COMPUTE:
312 ;call的内容
313 ;f(n)*f(n)-2*cosf*f(n)*f(n-1)+f(n-1)*f(n-1) ;;sbrk #2
314 ;=(f(n-1)-f(n-2))^2-2*(1+cosf)*f(n-1)*f(n-2)
315 010c 7a8a CALL FUN_GOERTZEL_EN ,* , AR2
010d 02b6'
316 010e 999f SACH *- , 1 , AR7 ;将计算的结果保存在(fn-2)上 ar1内容-1 为下一次做准备
317 010f 7b99 BANZ _EN_COMPUTE , *- , AR1
0110 010c'
318
319 ;开始检测数据
320 ;************************************************************************
321
322 ;取出行列最大值
323 ;***********************************************
324 0111 GET_ROW_MAX:
325 ;取出ROW最大的index放到DEC_ROW_INDEX中
326 ;***********************************************
327 0111 8b89 MAR * , AR1
328 0112 bf80 LACC #3H , 0
0113 0003
329 0114 902a SACL DEC_ROW_INDEX
330 0115 b202 LAR AR2 , #2H
331 0116 bf09 LAR AR1 , #(GOERTZEL_EN+6) ;
0117 0306
332
333 0118 1090 LACC *- , 0
334 0119 8b99 MAR *- , AR1
335 011a 902c SACL DEC_ROW_MAX_EN ;保存第一个数据到VAR_MAIN_TEMP_1
336
337 011b _ROW_MAX:
338 011b 102c LACC DEC_ROW_MAX_EN ;
339 011c 3080 SUB * , 0
340 011d e38c BCND _ROW_MAX_1 , GEQ
011e 0122'
341
342 011f 822a SAR AR2 , DEC_ROW_INDEX
343 0120 1080 LACC * , 0
344 0121 902c SACL DEC_ROW_MAX_EN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -