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

📄 wavdemo.lst

📁 DSP与单片机或ARM的HPI接口例程(適用在多機並聯時用)
💻 LST
字号:
C51 COMPILER V8.02   WAVDEMO                                                               02/24/2006 12:50:58 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE WAVDEMO
OBJECT MODULE PLACED IN WAVDEMO.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE WAVDEMO.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2          WWW.MCU123.NET/BBS
   3          欢迎大家多共享一些例程。。那怕是最简单的。 
   4          因为别人也需要你的帮助的。
   5          
   6          程序功能:
   7          51单片机通过HPI口装载程序到DSP中
   8          */                                                                                                        
             -                                                        
   9          #include  <Reg52.h>        
  10          #include  <absacc.h>
  11          #include  <stdio.h>
  12          #include  <intrins.h>
  13          #include  <dspcode.h>  
  14          /*定义宏*/
  15          #define   uint unsigned  int
  16          #define   uchar unsigned  char
  17          
  18          #define   VOL1     0x81
  19          #define   VOL2     0x82
  20          
  21          #define   L_LINE_VOLUME        0x00
  22          #define   R_LINE_VOLUME        0x01
  23          #define   L_HEADPHONE_VOLUME   0x02
  24          #define   R_HEADPHONE_VOLUME   0x03
  25          #define   A_AUDIO_PATH         0x04
  26          #define   D_AUDIO_PATH         0x05
  27          #define   POWER_CON            0x06
  28          #define   D_AUDIO_INTERFACE    0x07
  29          #define   SAMPLE_RATE          0x08
  30          #define   D_INTERFACE_ACT      0x09
  31          #define   RESET                0x0f
  32          
  33          
  34          /*定义寄存器端口地址*/
  35          #define   HPICL          XBYTE[0xe000]
  36          #define   HPICH          XBYTE[0xe100]
  37          #define   WR_HPIL0_D     XBYTE[0xe200]
  38          #define   WR_HPIH0_D     XBYTE[0xe300]
  39          #define   WR_HPIL_A      XBYTE[0xe400]
  40          #define   WR_HPIH_A      XBYTE[0xe500]
  41          #define   WR_HPIL1_D     XBYTE[0xe600]
  42          #define   WR_HPIH1_D     XBYTE[0xe700]
  43          
  44          #define   RD_HPIL0_D     XBYTE[0xeA00]
  45          #define   RD_HPIH0_D     XBYTE[0xeB00]
  46          #define   RD_HPIL1_D     XBYTE[0xeE00]
  47          #define   RD_HPIH1_D     XBYTE[0xeF00]
  48          
  49          #define   WR_CR          XBYTE[0x7100]
  50          #define   WR_PARA        XBYTE[0x7000]
  51          
  52          sbit  NRST       =P1^2;
  53          sbit  RST8019    =P1^3;
  54          sbit  RST013     =P1^6;
C51 COMPILER V8.02   WAVDEMO                                                               02/24/2006 12:50:58 PAGE 2   

  55          
  56          sbit  CS         =P1^1;
  57          sbit  SDIN       =P3^5;
  58          sbit  SCLK       =P3^4;
  59          
  60          sbit  SDA       =P1^4;
  61          sbit  SCK       =P1^5;
  62          
  63            
  64          uchar hpic;
  65          bit ok,readT,key_down;
  66          unsigned char time,stoptime,ms,DSPorder;
  67          unsigned char volume;
  68          
  69          void wr_dspcode();
  70          void  delay(uint  wu);
  71          void  LOADDSP();
  72          void init_51();
  73          void wr_hpi(uint addr,uint dat);
  74          unsigned char rd_hpi(uint addr);
  75          void rst8019();
  76          void init_AIC23();
  77          void write_AIC23(uchar addr,uint dat);
  78          void Nrst();
  79          
  80          void delay1(unsigned char k);
  81          unsigned char getDSP();
  82          
  83          main()
  84          {
  85   1           uchar i,j,key;
  86   1           uint k;
  87   1      
  88   1           init_AIC23();   
  89   1           
  90   1           delay(10000);
  91   1           rst8019();
  92   1           Nrst();
  93   1           LOADDSP();
  94   1           init_51();
  95   1        
  96   1           delay(30000);
  97   1           volume=108;
  98   1           write_AIC23(L_HEADPHONE_VOLUME,0x0180+volume);   
  99   1           
 100   1           while(1);
 101   1      
 102   1      }
*** WARNING C280 IN LINE 85 OF WAVDEMO.C: 'i': unreferenced local variable
*** WARNING C280 IN LINE 85 OF WAVDEMO.C: 'j': unreferenced local variable
*** WARNING C280 IN LINE 85 OF WAVDEMO.C: 'key': unreferenced local variable
*** WARNING C280 IN LINE 86 OF WAVDEMO.C: 'k': unreferenced local variable
 103          
 104          void  delay(uint  wu)
 105          {
 106   1        for(wu;wu>0;wu--);
 107   1      }
 108          void delay1(unsigned char k)
 109          {
 110   1          for(;k>0;k--);
 111   1      }
 112          
C51 COMPILER V8.02   WAVDEMO                                                               02/24/2006 12:50:58 PAGE 3   

 113          void Nrst()
 114          {
 115   1            NRST=0;
 116   1            delay(100);
 117   1            NRST=1;
 118   1            delay(100);
 119   1      }
 120             
 121          void  LOADDSP()
 122          {
 123   1            wr_dspcode();
 124   1      }
 125          unsigned char rd_hpi(uint addr)
 126          {
 127   1            unsigned char i;
 128   1            WR_HPIL_A=addr/256;
 129   1            WR_HPIH_A=addr%256;
 130   1            i=RD_HPIL0_D;
 131   1            i=RD_HPIH0_D;
 132   1            return(i);
 133   1      }
 134          
 135          void wr_hpi(uint addr,uint dat)
 136          {
 137   1           WR_HPIL_A=addr/256;
 138   1           WR_HPIH_A=addr%256;
 139   1           WR_HPIL1_D=dat/256;       
 140   1           WR_HPIH1_D=dat%256;        
 141   1      }
 142           
 143          void wr_dspcode()
 144          {
 145   1           uchar  code   *dspptr,*temp;
 146   1           uchar len;
 147   1           char i;
 148   1           uint addr;
 149   1           
 150   1           HPICL=0x08;  //clear HPIint,least is first
 151   1           HPICH=0x08;
 152   1       
 153   1           dspptr=dspcode;
 154   1           while(1)
 155   1           {
 156   2             len=*dspptr++;
 157   2             if(len==0) break;
 158   2             else
 159   2             {
 160   3               addr=((*dspptr++)*256)+(*dspptr++);
 161   3               addr--;
 162   3               temp=dspptr;
 163   3      again:         
 164   3               WR_HPIL_A=addr/256;
 165   3               WR_HPIH_A=addr%256;
 166   3               for(i=0;i<len/2;i++)
 167   3               {  
 168   4                 WR_HPIL0_D=*dspptr++;       
 169   4                 WR_HPIH0_D=*dspptr++;                      
 170   4               }
 171   3               dspptr=temp;
 172   3               addr++;
 173   3               WR_HPIL_A=addr/256;
 174   3               WR_HPIH_A=addr%256;
C51 COMPILER V8.02   WAVDEMO                                                               02/24/2006 12:50:58 PAGE 4   

 175   3               for(i=0;i<len/2;i++)
 176   3               {  
 177   4                 if(RD_HPIL0_D!=*dspptr++)  goto again;       //不相等,再写
 178   4                 if(RD_HPIH0_D!=*dspptr++)  goto again;                      
 179   4               }
 180   3             }
 181   2           }
 182   1           WR_HPIL_A=0x00; 
 183   1           WR_HPIH_A=0x7f;
 184   1           WR_HPIL1_D=0x00;    //THE START ADDRESS OF RUN
 185   1           WR_HPIH1_D=0x80;        
 186   1           
 187   1      }     
 188          
 189          Timer0() interrupt 1
 190          {
 191   1         ok=1;
 192   1         ms++;
 193   1      }
 194          
 195          void init_51()
 196          {
 197   1            TMOD=0x21;
 198   1            SCON=0x40;
 199   1            REN=1;
 200   1            TH1=0xfd;
 201   1            TL1=0xfd;
 202   1            ET1=0;
 203   1            ES=0;
 204   1            IT0=1;
 205   1            EX0=0;
 206   1            ET0=1;
 207   1            EA=1;
 208   1            TR1=1;
 209   1            TR0=1;
 210   1      }
 211          /***************************************************************/
 212          void rst8019()
 213          {
 214   1            RST8019=1;
 215   1            delay(100);
 216   1            RST8019=0;
 217   1      }
 218          unsigned char getDSP()
 219          {
 220   1               WR_HPIL_A=0;
 221   1               WR_HPIH_A=0x7d;
 222   1               return(RD_HPIH0_D);
 223   1      }  
 224          void init_AIC23()
 225          { 
 226   1         write_AIC23(RESET,0);
 227   1         write_AIC23(D_INTERFACE_ACT,0x001);
 228   1         write_AIC23(POWER_CON,0);
 229   1         write_AIC23(SAMPLE_RATE,0x022);  //44.1k
 230   1      //   write_AIC23(SAMPLE_RATE,0x062);  //22.05k
 231   1      //   write_AIC23(SAMPLE_RATE,0x02e);    //8.021k
 232   1          
 233   1         write_AIC23(L_LINE_VOLUME,0x0117);
 234   1         write_AIC23(L_LINE_VOLUME,0x0117);
 235   1         
 236   1         volume=100;
C51 COMPILER V8.02   WAVDEMO                                                               02/24/2006 12:50:58 PAGE 5   

 237   1         write_AIC23(L_HEADPHONE_VOLUME,0x0180+volume);   
 238   1         write_AIC23(R_HEADPHONE_VOLUME,0x0180+volume);   
 239   1         
 240   1      //   write_AIC23(A_AUDIO_PATH,0x009);  //bypass DAC OFF
 241   1      //   write_AIC23(A_AUDIO_PATH,0x014);   //MIC ADC DAC ON  0DB
 242   1      //     write_AIC23(A_AUDIO_PATH,0x1fc);   //bypass MIC ADC DAC ON 0DB sidetone 
 243   1           write_AIC23(A_AUDIO_PATH,0x07d);   //bypass MIC ADC DAC ON 20DB sidetone(-6db)
 244   1      //   write_AIC23(A_AUDIO_PATH,0x011);   //LINE ADC DAC ON
 245   1         
 246   1         write_AIC23(D_AUDIO_PATH,0x04);
 247   1         
 248   1         write_AIC23(D_AUDIO_INTERFACE,0x043);   //master  dsp mode
 249   1      }
 250          void write_AIC23(uchar addr,uint dat)
 251          {
 252   1          uchar i;
 253   1          dat|=addr<<9;
 254   1          CS=0;
 255   1          for(i=0;i<16;i++)
 256   1          {
 257   2            SCLK=0;
 258   2            if((dat<<i)&0x8000)
 259   2              SDIN=1;
 260   2            else 
 261   2              SDIN=0;
 262   2            SCLK=1;
 263   2          }
 264   1          SCLK=0;
 265   1          CS=1;
 266   1      }
 267          
 268          unsigned char getkey()
 269          {
 270   1          uchar key;
 271   1          if(RI)
 272   1          {
 273   2            RI=0;
 274   2            key=SBUF;
 275   2            return(key);
 276   2          }
 277   1          return(255);
 278   1      }
 279          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    673    ----
   CONSTANT SIZE    =   5071    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6      14
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  4 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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