论坛名称:714电子实验室 网址:http://www.714e.com/bbs/
  714电子实验室提供电子技术书籍教程,电子技术视频教程,EDA软件及教程下载~
  • 基于TMS320C5402语音信号去噪和编码系统 作者:xilinxue 时间:2008-5-23 11:44:48

  • *******************************************************************

    基于TMS320C5402语音信号去噪和编码系统:语音信号的采集和播放主程序

    硬件上以:TMS320C5402+TLC320AD50为主实现

    *******************************************************************

         .mmregs
         .def   main
         .def   ad50_data
    spsa0   .set   38h      ; 缓冲串口0子地址地址寄存器
    spcd0   .set   39h     ; 缓冲串口0子地址数据寄存器
    dxr10   .set   23h      ; 缓冲串口0数据1发送寄存器
    drr10   .set   21h     ; 缓冲串口0数据1接收寄存器

    spcr10   .set   00h    ; 设置缓冲串口0的所有寄存器的子地址
    spcr20   .set   01h
    rcr10    .set   02h
    rcr20    .set   03h
    xcr10    .set   04h
    xcr20    .set   05h
    srgr10   .set   06h
    srgr20   .set   07h
    mcr10   .set   08h
    mcr20   .set   09h
    rcera0   .set   0ah
    rcerb0   .set   0bh
    xcera0   .set   0ch
    xcerb0   .set   0dh
    pcr0     .set   0eh 
         
    k_iptr   .set   000111000b<<07 ; 设置中断向量表的地址,指向0x1C00
    k_temp   .set   1111111b  
    data_dp   .usect "filter_vars",0       
     
    main:
       STM    4000h,sp    ; 设置堆栈指针
       LD     #0h,dp    ; 设置数据页指针

       LDM      pmst,a    ; 改变中断向量表首地址
       AND      #k_temp,a
       OR       #k_iptr,a
       STL      a,ar6
       MVDM    ar6,pmst
       NOP
       NOP
       NOP
       STM      #0ffffh,tcr    ; 关闭定时器
       STM      #05h,prd    ; 设置定时器周期寄存器
       STM      #08e0h,tcr    ; 设置定时器控制寄存器

       SSBX     intm     ; 关闭中断
       SSBX     sxm
       ST       #2491h,swwsr   ; 设置外设等待时间寄存器
       NOP
       NOP
       NOP
       SSBX     xf     ; 设置XF引脚为高
       NOP       ; 等待硬件完成高电平检测
       NOP
       NOP
       NOP
    dss_init:       ; 设置DSP的缓冲串口0的所有寄存器
       RSBX    cpl
       NOP
       NOP
       STM     spcr10,spsa0
       NOP
       STM     06h,spcd0
       NOP
       STM     spcr20,spsa0
       NOP
       STM     200h,spcd0
       NOP
       STM     pcr0,spsa0
       NOP
       STM     0eh,spcd0
       NOP
       STM     rcr10,spsa0
       NOP
       STM     40h,spcd0
       NOP
       STM     rcr20,spsa0
       NOP
       STM     4h,spcd0
       NOP
       STM     xcr10,spsa0
       NOP
       STM     40h,spcd0
       NOP
       STM     xcr20,spsa0
       NOP
       STM     4h,spcd0
       NOP
     
       LD      #64h,a
       RPT     #50
       NOP
     
       STM     spcr10,spsa0
       NOP
       STM     07h,spcd0
       NOP
       STM     spcr20,spsa0
       NOP
       STM     201h,spcd0    ; 打开缓冲串口0
       NOP
       RPT     #50
       NOP

    aic_init:       ; 初始化AD50
       STM     0h,imr    ; 设置中断寄存器
       ORM     10h,imr
       STM      0ffffh,ifr    ; 清上电复位可能影响的中断使能
       PORTW   08h,02h
       NOP
       NOP
       NOP
       CALL     wait     ; 延时一段时间,等待AD初始化
    waitr$14$:
       STM      0h,spsa0
       NOP
       LDM      spcd0,a
       NOP
       NOP
       NOP
       AND     #2h,0,a,a  
       BC      waitr$14$,aeq   ; 判断是否可以写数据到AD50
       STM     #101h,dxr10       ; 设置AD50的控制寄存器1
       CALL     wait 
       STM      0ffffh,ifr

    waitr$17$:    
       STM    0h,spsa0
       NOP
       LDM     spcd0,a
       NOP
       NOP
       NOP
       AND     #2h,0,a,a
       BC      waitr$17$,aeq   ; 判断是否可以写数据到AD50
       STM     #210h,dxr10   ; 设置AD50的控制寄存器2
       CALL     wait
       STM     0ffffh,ifr

    waitr$22$:    
       STM     0h,spsa0
       NOP
       LDM     spcd0,a
       NOP
       NOP
       NOP
       AND    #2h,0,a,a
       BC     waitr$22$,aeq   ; 判断是否可以写数据到AD50
       STM     #430h,dxr10        ; 设置20kHz采样频率
       STM     #440h,dxr10        ; 设置15kHz采样频率
       STM     #400h,dxr10         ; 设置8kHz采样频率;设置AD50的控制寄存器4
       CALL     wait
       STM      0ffffh,ifr

    waitr$24$:   
       STM     0h,spsa0
       NOP
       LDM     spcd0,a
       NOP
       NOP
       NOP
       AND    #2h,0,a,a
       BC      waitr$24$,aeq     ; 判断是否可以写数据到AD50
       STM     #301h,dxr10   ; 设置AD50的控制寄存器3
       CALL     wait

       STM     #1,ar0
       NOP
       STM    0ffffh,ifr
       NOP
       RSBX     xf
       NOP 
       NOP
       NOP
       LDM    drr10,a    ; 清空缓冲串口的数据接收寄存器
       NOP       ; 避免读入可能复位影响的接收数据
       STM      0h,imr
       ORM      10h,imr    ; 设置中断标志寄存器
       NOP
       NOP
       RSBX    intm     ; 打开总中断
    wait_data:                          ; 主程序,空操作,等待采样数据到来
       NOP
       NOP
       NOP
       NOP
       B      wait_data
       NOP
       NOP
       NOP
     
    wait:                          ; 延时子程序
       RPT     #8048    ; 可以通过重复指令来改变延时的时间
       NOP
       NOP
       NOP
       RET         ; 延时子程序返回
       NOP
       NOP
       NOP 
     
    ad50_data:           ; AD50数据接收中断服务程序,读取AD的数据
       LDM    drr10,a         ; 将缓冲串口要输入到数据寄存器的内容转送到累加器a中
       CALL   signal_processing  ; 调用信号处理子程序
       NOP
       NOP
       NOP
       RETE       ; 中断返回
       NOP
       NOP
       STL     a,dxr10    ; 数据从累加器a中输出到AD50
       NOP
       NOP
     
    signal_processing     ; 语音信号处理子程序
       NOP       ; 在此可以加入语音信号处理
       RET        ; 语音信号处理子程序返回


  • 作者:cqustar 时间:2008-5-23 12:43:59
  • 不错。

    但我暂时用不着。呵呵呵。


Google
 

欢迎光临714电子实验室 网址:http://www.714e.com/bbs/
推荐网站:
714电子实验室http://www.714e.com/