推薦產品
聯係我們
北京谈球吧论坛科技有限公司

谘詢熱線:010-82488292

公司電話:010-82488292

公司傳真:010-82611646

企業郵箱:sales@changyinwuye.com

地址:北京市海澱區中關村大街19號 新中關大廈B座南翼15層1507室

當前位置:谈球吧论坛科技首頁 » 新聞資訊 » 常見問題簡答 » AM335X MCASP與 AIC3100調試心得

AM335X MCASP與 AIC3100調試心得

文章出處:谈球吧论坛科技 人氣:9
摘要 : 首先先確定,AIC3100部分的接口電路是否正常,可以將AIC3100配置為loopback模式,對麥克風進行講話,耳機可以聽到聲音,可以設置page1 reg35寄存器,

首先先確定,AIC3100部分的接口電路是否正常,可以將AIC3100配置為loopback模式,對麥克風進行講話,耳機可以聽到聲音,可以設置page1 reg35寄存器,

修改AM335X_StarterWare_02_00_00_06下的mcasp代碼,因為他們使用的是AIC3106,MCASP1,而我們使用AIC3100,MCASP0,所以修改對應的代碼,

修改完成後,剛開始無法檢測初始化序列,後來檢查原因才知道,MCASP1是讓AIC3106提供BCLK和WCLK信號,那麽我們也配置對應的AIC3100,讓時鍾輸出,調試基本完成,以下是調試的筆記記錄

IIS接口有4根線:

IISDI:串行數據輸入

IISDO:串行數據輸出

IISLRCK:左右聲道選擇,由主設備產生信號,=0就是左聲道

IISCLK:串行數據時鍾,由主設備產生信號

IIS數據格式分為:左對齊、右對齊、IIS格式

 

功能模塊:

time-division multiplexed  (TDM),IIS格式也是TDM裏麵的其中一種,

TDM通常是在集成電路之間的通訊,例:多個AD、DA、S/PDIF模塊之間的通訊

TDM格式一半由3部分組成:始終,數據線,同步幀信號

一半分為bit、word、slot,bit=每1個bit,word=16個bit,slot=例如在左聲道,一共要發20bit,已經發了16bit,那麽還有4bit,也要打出時鍾,那麽16+4bit就是一個slot

Slots也被稱為time slots 或 channels

S/PDIF,DIT是其中的一種格式

digital audio interface transmission (DIT).

Serializers:實際就是對應axr引腳,用於收發數據

在CPU中的IO引腳信息

用AXR引腳來讀寫數據,相當於上麵的DI、DO

發送時鍾:

AHCLKX:發送高頻主時鍾(輸出)

ACLKX:發送位時鍾(輸出)

接收時鍾:

AHCLKR:接收高頻主時鍾

ACLKR:接收位時鍾

AFSX:發送幀同步信號(IIS中,左右聲道切換)

AFSR:接收幀同步信號

AMUTEIN:靜音輸入,AM335X沒有

AMUTE:靜音輸出,AM335X沒有

McASP的時鍾發生器的時鍾源可以源自:

內部 將內部時鍾源通過兩個分頻器產生時鍾;

外部 直接由ACLKX/R引腳輸入;

混合 一個外部高頻時鍾輸入到McASP的AHCLKX/R一腳,然後被分頻器進行分頻。

三種傳輸模式:突發傳輸模式,TDM和DIT

突發模式:不是用於音頻數據的傳輸,例如在兩個DSP之間通訊

TDM:可以用於和多個ADC或DAC芯片之間數據傳輸,IIS是工作在此模式下

DIT:支持以s/pdif、AES-3、IEC-60958格式傳輸音頻數據

McASP使用IIS協議,也支持DIT協議

McASP包括發射與接收兩部分,它們可以使用不同時鍾,不同傳輸模式,工作完全獨立。發射和接受能夠工作在同步狀態,

McASP的沒有使用到的管腳能被配置成通用I/O管腳

寄存器 ,起始地址如上圖

REV:版本號寄存器

描述了這幾個IO的作用,控製Io的輸入或輸出

PFUNC:引腳功能寄存器,描述了AXRn, ACLKX, AHCLKX, AFSX, ACLKR, AHCLKR, and AFSR引腳的用於音頻還是GPIO

       AFSR、AHCLKR、ACLKR、AFSX、AHCLKX、ACLKX、AMUTE、AXR[5-0]:

以上引腳=1用於GPIO,=0用於音頻

PDIR:引腳方向寄存器,不管PFUNC配置成什麽,都要設置好輸入輸出方向,對於時鍾要設置為輸出

       和上麵一樣,=0設置成輸入,=1設置成輸出

PDOUT:引腳輸出1或速出0,隻支持GPIO輸出模式

PDIN:引腳讀取

PDSET:引腳設置1

PDCLR:引腳設置0

 

 

GBLCTL:複位寄存器,寫0複位,寫入後一定要讀回判斷狀態

       XFRST:發送幀同步發生器複位,=0複位

XSMRST:發送狀態機複位

XSRCLR:發送序列激活

XHCLKRST:發送高頻率的時鍾分頻器複位,=0複位,=1開始運行

XCLKRST:發送時鍾分頻器複位,=0複位,=1開始運行

RFRST:接收幀同步發生器複位,=0複位

RSMRST:接收狀態機複位,=0複位,=1啟動

RSRCLR:接收序列激活

RHCLKRST:接收高頻時鍾複位,=1開始運行

RCLKRST:接收內部時鍾分頻器複位,寫0複位,=1開始運行

AM335X沒有此引腳

AMUTE:靜音寄存器,如果檢測到錯誤,是否驅動AMUTE引腳

       XDMAERR:發送DMA錯誤,是否驅動AMUTE引腳

RDMAERR;接收DMA錯誤,是否驅動AMUTE引腳

XCKFAIL:發送時鍾故障,是否驅動AMUTE引腳

RCKFAIL:接收時鍾故障,是否驅動AMUTE引腳

XSYNCERR:發送幀同步錯誤,是否驅動AMUTE引腳

RSYNCERR:收到幀同步錯誤,是否驅動AMUTE引腳

XUNDRN:傳輸欠載錯誤,是否驅動AMUTE引腳

ROVRN:接收溢出錯誤後,是否驅動AMUTE引腳

INSTAT:是否啟動AMUTEIN引腳的錯誤檢測

INEN:在發生AMUTEIN錯誤時,驅動AMUTE引腳

INPOL:音頻靜音(AMUTEIN)極性選擇

MUTEN:AMUTE引腳狀態,=0停止檢測,=1如果檢測到錯誤引腳拉高,=2拉低

 

DLBCTL:回環測試模式

       MODE:

ORD:

DLBEN:=1啟動回環模式

DITCTL:主要配置DITEN位,用於什麽模式

VB:有效位在奇數Clock位

VA:有效位在偶數Clock位

DITEN:=0 DIT模式禁用,傳輸在TDM或突發模式,=1啟用DIT解碼模式

接收相關的

RGBLCTL:和GBLCTL一樣,隻是單獨控製接收部分

       XFRST、XSMRST、XSRCLR、XHCLKRST、XCLKRST:都是隻讀的,是發送的內容

RFRST、RSMRST、RSRCLR、RHCLKRST、RCLKRST:可能可以單獨的操作

 

格式化單元用到的寄存器

RMASK:接收屏蔽寄存器,沒有用到的數據將會被屏蔽

       例如要接收16bit的數據,那麽設置為(1<<16)-1即可,寫1為要保留的數據

如果收發的是IIS格式,那麽選擇MSB在前,左對齊,RDATDLY = 01 (1 bit delay)

RFMT:接收位格式寄存器

       RDATDLY:接收位延時,延時多少個CLk開始接收,如果是IIS協議這裏要是1

RRVRS:接收數據是高位在前還是低位在前,=1是高位在前

RPAD:未使用的bit在slot裏,此寄存器來寫入有多少個未使用的bit

       如果是3和RPBIT有關聯、       在slot裏有多少沒用的bit,因為bit構成word,word+額外bit構成slot

RPBIT:當RPAD=2時,由這個寄存器指定在slot裏,有多少個沒用的bit

RSSZ:接收slot的大小

RBUSEL:接收的數據來源,從dat還是配置寄存器,使用DMA時,要設置為0

RROT:數據右旋轉移動多少bit

 

AFSRCTL:接收幀同步控製寄存器

       RMOD:接收幀同步模式選擇,配置IIS模式等(IIS模式寫2)

FRWID:接收幀同步信號的寬度

FSRM:接收幀同步的時鍾源,內部或外部時鍾,然後在FSRP中配置信號極性

FSRP:接收幀同步的時鍾極性選擇,上或下邊沿進行同步

 

時鍾控製

ACLKRCTL:ACLKR接收時鍾控製

       CLKRP:輸入時鍾上升沿還是下降沿有效

CLKRM:輸入源選擇,從內部或從外部產生ACLKR信號,如果是內部選擇還要注意是從XCLK還是RCLK產生時鍾信號

CLKRDIV:接收時鍾分頻比

AHCLKRCTL:AHCLKR接收高頻時鍾控製寄存器

HCLKRM:選擇接收高頻時鍾的時鍾源(內部輸入,或外部AHCLKR輸入)

HCLKRP:接收高頻時鍾是否反向,接收到的高頻時鍾是否反向給ACLKR

HCLKRDIV:內部AUXCLK時鍾輸入,時鍾分頻

 

RTDM:接收TDM時間槽

       RTDMS:接收時間槽有效,IIS配置(1<<2)-1

 

RINTCTL:接收中斷控製寄存器,可以產生中斷

       RSTAFRM:開始接收幀

RDATA:接收數據就緒中斷

RLAST:接收最後一個槽?

RDMAERR:接收DMA錯誤

RCKFAIL:接收時鍾故障

RSYNCERR:意外接收幀同步中斷

ROVRN:=1接收溢出中斷開啟

RSTAT:接收狀態

       RTDMSLOT:當前TDM時間是 odd還是even

 

RSLOT:隻讀

RCLKCHK:接收時鍾檢查

       RCNT:隻讀

       RMAX:接收時鍾最大的邊界

       RMIN:接收時鍾最小的邊界

       RPS:接收時鍾的分頻比

REVTCTL:接收DMA事件

       RDATDMA:=1接收數據DMA請求使能

 

 

 

 

 

 

 

發送相關的,和接收的類似含義,具體可以看接收部分

XGBLCTL:和GBLCTL一樣,隻是單獨控製接收部分

 

發送格式相關的

XMASK:發送屏蔽寄存器,沒有用到的數據將會被屏蔽

       例如要發送16bit的數據,那麽設置為(1<<16)-1即可,寫1為要保留的數據

XFMT

       XBUSEL:和DMA相關,=1使用DMA操作配置寄存器,=0操作數據寄存器

AFSXCTL:發送幀同步配置

       XMOD:選擇傳輸的模式,=2h-20h   2-slot TDM (I2S mode) to 32-slot TDM.(IIS要設置為2)

FXWID:幀同步信號的寬度選擇是1bit還是1word

FSXM:內部或外部的產生幀同步信號,在FSXP中配置極性

FSXP:幀同步信號的極性,高電平或低電平有效

輸出時鍾配置

ACLKXCTL:ACLKX輸出時鍾源配置

       CLKXP:內部XCLK時鍾輸入的極性選擇位,=0上升沿,注意這裏和接收是相反的

ASYNC:和接收時鍾有關,可以選擇接收時鍾是XCLK還是RCLK

如果=1,那麽接收發發送是獨立不同步的,獨立的時鍾和獨立的幀同步信號

如果=0,那麽發送和接收同步運行,相同的時鍾和幀同步信號,接收可以有不同的格式,但是單元大小是兼容的,如果是IIS必須同步,因為隻用1個時鍾

難道是IIS協議必須這樣配置?

CLKXM:傳輸bit時鍾源選擇,從ACLKX輸出,=0外部時鍾,=1內部時鍾(XCLK)

CLKXDIV:如果CLKXM配置為外部時鍾那麽此寄存器為分頻時鍾比

AHCLKXCTL:AHCLKX高速輸入時鍾的配置

       HCLKXM:高頻時鍾從外部輸入或CPU內部產生,外部從AHCLKX引腳輸入

HCLKXP:高頻時鍾輸入,是否反相後給ACLKX做時鍾源

HCLKXDIV:內部AUXCLK時鍾輸入,分頻比

XTDM

XINTCTL:發送中斷寄存器,寫1開啟中斷

XSTAT:接收狀態寄存器,寫1清除

       XERR

XDMAERR

XSTAFRM

XDATA:=1代表寄存器是空,可以繼續寫入數據,並產生AXEVT事件,

XLAST

XTDMSLOT

XCKFAIL

XSYNCERR

XUNDRN

XSLOT

XCLKCHK

XEVTCTL

僅在DIT模式支持

DITCSRA0~ DITCSRA5:一共有6個

       左聲道狀態寄存器

DITCSRB0~ DITCSRB5:一共有6個

       右聲道狀態寄存器

DITUDRA0~ DITUDRA5:一共有6個

       DIT左聲道用戶數據寄存器

DITUDRB0~ DITUDRB5:一共有6個

       DIT右聲道用戶數據寄存器

有4路收發IO,分別對應

SRCTL  0~3:一共有4個寄存器,一個IO對應1個寄存器配置

       RRDY:接收buf收到數據,收到數據時=1,隻讀

XRDY:發送buf已經為空,準備好,隻讀

DISMOD:PFUNC = 0,那麽引腳的輸出狀態,三態,輸出高、低

SRMOD:設置為發送還是接收,或無效狀態

XBUF0~ XBUF3:共4個,發送buf寄存器

RBUF0~ RBUF3:共4個,接收buf寄存器

音頻的FIFO控製 音頻控製器起始地址 + 0x1000 偏移

WFIFOCTL:發送FIFO控製寄存器

       WENA:寫FIFO使能位,=1開啟,

WNUMEVT:FIFO的大小?

WNUMDMA

WFIFOSTS:發送FIFO狀態寄存器,隻讀

WLVL:當前有多少個字在FIFO中

RFIFOCTL:讀取FIFO控製

       RENA:讀FIFO使能位

RNUMEVT:在FIFO中有多少個數據,產生一次DMA事件(收到多少字節產生DMA請求)

RNUMDMA:最少多少個數據發生DMA事件

RFIFOSTS:讀取FIFO狀態寄存器

接收和發送緩衝區

RBUF:讀FIFO buf地址

XBUF:寫FIFO buf地址

這個用於DMA,發送和接收分別有3路FIFO,每觸發一次,都將這個加入到dma,然後一直循環,加快讀寫的連續性?

以上這2個地址,直接對應到RBUF、XBUF,兩個buf中

筆記:

序列化Serializers

每個序列化包括,

移位寄存器XRSR、數據寄存器XRBUF、控製寄存器SRCTL(每個數據IO對應1個)

XRBUF保留原始數據,當CPU讀取時,會格式化數據,然後給CPU內存

格式單元,Format Unit

有2個,發送和接收,可以屏蔽掉某些位和增加符號擴展

初始化步驟

複位MCASP模塊,GBLCTL=0

配置發送和接收時鍾

配置IO口,如果是時鍾輸出等,要配置PDIR為輸出模式,PDIR最後配置,先設置好時鍾後,配置

如果開啟DMA,那麽接收到AXEVT事件後,DMA會被自動服務

CPU中斷是依靠AXINT事件

有2個複位源,軟件和硬件複位

軟件複位通過GBLCTL寄存器,複位發送和接收等IO

硬件複位,

TDM模式中所有的數據為AXR[n]都是與時鍾同步,同時數據傳輸是連續的,數據單元之間沒有延遲,單元N的最後一位後麵緊跟著下一單元的第一位。同時幀同步信號可能會相對於第一個單元的第一位有0,1或者2個周期的延遲。

一般通過DMA端口來訪問McASP的XRBUF寄存器,通過DMA端口,DMA/CPU可以僅僅通過一個地址來對所有的串行器服務,也就是CPU /DMA可以通過DMA端口按照升序的順序循環地對每個被使能的接收/發送通道進行寫/讀取操作。如有4個通道(1,3,5,6)被使能為接收通道,則讀 取的時候需要進行4次讀取操作,得到的數據分別為通道1,3,5,6的數據。與DMA端口訪問不同,通過外圍配置總線訪問訪問XRBUF 時,CPU/DMA必須提供每次訪問的準確XBUFn或者RBUFn地址。推薦使用DMA端口對McASP進行訪問

對於McASP來說,DMA事件的產生和CPU中斷產生之間是有區別的,DMA事件是在數據準備就緒後自動產生的,不需要對寄存器進行設置,而CPU中斷的產生需要將XINTCTL/RINTCTL寄存器中的中斷使能。

當對McASP初始化的過程中,將McASP中相應的串行器帶出複位狀態後(GBLCTL寄存器中的XSRCLR位從0變到1),會使得傳輸狀態寄存器 XSTAT中的XDATA位從0變為1,即表示發送串行器的XBUF中內容為空,需要寫入數據,該變化會觸發一個EDMA事件(也可以觸發中斷事件,如果 中斷使能的話),使得EDMA對XBUF進行寫操作,並且每次XBUF的數據被移入XRSR後XDATA都會置位,觸發EDMA數據傳輸,直到EDMA中 的計數器達到0。

ACLKX和AHCLKX可以做時鍾輸入,也可以做時鍾輸出?

時鍾的配置例子:

假設,模塊時鍾為26M,IIS格式,192K的頻率,slot是32bit

係統時鍾周期 = 1/26 = 38.5ns

ACLKX時鍾計算:

IIS格式有左右兩個聲道,一個聲道(slot)有32Bit,那麽就是32*2=64Bit,2個Slot相加

采樣頻率為192K,周期=1/192K/64=81.4ns

DMA(AXEVT)事件,

1/192k/2=2604ns   因為一組產生2個AXEVT事件

AXEVT的延時

5組MCASP時鍾??(這個是什麽,為什麽是5組)

38.5ns * 5 = 192.5ns

 

設置時間:

3組MCASP時鍾 + 4個ACLKX周期

=(38.5ns * 3) + (4 * 81.4ns)

=441.1ns

處理器服務時間

=Time Slot – AXEVT延時 – 設置時間

= 2604 ns - 441.1 ns - 192.5 ns

= 1970.4 ns

我要評論:  
*內 容:
驗證碼: 換一張
 

共有0條評論

還在等什麽,趕緊來評論!
網站地圖k8凱發體育appk8凱發體育app下載凱發k8體育APP凱發k8娛樂官網app下載體育凱發k8體育APP官方網站下載球盟會APP手機登錄球盟會官網千億體育官方一首頁