Board logo

标题: 各们大哥帮帮忙!关于tms320vc5402与tlv320aic23的接口设计 [打印本页]

作者: pantinjin    时间: 2006-4-13 19:44     标题: 各们大哥帮帮忙!关于tms320vc5402与tlv320aic23的接口设计

各们大哥帮帮忙!关于tms320vc5402与tlv320aic23的接口设计,我有C的程序(程序如下),但我看不懂,有谁看得的,望能帮我解释一下,我在此感谢不尽!


#include "cpu_reg.h"


int  ms,f=1;
int  DA_wptr,DA_rptr,y;
int  Flag = 0;
int  play_mode;


void main()
{


     unsigned int temp,i;
      


     asm("  STM #0000h,CLKMD "); 
     while(*CLKMD & 0x01 );
     asm("  STM #40c7h,CLKMD ");
    
/*  40C7h:5*clkin  =100M
    30c7h:4*clkin  =80M
    20c7h:3*clkin  =60M
    10C7h:2*clkin  =40M
*/


     asm("  stm   #4240h, SWWSR ");
     //2 wait except for on-chip program 1
     asm("  stm   #00a0h, PMST  "); //MP/MC = 0, IPTR = 001,ovly=1 
     asm("  stm   #0802h, BSCR  ");
     asm("  STM #0h,IMR ");
    
     asm("  STM #0010h,TCR  "); //关定时器
     asm("  STM #0186ah,PRD  ");//1ms
     asm("  STM #0C2fh,TCR  "); //TCR=最后四位
     asm("  STM #0008h,IFR  ");
     asm("  ORM #0008h,*(IMR) ");/*开时间中断*/
 
     DA_wptr=0;
     DA_rptr=0;
    
     McBsp0_init();             //串口初始化
    
     asm("  RSBX  INTM ");      /*开中断*/
    
     play_mode=0;              //发警报声
    
     while(1)
     {
      for(temp=30000;temp>0;temp-=100)
         for(i=0;i<2;i++)
          {
            y=5000;      
            delay(temp);
            y=-5000;      
            delay(temp);
          }
      }    



interrupt void  timer0()
{
     ms++;     
}#include "cpu_reg.h"


int ADbuf[500];
extern int DA_wptr,DA_rptr,y;
extern int play_mode;



void write_subreg0(unsigned int addr,unsigned int val);
unsigned int read_subreg0(unsigned int addr);


unsigned int read_subreg0(unsigned int addr)
{
       *(SPSA0)=addr;
       return(*SPSD0);
}
   
void write_subreg0(unsigned int addr,unsigned int val)
{
      *(SPSA0)=addr;
      *(SPSD0)=val;


void McBsp0_init()
{


     write_subreg0(SPCR1,0);
     write_subreg0(SPCR2,0);


     write_subreg0(SPCR1,SPCR10_VAL);
     write_subreg0(SPCR2,SPCR20_VAL);
     write_subreg0(PCR,PCR0_VAL);


     write_subreg0(RCR1,RCR10_VAL);
     write_subreg0(RCR2,RCR20_VAL);
     write_subreg0(XCR1,XCR10_VAL);
     write_subreg0(XCR2,XCR20_VAL);
     delay(10);
    
     *(DXR10)=0;
    
     /*now enable McBSP transmit and receive*/
     write_subreg0(SPCR1,SPCR10_VAL|1);
     write_subreg0(SPCR2,SPCR20_VAL|1);
     delay(10);
    
     *(IMR)|=0x0010;    //开接收0中断
    
}    


void delay(int k)
{
   while(k--);
}


interrupt void  codec_ch0_in() //接收0中断
{
      int temp;
       
      temp=*DRR10;
       
      DA_rptr++;
      if(DA_rptr>=500)
            DA_rptr=0;


      ADbuf[DA_rptr]=temp;   //保存录音数据
     
      if(play_mode==0)
        *DXR10=y;           //警报声的幅值
      else
        *DXR10=temp;        //放音


}


 






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0