
北京谈球吧论坛科技有限公司
谘詢熱線:010-82488292
公司電話:010-82488292
公司傳真:010-82611646
企業郵箱:sales@changyinwuye.com
地址:北京市海澱區中關村大街19號 新中關大廈B座南翼15層1507室
AM335X MCASP與 AIC3100調試心得
摘要 : 首先先確定,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
上一篇:Videostrong商顯主板RK3288 I2C 通訊介紹資料1970-01-01
下一篇:BB-Black之PRU-ICSS簡析1970-01-01
文章推薦
- RK3288底板+核心板設計過程
- RK3288廣告機硬件和軟件調試心得
- 一款基於TI Sitara Cortex-A8 AM3358的嵌入式單板機
- BeagleBone產品采用了谈球吧论坛儀器推出的Sitara AM335x Cortex A8 ARM處理器
- 一個帶有HDMI視頻輸入的VS-RK3288方案
- 瑞芯微vs-rk3288方案定製androids 開發板
- RK3288在人臉識別上的應用及外接雙路攝像頭
- 谈球吧论坛儀器(TI)工業以太網解決方案
- AM335x ARM Cortex-A8處理器-TI DLP 3D打印機總體解決方案
- 瑞星微RK3288方案設計
- i.MX6Q Cortex-A9新一代智能平台
- i.MX6Q車載全觸控智能管理終端解決方案
- AM谈球吧平台正规吗嵌入式充電樁計費控製單元主板方案
- 大聯大控股世平推出 TI 、NXP 多領域應用人機交互平台
- 強化物聯網“心髒”,智能網關設計詳解
- TI AM437x係列處理器為核心的嵌入式開發板Rico Board
- 如何用BB Black製作DAC係統
- 采用AM3352工控核心板進行免疫熒光檢測儀解決方案
- 人機交互與TI Sitara處理器的產品性能介紹
- Rockchip RK3399 eMMc 的 DTS 配置說明
我要評論: | |
*內 容: |
|
驗證碼: |
|
共有0條評論