Inter-IC Sount Bus(I2S)是針對數(shù)字音頻設備之間的音頻數(shù)據(jù)傳輸而制定的一種總線標準。I2S標準中,既規(guī)定了硬件接口規(guī)范,也規(guī)定了數(shù)字音頻數(shù)據(jù)的格式。
I2S總線接口介紹
I2S總線接口有3個主要信號,但只能實現(xiàn)數(shù)據(jù)半雙工傳輸,后來為實現(xiàn)全雙工傳輸有些設備增加了擴展數(shù)據(jù)引腳。CKS32F4xx系列控制器支持擴展的I2S總線接口。
SD(Serial Data)
串行數(shù)據(jù)線,用于發(fā)送或接收兩個時分復用的數(shù)據(jù)通道上的數(shù)據(jù)(僅半雙工模式),如果是全雙工模式,該信號僅用于發(fā)送數(shù)據(jù)。
WS(Word Select)
字段選擇線,也稱幀時鐘(LRC)線,表明當前傳輸數(shù)據(jù)的聲道,不同標準有不同的定義。WS線的頻率等于采樣頻率(FS)。
CK(Serial Clock)
串行時鐘線,也稱位時鐘(BCLK),數(shù)字音頻的每一位數(shù)據(jù)都對應有一個CK脈沖,它的頻率為:2*采樣頻率*量化位數(shù),2代表左右兩個通道數(shù)據(jù)。
ext_SD(extend Serial Data)
擴展串行數(shù)據(jù)線,用于全雙工傳輸?shù)臄?shù)據(jù)接收。另外,有時為使系統(tǒng)間更好地同步,還要傳輸一個主時鐘(MCK),CKS32F4xx系列控制器固定輸出為256*FS。
CKS32F4xx系列控制器有兩個I2S,I2S2和I2S3,兩個的資源是相互獨立的,但分別與SPI2和SPI3共用大部分資源。這樣I2S2和SPI2只能選擇一個功能使用,I2S3和SPI3相同道理。資源共用包括引腳共用和部分寄存器共用,當然也有部分是專用的??刂破鞯腎2S支持兩種工作模式,主模式和從模式;主模式下使用自身時鐘發(fā)生器生成通信時鐘。I2S功能框圖如下圖所示:
? ?
功能引腳
I2S的SD映射到SPI的MOSI引腳,ext_SD映射到SPI的MISO引腳,WS映射到SPI的NSS引腳,CK映射到SPI的SCK引腳。MCK是I2S專用引腳,用于主模式下輸出時鐘或在從模式下輸入時鐘。I2S時鐘發(fā)生器可以由控制器內(nèi)部時鐘源分頻產(chǎn)生,亦可采用CKIN引腳輸入時鐘分頻得到,一般使用內(nèi)部時鐘源即可。
參考下表CKS32F4xx系列控制器I2S引腳分布:
? ?
數(shù)據(jù)寄存器
I2S有一個與SPI共用的SPI數(shù)據(jù)寄存器(SPI_DR),有效長度為16bit,用于I2S數(shù)據(jù)發(fā)送和接收,它實際由三個部分組成,一個移位寄存器、一個發(fā)送緩沖區(qū)和一個接收緩沖區(qū),當處于發(fā)送模式時,向SPI_DR寫入數(shù)據(jù)先保存在發(fā)送緩沖區(qū),總線自動把發(fā)送緩沖區(qū)內(nèi)容轉(zhuǎn)入到移位寄存器中進行傳輸;在接收模式下,實際接收到的數(shù)據(jù)先填充移位寄存器,然后自動轉(zhuǎn)入接收緩沖區(qū),軟件讀取SPI_DR時自動從接收緩沖區(qū)內(nèi)讀取。I2S是掛載在APB1總線上的。
邏輯控制
I2S的邏輯控制通過設置相關寄存器位實現(xiàn),比如通過配置SPI_I2S配置寄存器(SPI_I2SCFGR)的相關位可以實現(xiàn)選擇I2S和SPI模式切換、選擇I2S工作在主模式還是從模式并且選擇是發(fā)送還是接收、選擇I2S標準、傳輸數(shù)據(jù)長度等等。SPI控制寄存器2(SPI_CR2)可用于設置相關中斷和DMA請求使能,I2S有5個中斷事件,分別為發(fā)送緩沖區(qū)為空、接收緩沖區(qū)非空、上溢錯誤、下溢錯誤和幀錯誤。SPI狀態(tài)寄存器(SPI_SR)用于指示當前I2S狀態(tài)。
時鐘發(fā)生器
I2S比特率用來確定I2S數(shù)據(jù)線上的數(shù)據(jù)流和I2S時鐘信號頻率。I2S比特率=每個通道的位數(shù)×通道數(shù)×音頻采樣頻率。圖為I2S時鐘發(fā)生器內(nèi)部結(jié)構。I2SxCLK(x可選2或3)可以通過RCC_CFGR寄存器的I2SSRC位選擇使用PLLI2S時鐘作為I2S時鐘源或I2S_CKIN引腳輸入時鐘作為I2S時鐘源。一般選擇內(nèi)部PLLI2S(通過R分頻系數(shù))作為時鐘源。例程程序設置PLLI2S時鐘為258MHz,R分頻系數(shù)為3,此時I2SxCLK時鐘為86MHz。
SPI_I2S預分頻器寄存器(SPI_I2SPR)的MCKOE位用于設置MCK引腳時鐘輸出使能;ODD位設置預分頻器的奇數(shù)因子,實際分頻值=I2SDIV*2+ODD;I2SDIV為8位線性分頻器,不可設置為0或1。當使能MCK時鐘輸出,即MCKOE=1時,采樣頻率計算如下:
FS=I2SxCLK/[(16*2)*((2*I2SDIV)+ODD)*8)](通道幀寬度為16bit時)
FS=I2SxCLK/[(32*2)*((2*I2SDIV)+ODD)*4)](通道幀寬度為32bit時)當禁止MCK時鐘輸出,即MCKOE=0時,采樣頻率計算如下:
FS=I2SxCLK/[(16*2)*((2*I2SDIV)+ODD))](通道幀寬度為16bit時)
FS=I2SxCLK/[(32*2)*((2*I2SDIV)+ODD))](通道幀寬度為32bit時)
I2S初始化結(jié)構體介紹
標準庫函數(shù)對I2S外設建立了一個初始化結(jié)構體I2S_InitTypeDef。初始化結(jié)構體成員用于設置I2S工作環(huán)境參數(shù),并由I2S相應初始化配置函數(shù)I2S_Init調(diào)用,這些設定參數(shù)將會設置I2S相應的寄存器,達到配置I2S工作環(huán)境的目的。
代碼清單:I2S_InitTypeDef結(jié)構體
typedef struct { uint16_t I2S_Mode; uint16_t I2S_Standard; uint16_t I2S_DataFormat; uint16_t I2S_MCLKOutput; uint32_t I2S_AudioFreq; uint16_t I2S_CPOL; }I2S_InitTypeDef;
(1)I2S_Mode:I2S模式選擇,可選主機發(fā)送、主機接收、從機發(fā)送以及從機接收模式,它設定SPI_I2SCFGR寄存器I2SCFG位的值。一般設置CKS32控制器為主機模式,當播放聲音時選擇發(fā)送模式;當錄制聲音時選擇接收模式。
(2)I2S_Standard:通信標準格式選擇,可選I2S Philips標準、左對齊標準、右對齊標準、PCM短幀標準或PCM長幀標準,它設定SPI_I2SCFGR寄存器I2SSTD位和PCMSYNC位的值。一般設置為I2S Philips標準即可。
(3)I2S_DataFormat:數(shù)據(jù)格式選擇,設定有效數(shù)據(jù)長度和幀長度,可選標準16bit格式、擴展16bit(32bit幀長度)格式、24bit格式和32bit格式,它設定SPI_I2SCFGR寄存器DATLEN位和CHLEN位的值。對應16bit數(shù)據(jù)長度可選16bit或32bit幀長度,其他都是32bit幀長度。
(4)I2S_MCLKOutput:主時鐘輸出使能控制,可選使能輸出或禁止輸出,它設定SPI_I2SPR寄存器MCKOE位的值。為提高系統(tǒng)性能一般使能主時鐘輸出。
(5)I2S_AudioFreq:采樣頻率設置,標準庫提供采樣采樣頻率選擇,分別為8kHz、11kHz、16kHz、22kHz、32kHz、44kHz、48kHz、96kHz、192kHz以及默認2Hz,它設定SPI_I2SPR寄存器的值。
(6)I2S_CPOL:空閑狀態(tài)的CK線電平,可選高電平或低電平,它設定SPI_I2SCFGR寄存器CKPOL位的值。
審核編輯:劉清
-
dsp
+關注
關注
555文章
8123瀏覽量
354274 -
電機控制
+關注
關注
3559文章
1937瀏覽量
270704 -
FFT
+關注
關注
15文章
440瀏覽量
60343 -
定時器
+關注
關注
23文章
3272瀏覽量
116751 -
浮點算法
+關注
關注
0文章
2瀏覽量
1378
原文標題:MCU微課堂|CKS32F4xx系列I2S功能
文章出處:【微信號:中科芯MCU,微信公眾號:中科芯MCU】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
CKS32F4xx系列產(chǎn)品串口DMA傳輸
CKS32F4xx系列RNG功能設置

CKS32F4xx系列FSMC功能簡介

評論