久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

UDA1341TS驅(qū)動(dòng)程序

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月21日   【字體:
雖然濾波器的設(shè)置上還不是那么完美,但應(yīng)該也算是于征服了UDA1341TS。這個(gè)驅(qū)動(dòng)做了很久一直在用串口監(jiān)測(cè)錄音數(shù)據(jù),但由于噪聲的影響, 一直不知怎么回事,今天算是大功告成了,甚是開(kāi)心,決定把代碼貼出來(lái)做個(gè)慶祝,同時(shí)希望后學(xué)者能用得上。直管coppy不會(huì)介意的。注解:端口初始化函數(shù) (uda_io_init())L3操作函數(shù)(WriteL3())錄音函數(shù)(record())播放函數(shù)(playsound())。提示:時(shí)鐘要知道 怎么設(shè)置(我使用MDK的啟動(dòng)代碼設(shè)置了)對(duì)照S3C2440A 和UDA1341TS的datasheet來(lái)設(shè)置IIS和L3問(wèn)題不大了,我這個(gè)驅(qū)動(dòng)沒(méi)有使用DMA,而是通過(guò)CPU來(lái)讀寫(xiě)的,不用多說(shuō)了,我想你懂的。

/*L3MODE:J7(GPB2);L3DATA:K3(GPB3);L3CLOCK:K4(GPB4)*/
#define L3MODE  (1<<2)    
#define L3DATA   (1<<3)    
#define L3CLOCK  (1<<4)
//**********uda1341ts端口初始化
void uda_io_init()
{
 /*IISLRCLK=GPE0,IISSCLK=GPE1,CDCLK=GPE2,IISSDI=GPE3,IISSDO=GP4*/
 GPECON|=(1<<1)|(1<<3)|(1<<5)|(1<<7)|(1<<9);
 GPEUP|=(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);;
 
 GPBCON|=(1<<4)|(1<<6)|(1<<8);
 GPBUP|=(1<<4)|(1<<3)|(1<<2);
}   
//**********L3寫(xiě)
void WriteL3(unsigned char data, unsigned char mode)
{    
 
 //mode = 0,地址模式;mode = 1,數(shù)據(jù)傳輸模式     
 int i, k;
 uda_io_init();   
 if(mode == 0)  //地址模式時(shí)序
 {    
    GPBDAT = GPBDAT & ~(L3MODE|L3DATA|L3CLOCK )|L3CLOCK;    
 }    
 else     //數(shù)據(jù)模式時(shí)序
 {    
    GPBDAT = GPBDAT & ~(L3MODE|L3DATA|L3CLOCK)|(L3CLOCK|L3MODE);       
 }
     
 for(k = 0; k < 5; k++);          //延時(shí)
    
 for(i = 0; i < 8; i++)
 {    
     if(data & 0x1)
  {    
         GPBDAT &= ~L3CLOCK;    
         GPBDAT |= L3DATA;          //發(fā)送高電平    
         for(k = 0; k < 5; k++);
          
         GPBDAT |= L3CLOCK;    
         GPBDAT |= L3DATA;    
         for(k = 0; k < 5; k++);    
     }    
     else
  {    
         GPBDAT &= ~L3CLOCK;    
         GPBDAT &= ~L3DATA;    //發(fā)送低電平  
         for(k = 0; k < 5; k++);
      
         GPBDAT |= L3CLOCK;    
         GPBDAT &= ~L3DATA;    
         for(k = 0; k < 5; k++);    
     }    
     data >>= 1;    
 }    
 GPBDAT = GPBDAT & ~(L3MODE|L3DATA|L3CLOCK)|(L3CLOCK|L3MODE);    
}
//**********記錄錄音止
void record()

   unsigned short int temp;
   unsigned int i,stop=0,count=0;
        
    GPBDAT = GPBDAT & ~(L3MODE|L3DATA|L3CLOCK)|(L3CLOCK|L3MODE);
    
    WriteL3(0x14+2,0);    
        
    WriteL3(0x60,1);   //復(fù)位  
        
    WriteL3(0x14+2,0);          
    WriteL3(0x10,1);     //00010000 系統(tǒng)時(shí)鐘頻率384fs
       
    WriteL3(0x14+2,0);         
    WriteL3(0xa2,1);    //10100010 輸入增益6db,ADC開(kāi),DAC關(guān)  
           
    WriteL3(0x14+0,0);  
    WriteL3(0x0,1);          //音量衰減0db    
   WriteL3(0x14+0,0);  
    WriteL3(0x7b,1);         //01,1110,11 (BB 18dB~24dB) Treble 6dB
 
   WriteL3(0x14+0,0);  
    WriteL3(0x90,1);         //采樣頻率為44.1khz  
     
    WriteL3(0xc0,1); 
    WriteL3(0xe0,1);         //000,00000 MA 0dB  
      
    WriteL3(0xc4,1); 
    WriteL3(0xf0,1);         //100,1,00,00 AGC使能          
     
    WriteL3(0xc2,1); 
    WriteL3(0xf9,1);         //010,110,11 MIC 27dB input 1選擇 通道2關(guān)閉
 
    WriteL3(0xc6,1); 
    WriteL3(0xe0,1);         //output lever -9db ATTACK TIME=11ms,DECAY TIME=100ms         
     
    /*IIS配置*/     
         
    IISCON = (0<<5)|(0<<4)|(1<<3)|(0<<2)|(1<<1);         //DMA禁止,在接受空閑狀態(tài),不產(chǎn)生IISLRCK信號(hào),IIS預(yù)分頻使能    
       
    IISMOD = (0<<9)|(0<<8)|(1<<6)|(0<<5)|(0<<4)|(1<<3)|(1<<2)|(1<<0); //主設(shè)備時(shí)鐘PCLK,主設(shè)備模式,接收模式,串行數(shù)據(jù)16位,主時(shí)鐘是384fs,串行位時(shí)鐘32fs     
           
    IISPSR = (2<<5)|2;            //預(yù)分頻都是N=2    
         
    IISFCON = (0<<14)|(1<<12);       //發(fā)送FIFO正常,發(fā)送FIFO使能 
  
 IISCON|=(1<<0);      //iis開(kāi)啟   
      
   while(stop==0)
   {
      if((IISCON & (1<<6))==0)          //檢查輸入FIFO是否為滿(mǎn)
      {    
         //FIFO中的數(shù)據(jù)為16位,深度為32
         //當(dāng)輸入FIFO為滿(mǎn)時(shí),一次性讀取FIFO中的32個(gè)16位數(shù)據(jù)
         for(i=0;i<32;i++)
         {
            temp=IISFIFO;
   record_buffer[count+2*i]=temp;
            record_buffer[count+2*i+1]=(temp>>8);
         }
   //IISFIFO=0;
         count+=64;
         if(count>500000)
         stop=1;                    //當(dāng)錄制的數(shù)據(jù)超過(guò)數(shù)組長(zhǎng)度時(shí),退出         
  }
 }
 stop=0;
 IISCON = 0x0;               //關(guān)閉IIS
 GPBCON|=1;           //蜂鳴器輸出
 GPBDAT|=1;       //蜂鳴器輸出高點(diǎn)平
 delay_us(100);
 GPBDAT&=~(1<<0);     //蜂蜜輸出低電平
}

void playsound(unsigned char *buffer, int length)
{
 int count,i;
 
 char flag; 

 GPBDAT = GPBDAT & ~(L3MODE|L3CLOCK|L3DATA) |(L3MODE|L3CLOCK); //L3開(kāi)始傳輸:L3M=H, L3C=H
 
 
 
 //配置UDA1341
 
 WriteL3(0x14 + 2,0);            //狀態(tài)模式(000101xx+10)
 
 WriteL3(0x60,1);          //0,1,10, 000,0 : 狀態(tài)0,復(fù)位
 
 
 
 WriteL3(0x14 + 2,0);            //狀態(tài)模式 (000101xx+10)
 
 WriteL3(0x10,1);          //0,0,01, 000,0 : 狀態(tài)0, 384fs,IIS,no DC-filtering
 
 
 
 WriteL3(0x14 + 2,0);     //狀態(tài)模式 (000101xx+10)
 
 WriteL3(0xc1,1);           //1,0,0,0, 0,0,01:狀態(tài)1,
 
 //Gain of DAC 6 dB,Gain of ADC 0dB,ADC non-inverting,
 
 //DAC non-inverting,Single speed playback,ADC-Off DAC-On
 
 
 
 //配置s3c2440的IIS寄存器
 
 //預(yù)分頻器為2,所以CDCLK=PCLK/(3+1)=16.928kHz
 
 IISPSR = 2<<5|2;
 
 //無(wú)效DMA,輸入空閑,預(yù)分頻器有效
 
 IISCON  = (0<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1);   
 
 //PCLK為時(shí)鐘源,輸出模式,IIS模式,每個(gè)聲道16位,CODECLK=384fs,SCLK=32fs
 
 IISMOD  = (0<<9)|(0<<8)|(2<<6)|(0<<5)|(0<<4)|(1<<3)|(1<<2)|(1<<0);     
 
 IISFCON = (0<<15)|(1<<13);           //輸出FIFO正常模式,輸出FIFO使能
 
 
 
 flag=1;
 
 count=0;
 
 //開(kāi)啟IIS
 
 IISCON |= 0x1;
 
 while(flag)
 
 {
 
  if((IISCON & (1<<7))==0)               //檢查輸出FIFO是否為空
  
  {    
   
   //FIFO中的數(shù)據(jù)為16位,深度為32
   
   //當(dāng)輸出FIFO為空時(shí),一次性向FIFO寫(xiě)入32個(gè)16位數(shù)據(jù)
   
   for(i=0;i<32;i++)
   
   {
   
    IISFIFO=(buffer[2*i+count])+(buffer[2*i+1+count]<<8);
   
   }                  
   
   count+=64;
   
   if(count>length)
   
   flag=0;                  //音頻數(shù)據(jù)傳輸完,則退出
  
  }
 
 }
 
 IISCON = 0x0;            //關(guān)閉IIS
}

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 亚洲va国产日韩欧美精品色婷婷 | 一区二区免费 | 精品视频在线一区 | 99爱在线免费观看 | 亚洲精品一区在线 | av中文字幕在线 | 黄网站在线播放 | 国产精品1 | 国产精品99久久久久久动医院 | 精品国产乱码久久久久久影片 | av天天干 | 日韩在线播放视频 | 国产午夜亚洲精品不卡 | 伊人网在线播放 | 久久精片 | 国产欧美一区二区三区另类精品 | 日韩www| 91色在线 | 欧美日韩国产一区 | 不卡在线视频 | 精品一区二区久久久久久久网精 | 亚洲精品在线观看视频 | 精品国产一区二区三区免费 | 久久综合成人精品亚洲另类欧美 | 国产综合欧美 | 亚洲精品视频在线观看视频 | 中文字幕国产精品 | 亚洲综合五月天婷婷 | 日本精品视频一区二区 | 亚洲a视频 | 精品视频在线观看 | 免费视频99 | 成人永久免费视频 | 国产激情一区二区三区 | av影音| 91观看| 久草成人网 | 日韩免费福利视频 | 日韩成人免费中文字幕 | 欧美成人手机在线 | 男女视频在线免费观看 |