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

📄 mainsrc.lst

📁 DTMF信号产生原程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
     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 + -