娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年11月03日(星期日)

2021年11月03日 | mini2440裸機編程------IIS

發布者:代碼律動 來源: eefocus關鍵字:mini2440  裸機編程  IIS 手機看文章 掃描二維碼
隨時隨地手機看文章

這段時間做了IIS的試驗。被這個試驗也折騰了很久??偟膩碇vIIS還是一個相對簡單的通信協議。


s3c2440一共有5個引腳用于IIS:IISDO、IISDI、IISSCLK、IISLRCK和CDCLK。前兩個引腳用于數字音頻信號的輸出和輸入,另外三個引腳都與音頻信號的頻率有關。


要用好IIS,就要把信號頻率設置正確。下面介紹這幾個時鐘:


fs:采樣頻率。fs不是任意設置的,一般基于不同的應用場合和聽覺效果,設置不同的幾個固定的值,如8kHz、16kHz、22.05kHz、44.1kHz、48kHz、96kHz等。通常,在wav文件的頭部中, 會給出該文件的fs。


IISSCLK:串行時鐘,每一個時鐘信號傳送一位音頻信號,因此IISSCLK的頻率=聲道數×采樣頻率×采樣位數。如采樣頻率fs為44.1kHz,采樣的位數為16位,聲道數2個(左、右兩個聲道),則IISSCLK的頻率=32fs=1411.2kHz。


IISLRCK:幀時鐘,用于切換左、右聲道,如IISLRCK為高電平表示正在傳輸的是左聲道數據,為低電平表示正在傳輸的是右聲道數據。IISLRCK的頻率=采樣頻率。


CDCLK:由于IIS只負責數字音頻信號的傳輸,而要真正實現音頻信號的放、錄,還需要額外的處理芯片(在這里,我們使用的是UDA1341),CDCLK為該芯片提供系統同步時鐘,即編解碼時鐘,主要用于音頻的A/D、D/A采樣時的采樣時鐘。一般CDCLK=256fs或384fs,通過寄存器可以配置。


這里有一個重要的約束關系:PCLK經過兩個預分頻器處理后分別得到IISSCLK、IISLRCK和CDCLK(預分頻器A得到IISSCLK、IISLRCK,預分頻器B得到CDCLK)。寄存器IISPSR是IIS預分頻器寄存器,5~9位是預分頻器A,0~4位是預分頻器B,一般來說,這兩個預分頻器的值N相等。我們是通過CDCLK來計算預分頻器B的值N的,即CDCLK=PCLK / (N+1)。對于給定的wav文件,fs是確定的。因此這里就需要協調:PCLK、CDCLK、和N的值。有時需要重新調整系統時鐘(因為保持PCLK不變,只改變CDCLK和N的值很難滿足CDCLK=256fs或者384fs。)


PCLK與FCLK有一定的比例關系,而FCLK又是由輸入頻率Fin得到。在這里,我們為了簡化計算,不改變PCLK與FCLK的比例關系(即維持在啟動代碼中定義的1:8的關系),那么由Fin而得到CDCLK一共涉及到四個參數:MDIV、PDIV、SDIV和前面公式中的N,涉及到的寄存器有MPLLCON和IISPSR。因此要得到這四個參數值,就需要一點耐心地計算,原則是誤差最小,其中需要注意的是,計算的結果(包括中間過程的結果)不要溢出,即不要超過32位。例如Fin為12MHz,我們設置采樣頻率fs=44.1kHz,而CDCLK=384fs=16.9344MHz,那么經過計算,最終得到N=3,MDIV=150,PDIV=5,SDIV=0,即IISPSR = (3<<5) | 3;,MPLLCON = (150<<12) | (5<<4) | 0。


在arm中MPLL的頻率就等于FCLK的頻率。


s3c2440有關IIS的寄存器除了IISPSR外,還包括IIS控制寄存器IISCON,主要用于控制數據傳輸的方式、預分頻器和IIS接口是否開啟;IIS模式寄存器IISMOD,主要用于設置IIS的時鐘源、主從方式、接收發送方式、串行接口方式、每個聲道串行數據位數和各種頻率值;IIS的FIFO接口寄存器IISFCON用于設置和判斷數據傳輸的FIFO狀態;而寄存器IISFIFO則用于音頻數據的傳輸。


在mini2440上,負責具體解碼音頻的芯片是uda1341。s3c2440與UDA1341之間除了我們前面介紹過的IIS接口相連接外,還有一個稱之為L3總線的連接,用于s3c2440配置UDA1341內部的寄存器。IIS用于實現ARM和uda1341之間數據的傳輸,L3總線用于實現arm對uda1341的配置。由于s3c2440不具備L3總線接口,因此我們是用三個通用IO口來模擬L3,從而實現L3總線的傳輸。


L3就是line 3(3條線)的意思,它只有L3DATA(數據線:用于傳輸數據)、L3MODE(模式線:用于選擇模式)、L3CLOCK(時鐘線:用于傳輸時鐘)。L3一共有兩個模式:地址模式和數據傳輸模式,先傳輸地址模式數據,再傳輸數據模式數據。L3MODE為低時是地址模式,L3MODE為高時是數據傳輸模式。L3DATA和L3CLOCK相互作用,完成8位數據的傳輸,傳輸的順序是先低位數據,再高位數據。對于clock沒有特別精確的頻率要求,因此,我們在程序中通過手動將一個gpio拉高拉低,從而模擬了一個時鐘信號。在拉高拉低的同時,再配合數據的傳輸,就可以了(傳輸時,是把數據按位送出的,L3是串行的協議)。


地址模式是用于選擇設備和定義目標寄存器,在這種模式下,8位數據的含義是:高6位是設備地址(UDA1341的地址為000101),低兩位是后面數據模式下寄存器的類型(00:DATA0,01:DATA1,10:STATUS)。只要沒有再改變地址模式下的數據,則數據模式下的數據始終是傳輸到上一個地址模式所定義的寄存器內。


傳輸數據模式下,STATUS是用于設置復位,系統時鐘頻率、數據輸入模式、DC濾波等內容。DATA0分為直接尋址模式和擴展尋址模式,直接尋址模式是直接進行模式的控制,包括音量、靜音等等,而擴展尋址模式是在直接尋址模式下先設置3位擴展地址,再在直接尋址模式下設置5位擴展數據。在DATA1下,可以讀取到被檢測峰值。至于具體的DATA0、DATA1、STATUS下。


在我們的程序中,通過下面這個函數實現L3的協議:就是實現從arm給uda寫入數據。(主要是配置它的寄存器)


//L3總線接口的寫函數  

//輸入參數data為要寫入的數據  

//輸入參數address,為1表示地址模式,為0表示數據傳輸模式  

static void WriteL3(U8 data,U8 address)  

{  

       int i,j;  

       if(address == 1)  

              rGPBDAT = rGPBDAT & ~(L3D | L3M | L3C) | L3C;        //L3D=L, L3M=L(地址模式), L3C=H  

       else  

              rGPBDAT = rGPBDAT & ~(L3D | L3M | L3C) | (L3C | L3M);          //L3M=H(數據傳輸模式)   

       for(i=0;i<10;i++)  

              ;             //等待一段時間  

        

       //并行數據轉串行數據輸出,以低位在前、高位在后的順序  

       for(i=0;i<8;i++)      

       {  

              if(data & 0x1)                      // H  

              {  

                     rGPBDAT &= ~L3C;            //L3C=L  

                     rGPBDAT |= L3D;                //L3D=H              

                     for(j=0;j<5;j++)  

                                      ;                    //等待一段時間  

                     rGPBDAT |= L3C;                //L3C=H  

                     rGPBDAT |= L3D;                //L3D=H  

                     for(j=0;j<5;j++)  

                              ;                    //等待一段時間  

               } else {// L                        

                     rGPBDAT &= ~L3C;            //L3C=L  

                     rGPBDAT &= ~L3D;            //L3D=L  

                     for(j=0;j<5;j++)  

                              ;                    //等待一段時間  

                     rGPBDAT |= L3C;                //L3C=H  

                     rGPBDAT &= ~L3D;            //L3D=L  

                     for(j=0;j<5;j++)  

                              ;                    //等待一段時間            

              }  

              data >>= 1;  

       }  

       rGPBDAT = rGPBDAT & ~(L3D | L3M | L3C) | (L3C | L3M);          //L3M=H,L3C=H  

}  


放音的程序就是先通過L3協議配置uda,然后再配置arm的寄存器。這樣就可以播放音樂了。在uda的配置中,會設置CDCLK的頻率。要保證對uda的設置和對arm的設置是一致的。


//放音  

//at 256fs profermance is the best, at 384fs playing is a little slower.  

void playsound(unsigned char *buffer, int length)  

{  

       int count,i;  

       char flag;  

        

       rGPBDAT = rGPBDAT & ~(L3M|L3C|L3D) |(L3M|L3C); //L3開始傳輸:L3M=H, L3C=H  

   

       //配置UDA1341  

       WriteL3(0x14 + 2,1);      //狀態模式(000101xx+10)  

       WriteL3(0x60,0);          //0,1,10, 000,0 : 狀態0,復位  

        

       WriteL3(0x14 + 2,1);        //狀態模式 (000101xx+10)  

     WriteL3(0x28,0);            // 0, 0, 10, 1000,  256fs   

             

       WriteL3(0x14 + 2,1);     //狀態模式 (000101xx+10)  

       WriteL3(0xc1,0);           //1,0,0,0, 0,0,01:狀態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寄存器  

     //預分頻器為5,所以CDCLK=PCLK/(5+1)=5644.8kHz  

     rIISPSR = (5<<5)|5;  

       //無效DMA,輸入空閑,預分頻器有效  

     rIISCON  = (0<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1);     

       //PCLK為時鐘源,輸出模式,IIS模式,每個聲道16位,CODECLK=256fs,SCLK=32fs  

       rIISMOD  = (0<<9)|(0<<8)|(2<<6)|(0<<5)|(1<<4)|(1<<3)|(0<<2)|(1<<0);       

  

  

       rIISFCON = (0<<15)|(1<<13);           //輸出FIFO正常模式,輸出FIFO使能  

        

       flag=1;  

       count=0;  

[1] [2]
關鍵字:mini2440  裸機編程  IIS 引用地址:mini2440裸機編程------IIS

上一篇:ARM64平臺下WFE和SEV相關指令解析
下一篇:mini2440 裸機編程 -led

推薦閱讀

? ? ? ? 如果說17年的手機還是被各種異形全面屏這種“偽 全面屏”占領,那么“真 全面屏”則無疑成了18年手機界的主流??梢钥吹剑衲隇榱诉_到正面屏幕“幾乎是一塊玻璃”的效果,各大廠商都進行了突破性的嘗試。從年初OV的電機驅動機械式結構,到年末的“滑蓋全面屏”大戰,戰火甚至從臺前的產品蔓延至背后的專利大戰?! 赡昵?,源于一次大...
10月30日,2019國際服務機器人及特種機器人峰會在北京開幕,峰會上,從中國機械工業聯合會執行副會長、中國機器人產業聯盟執行理事長宋曉剛處獲悉,中國正在研究制定面向2035年的機器人產業發展規劃,近期,在工信部支持下,相關部門已在西南、東北、珠三角、長三角進行了將近兩個月的密集調研,這一機器人發展規劃的一個最重要的內容就是總結“十三五”...
10月30日,重慶沙坪壩區15個招商引資重點項目集中開工,項目涉及集成電路、智能制造等多個領域,總投資額148億元。以下為此次參與此次開工的部分項目:首創高科集成電路產業園項目計劃投資40億元,將導入中關村、中科院資源,采用北京IC Park模式,以集成電路設計為核心,搭建共性技術服務平臺、檢測檢驗服務平臺、知識產權交易中心,協同發展區塊鏈、物...
投資者在投資者互動平臺提問:媒體報道,元宇宙將成未來科技趨勢,AR或VR頭戴式設備最佳的顯示技術是 Micro LED 顯示技術,目前維信諾已經擁有MicroLED生產線和量產技術,請問什么時候會展示貴司的VR/AR產品?維信諾(002387.SZ)在投資者互動平臺表示,公司參股設立的成都辰顯光電已建成Micro LED中試線,完成了工藝全線打通。今年7月下旬實現了首個像...

史海拾趣

問答坊 | AI 解惑

sos 緊急求教modbus協議的數據采集系統

[ip]快畢業了,畢業論文是 基于modbus協議的數據采集系統,不知道各位高手們有沒有想要對我這個笨笨知道的地方.謝謝,謝謝,十分感謝.…

查看全部問答∨

恩智浦Cortex開發板免費申請

一直看好了NZP產品的質量,對LPC系列也很關注。希望這次能夠申請成功?!?

查看全部問答∨

SQL如何將數據自動顯示到終端

如何將控制臺數據自動分工位顯示到終端 例: 工位號分為  A 、B 、C 、D 、E 、F      分別顯示到 A 、B 、C 、D 、E 、F 終端 …

查看全部問答∨

請教問題,單片機如何實現與pc通過網口通信

想做個東西,簡單來講就是通過外部設備給單片機一個開關信號,然后通過單片機告訴PC,再由PC根據信號進行程序處理,PC串口已經占用,所以用網口來實現。 單片機能否直接做協議轉換,還是還要通過一個專用芯片來做,請兄弟們幫忙提出一個解決方案?!?

查看全部問答∨

高端中斷向量表是什么意思?

問題1:高端中斷向量是什么意思?以IRQ中斷為例,中斷產生后先是跳到0x18處,然后再跳到中斷處理函數,這是不是就是所謂的低端中斷向量? 問題2:如果是高端中斷向量,是不是irq中斷發生后,并不是跳到0x18處,而是跳到自己指定的地址? 問題3: ...…

查看全部問答∨

WinCE Driver 開發新手問題

各位大俠:小弟現需在WinCE5.0開發wifi driver,以前完全沒有相關經驗,完全沒有概念,模不著頭腦,問題真的很多。感覺微軟本身的文檔挺混亂的,說的也不怎么具體,大家有沒有好的教材?最好可以可以手把手教這個開發過程的?。ǖ谝徊阶鍪裁矗诙?...…

查看全部問答∨

Altium Designer 6 經典教程資料

收集到很多關于Altium Designer 資料,希望對大家有所幫助。 [ 本帖最后由 熊貓 于 2010-12-23 20:17 編輯 ]…

查看全部問答∨

誰有fft的源代碼

我想問問群里誰有fft的源代碼 可以實現任意點數的  包括他的頭文件 課本上有個c++程序,但是沒有complex.h的頭文件啊…

查看全部問答∨

Cortex M3學習筆記(一)--Systick的應用

這篇學習筆記,完全是基于《STM32不完全手冊》而言的,我沒有買Alientek的開發板,買的是ARMFly的,其實都差不多,只不過安福萊的板載資源非常豐富罷了,應用起來其實都差不都。 《STM32不完全手冊》的51到56頁就是要這次筆記學習的內容,請自己參 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 广昌县| 墨玉县| 康平县| 临朐县| 永泰县| 长岭县| 宁德市| 阿克陶县| 佛坪县| 建阳市| 永清县| 清新县| 塘沽区| 广元市| 滦南县| 永新县| 合阳县| 赤峰市| 枝江市| 瑞安市| 巴塘县| 芷江| 林州市| 商洛市| 安新县| 新沂市| 南宫市| 合水县| 临潭县| 林芝县| 景宁| 和田县| 革吉县| 于田县| 平塘县| 岳池县| 上林县| 开江县| 宜城市| 朔州市| 于田县|