网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> TI DSP代码示例 >> C5000 >> 文章正文
  数字录音机主程序         ★★★ 【字体:
数字录音机主程序
作者:赵治心    文章来源:北京百科融创科技有限公司    点击数:    更新时间:2007-1-22    

**********************************************************************************
*  aic23mic.asm   v1.00      数字录音机主程序                                  *
*  版权(c)  2004-  北京百科融创科技有限公司                           *
*  设计者: 赵治心                 *
*  邮箱:   ourui.wl@263.net                             *
**********************************************************************************/
                   .title "AIC23.asm"
                   .mmregs
                   .bss   timetemp,1
                   .bss   addrtemp,1
audio_in     .usect "buf",0C000h
;定义MCBSP0的各个寄存器 
bsp0               .set  39h                 
drr20              .set  20h
drr10              .set  21h
dxr20              .set  22h
dxr10              .set  23h
spsa0              .set  38h
spcr10             .set  00h
spcr20             .set  01h
rcr10              .set  02h
rcr20              .set  03h
xcr10              .set  04h
xcr20              .set  05h
srgr10             .set  06h
srgr20             .set  07h
pcr0               .set  0eh
cpldport1          .set  2000h 
         
                   .def  _c_int00,_McBSP_txisr,_McBSP_rvisr
                   .data
audio_table:
     .word 07ff5H,05842H,0fcdcH,0a34dH,0800bH,0a7beH,0324H,05cb3H
     .word 07ff5H,05842H,0fcdcH,0a34dH,0800bH,0a7beH,0324H,05cb3H    

                   .text
_c_int00:          stm #7000h,swwsr              ;等待0个时钟
     ssbx intm
                    STM #0b, CLKMD ;switch to DIV mode
                   
                   
                   
TstStatu:
     LDM CLKMD, A
     AND #01b, A ;poll STATUS bit
     BC TstStatu, ANEQ
     STM #0100001111101111b, CLKMD ;switch to PLL
     RPT #10000
     NOP
                    rsbx cpl                    ;清CPL位=0
                    ;初始化cpu完毕,开始初始化MCBSP0
                    stm #216ch,pmst
                    stm #0020h, imr
                    stm #0020h, ifr
                    stm  #0000h,ar1
                    portw ar1,cpldport1           ;切换字写到CPLD控制寄存器,转为控制字输出
                    rpt #400
                    nop                         ;等400个周期
                   
                    ld #00h,dp
                    stm #spcr10,spsa0            ;接收复位
                    stm #0000h,bsp0
                    stm #spcr20,spsa0            ;发送、采样、帧复位
                    stm #0000h,bsp0
                    stm #spcr10,spsa0            ;12、11位为10,进入SPI模式,7位(DXENA)为0,不起动DX延时
                    stm #1000h,bsp0
                    stm #pcr0,spsa0              ;1位置1,数据下沿发送上沿接收,3位置1,帧同步为低电平有效,9位置1?BLCK输出,11位置1,BFSX脚为高电浇                   
                    stm #0a0ah,bsp0
                    stm #srgr10,spsa0            ;7~0位置64h(100),100分频
                    stm #0064h,bsp0
                    stm #srgr20,spsa0            ;13位置1,时钟源于CPU,12位置0,发送帧同步
                    stm #2000h,bsp0
                    stm #rcr10,spsa0             ;14~8位置0,一帧一个字,7~5位为010,一个字16位
                    stm #0040h,bsp0
                    stm #rcr20,spsa0             ;15位置0,单阶段帧,1、0位置01保证SPI正常工作
                    stm #0001h,bsp0
                    stm #xcr10,spsa0             ;14~8位置0,一帧一个字,7~5位为010,一个字16位
                    stm #0040h,bsp0
                    stm #xcr20,spsa0             ;15位置0,单阶段帧,1、0位置01保证SPI正常工作
                    stm #0001h,bsp0
                    stm #spcr20,spsa0            ;6位GRST为1,采样脱离复位,FRST是否要脱离复位?
                    orm #0040h,bsp0
                    rpt #400                    ;等两个以上位时钟
                    nop
                    stm #spcr10,spsa0            ;接收离开复位
                    orm #0001h,bsp0
                    stm #spcr20,spsa0            ;发送离开复位
                    orm #0001h,bsp0
                    rpt #400
                    nop
                    ;MCBSP0初始化为SPI模式完毕,开始初始化AIC23为BYPASS模式
                    ld #0h,dp
write_cpld1:        ld  #0000h,A
                    stm  #0001h,ar2
                    rpt #10
                    nop
                    portw *(8h),cpldport1           ;切换字写到CPLD控制寄存器,转为控制字输出
                    rpt #400                      ;等400个周期
                    nop                   
                    portr cpldport1,ar2
                    rpt #400
                    nop
                    bitf ar2,#0001h
                    bc   write_cpld1,tc    
                    ;切换CPLD,使MCBSP0与AIC23的SPI口连接
delay15s:           nop         
                    ;初始化AIC23为DAC、ADC、CLKOUT、DSP模式结束
                    stm #1e00h,dxr10           
                    rpt #3000                  
                    nop
                    stm #05ffh,dxr10            ;过零侦测开,音量为6dB
                    rpt #3000                   ;延时等待数据传送完毕
                    nop
                    stm #07ffh,dxr10            ;过零侦测开,音量为6dB
                    rpt #3000                   ;延时等待数据传送完毕
                    nop
                    stm #0915h,dxr10            ;伴音使能,DAC使能,MIC输入、BYPASS不使能
                    rpt #3000                   ;延时等待数据传送完毕
                    nop
                    stm #0a02h,dxr10            ;DAC静音不使能,去加重为32KHz,ADC高通滤波器不使能
                    rpt #3000                   ;延时等待数据传送完毕
                    nop
                    stm #0097h,dxr10            ;左声道线路输入0dB,线路输入静音
                    rpt #3000                   ;延时等待数据传送完毕
                    nop
                    stm #0297h,dxr10            ;右声道线路输入0dB,线路输入静音
                    rpt #3000                   ;延时等待数据传送完毕
                    nop
                    stm #0C01h,dxr10            ;POWER、CLOCK、OSC、OUT、DAC、ADC、MIC打开line in关闭
                    rpt #3000                   ;延时等待数据传送完毕
                    nop
                    stm #0e53h,dxr10            ;6位为1,AIC23在DSP模式中为主器件,4位为1,第二个时钟上沿数据可用,字长16位,DSP模式
                    rpt #3000                   ;延时等待数据传送完毕
                    nop
                    stm #100Dh,dxr10            ;USB模式,8KHz采样率,输入时钟为MCLK,输出时钟为MCLK
                    rpt #3000                   ;延时等待数据传送完毕
                    nop
                    stm #1201h,dxr10            ;数字接口激活
                    rpt #3000                   ;延时等待数据传送完毕
                    nop
                    ;AIC23的DAC输出设置结束,开始输出音频数据
                    ;切换CPLD,使MCBSP0与AIC23的DIN口连接
                   
write_cpld2:        ld  #0001h,A
                    stm  #0000h,ar2
                    rpt #10
                    nop
                    portw *(8h),cpldport1           ;切换字写到CPLD控制寄存器,转为audio data字输出
                    rpt #400                      ;等400个周期
                    nop                   
                    portr cpldport1,ar2
                    rpt #400
                    nop
                    bitf ar2,#0001h
                    bc   write_cpld2,ntc
                    rpt #400
                    nop
                    ;切换CPLD,使MCBSP0与AIC23的DIN口连接完毕
                    ;开始设置MCBSP0为DSP模式从器件,
                   
                    stm #spcr10,spsa0            ;RRST为0接收复位
                    stm #0000h,bsp0
                    stm #spcr20,spsa0            ;XRST为0,GRST为0,FRST为0发送、采样、帧复位
                    stm #0000h,bsp0
                    rpt #400
                    nop
                    stm #spcr10,spsa0            ;5、4位为00,接收完成产生中断,进入非SPI模式,7位(DXENA)为0,不起动DX延时
                    stm #0000h,bsp0
                    stm #spcr20,spsa0            ;5、4位为00,发送完成产生中断,采样,帧同步复位
                    stm #0200h,bsp0
                    stm #pcr0,spsa0              ;帧同步,采样为外部输入,外部时钟极性反相                   
                    stm #0006h,bsp0
                    stm #rcr10,spsa0             ;14~8位置0,一帧两个字,7~5位为010,一个字16位
                    stm #0140h,bsp0
                    stm #rcr20,spsa0             ;15位置0,单阶段帧,第二阶一个字,16位字长1、0位置01延迟一个位时钟数据有效
                    stm #0001h,bsp0
                    stm #xcr10,spsa0             ;14~8位置0,一帧两个字,7~5位为010,一个字16位
                    stm #0140h,bsp0
                    stm #xcr20,spsa0             ;15位置0,单阶段帧,第二阶一个字,16位字长1、0位置01延迟一个位时钟数据有效
                    stm #0001h,bsp0
                    rpt #400                     ;等两个以上位时钟
                    nop
                    stm #0000h,dxr10             ;传起始数据到AIC23
                    stm #0000h,dxr20
                    rpt #400                     ;等两个以上位时钟
                    nop
                    ;MCBSP0口设置为DSP模式结束,输出数据
                    ;切换CPLD,使MCBSP0与AIC23的DIN口连接
write_cpld3:        stm  #0001h,ar1
                    stm  #0000h,ar2
                    rpt #10
                    nop
                    portw ar1,cpldport1           ;切换字写到CPLD控制寄存器,转为audio data字输出
                    rpt #400                      ;等400个周期
                    nop                   
                    portr cpldport1,ar2
                    rpt #400
                    nop
                    bitf ar2,#0001h
                    bc   write_cpld3,ntc
                    ;切换CPLD,使MCBSP0与AIC23的DIN口连接完毕
                    rpt #400
     nop
                    nop
                    nop
                    stm #drr10, ar5
     ldu  *ar5, a
     stm #drr20, ar5
     ldu  *ar5, a
     st  #audio_table, ar5
     st #15, *(timetemp)
     st  #audio_table, *(addrtemp)
     st  #15,    ar4
     rsbx intm
                    stm #spcr20,spsa0            ;发送离开复位
                    orm #0001h,bsp0
                    nop
                    nop
     stm #4000h,brc
                    rptb delay1s-1
                    rpt #01800h
                    nop
delay1s:            nop
     ssbx intm
     stm #spcr20,spsa0            ;发送结束
                    orm #0000h,bsp0
     stm #2000h,brc
                    rptb delay2s-1
                    rpt #01800h
                    nop
delay2s:            nop
     stm #spcr10,spsa0            ;接收离开复位
                    orm #0001h,bsp0
     stm #0010h, imr
                    stm #0010h, ifr
     st  #audio_in, ar5
     st  #0bfffh, ar4
     rsbx intm
loop4
     ldm ar4,b
     nop
     nop
     bc mic,beq
                  b  loop4
mic
     ssbx intm
     stm #spcr10,spsa0            ;RRST为0接收复位
                    stm #0000h,bsp0
                    stm #spcr20,spsa0            ;XRST为0,GRST为0,FRST为0发送、采样、帧复位
                    stm #0000h,bsp0
                    rpt #400
                    nop
                    stm #spcr10,spsa0            ;5、4位为00,接收完成产生中断,进入非SPI模式,7位(DXENA)为0,不起动DX延时
                    stm #0000h,bsp0
                    stm #spcr20,spsa0            ;5、4位为00,发送完成产生中断,采样,帧同步复位
                    stm #0200h,bsp0
                    stm #pcr0,spsa0              ;帧同步,采样为外部输入,外部时钟极性反相                   
                    stm #0006h,bsp0
                    stm #rcr10,spsa0             ;14~8位置0,一帧两个字,7~5位为010,一个字16位
                    stm #0140h,bsp0
                    stm #rcr20,spsa0             ;15位置0,单阶段帧,第二阶一个字,16位字长1、0位置01延迟一个位时钟数据有效
                    stm #0001h,bsp0
                    stm #xcr10,spsa0             ;14~8位置0,一帧两个字,7~5位为010,一个字16位
                    stm #0140h,bsp0
                    stm #xcr20,spsa0             ;15位置0,单阶段帧,第二阶一个字,16位字长1、0位置01延迟一个位时钟数据有效
                    stm #0001h,bsp0
                    rpt #400                     ;等两个以上位时钟
                    stm #0000h,dxr10             ;传起始数据到AIC23
                    stm #0000h,dxr20
                    stm #0020h, imr
                    stm #0020h, ifr
     stm #spcr20,spsa0            ;发送离开复位
                    orm #0001h,bsp0
                    nop
                    nop
                    st  #audio_table, ar5
     st #15, *(timetemp)
     st  #audio_table, *(addrtemp)
     st  #15,    ar4
     rsbx intm
         stm #3000h,brc
                    rptb delay3s-1
                    rpt #01800h
                    nop
delay3s:            nop
     st  #audio_in, ar5
     st #0bfffh, *(timetemp)
     st  #audio_in, *(addrtemp)
     st  #0bfffh,    ar4
     b  $

     
                   
_McBSP_txisr:

     ld   *ar5+, A
     stlm  a, dxr10
     stlm a, dxr20
     nop
     nop
     banz  goon, *ar4-
     mvdm  timetemp, ar4
     mvdm  addrtemp, ar5    
goon    
     nop
     nop 
     rete   

_McBSP_rvisr:
     
              stm #drr10, ar2
     ldu  *ar2, a
     stl  a, *ar5+  
     stm #drr20, ar2
     ldu  *ar2, a
     mar *ar4-      
goon2     
     reted
     nop
     nop 
                   .end  

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号