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

📄 wavdemo.c

📁 一份使用8051单片机通过DSP的HPI口和DSP进行通讯的代码。8051单片机
💻 C
字号:
/*
WWW.MCU123.NET/BBS
欢迎大家多共享一些例程。。那怕是最简单的。 
因为别人也需要你的帮助的。

程序功能:
51单片机通过HPI口装载程序到DSP中
*/                                                                                                                                                                
#include  <Reg52.h>        
#include  <absacc.h>
#include  <stdio.h>
#include  <intrins.h>
#include  <dspcode.h>  
/*定义宏*/
#define   uint unsigned  int
#define   uchar unsigned  char

#define   VOL1     0x81
#define   VOL2     0x82

#define   L_LINE_VOLUME        0x00
#define   R_LINE_VOLUME        0x01
#define   L_HEADPHONE_VOLUME   0x02
#define   R_HEADPHONE_VOLUME   0x03
#define   A_AUDIO_PATH         0x04
#define   D_AUDIO_PATH         0x05
#define   POWER_CON            0x06
#define   D_AUDIO_INTERFACE    0x07
#define   SAMPLE_RATE          0x08
#define   D_INTERFACE_ACT      0x09
#define   RESET                0x0f


/*定义寄存器端口地址*/
#define   HPICL          XBYTE[0xe000]
#define   HPICH          XBYTE[0xe100]
#define   WR_HPIL0_D     XBYTE[0xe200]
#define   WR_HPIH0_D     XBYTE[0xe300]
#define   WR_HPIL_A      XBYTE[0xe400]
#define   WR_HPIH_A      XBYTE[0xe500]
#define   WR_HPIL1_D     XBYTE[0xe600]
#define   WR_HPIH1_D     XBYTE[0xe700]

#define   RD_HPIL0_D     XBYTE[0xeA00]
#define   RD_HPIH0_D     XBYTE[0xeB00]
#define   RD_HPIL1_D     XBYTE[0xeE00]
#define   RD_HPIH1_D     XBYTE[0xeF00]

#define   WR_CR          XBYTE[0x7100]
#define   WR_PARA        XBYTE[0x7000]

sbit  NRST       =P1^2;
sbit  RST8019    =P1^3;
sbit  RST013     =P1^6;

sbit  CS         =P1^1;
sbit  SDIN       =P3^5;
sbit  SCLK       =P3^4;

sbit  SDA       =P1^4;
sbit  SCK       =P1^5;

  
uchar hpic;
bit ok,readT,key_down;
unsigned char time,stoptime,ms,DSPorder;
unsigned char volume;

void wr_dspcode();
void  delay(uint  wu);
void  LOADDSP();
void init_51();
void wr_hpi(uint addr,uint dat);
unsigned char rd_hpi(uint addr);
void rst8019();
void init_AIC23();
void write_AIC23(uchar addr,uint dat);
void Nrst();

void delay1(unsigned char k);
unsigned char getDSP();

main()
{
     uchar i,j,key;
     uint k;

     init_AIC23();   
     
     delay(10000);
     rst8019();
     Nrst();
     LOADDSP();
     init_51();
  
     delay(30000);
     volume=108;
     write_AIC23(L_HEADPHONE_VOLUME,0x0180+volume);   
     
     while(1);

}

void  delay(uint  wu)
{
  for(wu;wu>0;wu--);
}
void delay1(unsigned char k)
{
    for(;k>0;k--);
}

void Nrst()
{
      NRST=0;
      delay(100);
      NRST=1;
      delay(100);
}
   
void  LOADDSP()
{
      wr_dspcode();
}
unsigned char rd_hpi(uint addr)
{
      unsigned char i;
      WR_HPIL_A=addr/256;
      WR_HPIH_A=addr%256;
      i=RD_HPIL0_D;
      i=RD_HPIH0_D;
      return(i);
}

void wr_hpi(uint addr,uint dat)
{
     WR_HPIL_A=addr/256;
     WR_HPIH_A=addr%256;
     WR_HPIL1_D=dat/256;       
     WR_HPIH1_D=dat%256;        
}
 
void wr_dspcode()
{
     uchar  code   *dspptr,*temp;
     uchar len;
     char i;
     uint addr;
     
     HPICL=0x08;  //clear HPIint,least is first
     HPICH=0x08;
 
     dspptr=dspcode;
     while(1)
     {
       len=*dspptr++;
       if(len==0) break;
       else
       {
         addr=((*dspptr++)*256)+(*dspptr++);
         addr--;
         temp=dspptr;
again:         
         WR_HPIL_A=addr/256;
         WR_HPIH_A=addr%256;
         for(i=0;i<len/2;i++)
         {  
           WR_HPIL0_D=*dspptr++;       
           WR_HPIH0_D=*dspptr++;                      
         }
         dspptr=temp;
         addr++;
         WR_HPIL_A=addr/256;
         WR_HPIH_A=addr%256;
         for(i=0;i<len/2;i++)
         {  
           if(RD_HPIL0_D!=*dspptr++)  goto again;       //不相等,再写
           if(RD_HPIH0_D!=*dspptr++)  goto again;                      
         }
       }
     }
     WR_HPIL_A=0x00; 
     WR_HPIH_A=0x7f;
     WR_HPIL1_D=0x00;    //THE START ADDRESS OF RUN
     WR_HPIH1_D=0x80;        
     
}     

Timer0() interrupt 1
{
   ok=1;
   ms++;
}

void init_51()
{
      TMOD=0x21;
      SCON=0x40;
      REN=1;
      TH1=0xfd;
      TL1=0xfd;
      ET1=0;
      ES=0;
      IT0=1;
      EX0=0;
      ET0=1;
      EA=1;
      TR1=1;
      TR0=1;
}
/***************************************************************/
void rst8019()
{
      RST8019=1;
      delay(100);
      RST8019=0;
}
unsigned char getDSP()
{
         WR_HPIL_A=0;
         WR_HPIH_A=0x7d;
         return(RD_HPIH0_D);
}  
void init_AIC23()
{ 
   write_AIC23(RESET,0);
   write_AIC23(D_INTERFACE_ACT,0x001);
   write_AIC23(POWER_CON,0);
   write_AIC23(SAMPLE_RATE,0x022);  //44.1k
//   write_AIC23(SAMPLE_RATE,0x062);  //22.05k
//   write_AIC23(SAMPLE_RATE,0x02e);    //8.021k
    
   write_AIC23(L_LINE_VOLUME,0x0117);
   write_AIC23(L_LINE_VOLUME,0x0117);
   
   volume=100;
   write_AIC23(L_HEADPHONE_VOLUME,0x0180+volume);   
   write_AIC23(R_HEADPHONE_VOLUME,0x0180+volume);   
   
//   write_AIC23(A_AUDIO_PATH,0x009);  //bypass DAC OFF
//   write_AIC23(A_AUDIO_PATH,0x014);   //MIC ADC DAC ON  0DB
//     write_AIC23(A_AUDIO_PATH,0x1fc);   //bypass MIC ADC DAC ON 0DB sidetone 
     write_AIC23(A_AUDIO_PATH,0x07d);   //bypass MIC ADC DAC ON 20DB sidetone(-6db)
//   write_AIC23(A_AUDIO_PATH,0x011);   //LINE ADC DAC ON
   
   write_AIC23(D_AUDIO_PATH,0x04);
   
   write_AIC23(D_AUDIO_INTERFACE,0x043);   //master  dsp mode
}
void write_AIC23(uchar addr,uint dat)
{
    uchar i;
    dat|=addr<<9;
    CS=0;
    for(i=0;i<16;i++)
    {
      SCLK=0;
      if((dat<<i)&0x8000)
        SDIN=1;
      else 
        SDIN=0;
      SCLK=1;
    }
    SCLK=0;
    CS=1;
}

unsigned char getkey()
{
    uchar key;
    if(RI)
    {
      RI=0;
      key=SBUF;
      return(key);
    }
    return(255);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -