FPGA嵌入式項(xiàng)目開(kāi)發(fā)(第4篇 消費(fèi)電子開(kāi)發(fā)實(shí)例)_第1頁(yè)
FPGA嵌入式項(xiàng)目開(kāi)發(fā)(第4篇 消費(fèi)電子開(kāi)發(fā)實(shí)例)_第2頁(yè)
FPGA嵌入式項(xiàng)目開(kāi)發(fā)(第4篇 消費(fèi)電子開(kāi)發(fā)實(shí)例)_第3頁(yè)
FPGA嵌入式項(xiàng)目開(kāi)發(fā)(第4篇 消費(fèi)電子開(kāi)發(fā)實(shí)例)_第4頁(yè)
FPGA嵌入式項(xiàng)目開(kāi)發(fā)(第4篇 消費(fèi)電子開(kāi)發(fā)實(shí)例)_第5頁(yè)
已閱讀5頁(yè),還剩165頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

FPGA嵌入式項(xiàng)目開(kāi)發(fā)(第4篇消費(fèi)電子開(kāi)發(fā)實(shí)例)目錄\h第9章壓力傳感器數(shù)據(jù)采集系統(tǒng)\h9.1壓力傳感器數(shù)據(jù)采集系統(tǒng)概述\h9.1.1壓力傳感器概述\h9.1.2增益放大器\h9.1.3模數(shù)轉(zhuǎn)換器(ADC)\h9.2壓力傳感器數(shù)據(jù)采集系統(tǒng)硬件電路\h9.3壓力傳感器硬件系統(tǒng)設(shè)計(jì)\h9.3.1創(chuàng)建QuartusII工程項(xiàng)目\h9.3.2創(chuàng)建SOPC系統(tǒng)\h9.3.3生成NiosII系統(tǒng)\h9.3.4創(chuàng)建頂層原理圖模塊\h9.4壓力傳感器軟件系統(tǒng)設(shè)計(jì)與程序代碼\h9.4.1創(chuàng)建NiosII工程\h9.4.2程序代碼設(shè)計(jì)\h9.5實(shí)例總結(jié)\h第10章SD卡音樂(lè)播放器設(shè)計(jì)\h10.1SD存儲(chǔ)卡概述\h10.1.1SD存儲(chǔ)卡物理結(jié)構(gòu)與接口規(guī)范\h10.1.2SD存儲(chǔ)卡總線協(xié)議\h10.2SD卡音樂(lè)播放器與FPGA接口電路設(shè)計(jì)\h10.2.1SD存儲(chǔ)卡硬件接口電路\h10.2.2字符型LCD硬件電路\h10.3硬件系統(tǒng)的SOPC設(shè)計(jì)\h10.3.1創(chuàng)建QuartusII工程項(xiàng)目\h10.3.2創(chuàng)建SOPC系統(tǒng)\h10.3.3生成NiosII系統(tǒng)\h10.3.4創(chuàng)建工程頂層文件與子模塊文件\h10.4系統(tǒng)軟件設(shè)計(jì)與程序代碼\h10.5實(shí)例總結(jié)\h第11章大容量存儲(chǔ)器系統(tǒng)設(shè)計(jì)\h11.1存儲(chǔ)器概述\h11.1.1Flash存儲(chǔ)器概述\h11.1.2SDRAM存儲(chǔ)器概述\h11.1.3SRAM存儲(chǔ)器概述\h11.2存儲(chǔ)器與FPGA硬件接口電路設(shè)計(jì)\h11.2.1SDRAM存儲(chǔ)器硬件電路\h11.2.2Flash存儲(chǔ)器硬件電路\h11.2.3SRAM存儲(chǔ)器硬件電路\h11.2.4復(fù)位電路與LED電路\h11.3硬件系統(tǒng)設(shè)計(jì)\h11.3.1創(chuàng)建QuartusII工程項(xiàng)目\h11.3.2創(chuàng)建SOPC系統(tǒng)\h11.3.3生成NiosII系統(tǒng)\h11.3.4創(chuàng)建頂層模塊\h11.4軟件設(shè)計(jì)與程序代碼\h11.5實(shí)例總結(jié)\h第12章LCD液晶顯示器/觸摸屏應(yīng)用設(shè)計(jì)\h12.1LCD液晶顯示/觸摸屏概述\h12.1.1LCD液晶顯示屏概述\h12.1.2觸摸屏概述\h12.2LCD液晶顯示/觸摸屏功能及應(yīng)用\h12.2.1液晶顯示模塊概述\h12.2.2觸摸屏控制芯片概述\h12.2.3LCD液晶顯示/觸摸屏硬件接口電路\h12.3硬件系統(tǒng)設(shè)計(jì)\h12.3.1創(chuàng)建QuartusII工程項(xiàng)目\h12.3.2創(chuàng)建SOPC系統(tǒng)\h12.3.3生成NiosII系統(tǒng)\h12.3.4創(chuàng)建頂層模塊\h12.4軟件設(shè)計(jì)與程序代碼\h12.4.1μC/OS-II操作系統(tǒng)移植要點(diǎn)\h12.4.2NiosII系統(tǒng)工程創(chuàng)建\h12.5實(shí)例總結(jié)\h第13章數(shù)字溫度傳感器應(yīng)用\h13.1數(shù)字溫度傳感器概述\h13.1.1LM75A簡(jiǎn)述\h13.1.2LM75A器件引腳描述\h13.1.3LM75A相關(guān)寄存器介紹\h13.1.4中斷(OS)輸出\h13.1.5I2C總線通信協(xié)議\h13.2數(shù)字溫度傳感器與FPGA接口電路\h13.3傳感器硬件系統(tǒng)設(shè)計(jì)\h13.3.1創(chuàng)建QuartusII工程項(xiàng)目\h13.3.2創(chuàng)建SOPC系統(tǒng)\h13.3.3生成NiosII系統(tǒng)\h13.3.4創(chuàng)建頂層原理圖模塊\h13.4軟件設(shè)計(jì)與程序代碼\h13.4.1創(chuàng)建NiosII工程\h13.4.2程序代碼設(shè)計(jì)與修改\h13.5實(shí)例總結(jié)第9章壓力傳感器數(shù)據(jù)采集系統(tǒng)工業(yè)控制系統(tǒng)中需要測(cè)量和控制的參數(shù)往往都是連續(xù)變化的模擬量信號(hào),如溫度、壓力、流量、速度等。這些物理量和控制參數(shù)往往都是連續(xù)變化的電壓和電流,因此,必須將其變換成數(shù)字量,才能被數(shù)字計(jì)算機(jī)所識(shí)別。模擬量轉(zhuǎn)換為數(shù)字量時(shí)必然使用到A/D轉(zhuǎn)換器,本章講述如何應(yīng)用A/D轉(zhuǎn)換器實(shí)現(xiàn)壓力傳感器數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)。9.1壓力傳感器數(shù)據(jù)采集系統(tǒng)概述市場(chǎng)上傳統(tǒng)的壓力傳感器信號(hào)的采集和處理,多數(shù)是以單片機(jī)或微處理器為控制核心,雖然編程簡(jiǎn)單、控制靈活,但缺點(diǎn)是單片機(jī)的速度慢、控制周期長(zhǎng)。FPGA的時(shí)鐘頻率超過(guò)100MHz,以高集成度的FPGA芯片為控制核心,進(jìn)行數(shù)據(jù)采集控制、數(shù)據(jù)時(shí)序控制等。基于FPGA的數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)具有開(kāi)發(fā)周期短、靈活性強(qiáng)、通用能力好、易于開(kāi)發(fā)、擴(kuò)展等優(yōu)點(diǎn),既降低了設(shè)計(jì)難度,又加快了產(chǎn)品的開(kāi)發(fā)周期。基于FPGA的壓力傳感器數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)能使其信號(hào)采集速度、轉(zhuǎn)換速率以及內(nèi)部處理能力都要遠(yuǎn)遠(yuǎn)超過(guò)傳統(tǒng)的單片機(jī)。圖9-1所示的是一個(gè)簡(jiǎn)單的基于FPGA壓力傳感器數(shù)據(jù)采集系統(tǒng)的硬件結(jié)構(gòu)圖,它由4個(gè)主要部分組成:壓力傳感器,增益放大器,模數(shù)轉(zhuǎn)換器(ADC)以及FPGA核心控制單元等組成。圖9-1壓力傳感器數(shù)據(jù)采集系統(tǒng)結(jié)構(gòu)圖壓力傳感器是一種硅壓阻式壓力傳感器產(chǎn)品,可提供指定壓力滿量程的模擬電平輸出信號(hào)(典型值是0~25mV)。增益放大器則將壓力傳感器輸出的弱信號(hào)放大到足夠的電壓幅度,用于模數(shù)轉(zhuǎn)換器的模擬輸入。模數(shù)轉(zhuǎn)換器將足夠幅度的模擬輸入電平信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),其工作過(guò)程受FPGA核心控制單元控制。最后由FPGA核心控制單元完成對(duì)數(shù)字信號(hào)的處理與分析。9.1.1壓力傳感器概述壓力傳感器用于非腐蝕性、非電離的工作流體,如空氣和各種干氣體等。壓力傳感器一般采用硅壓敏電阻技術(shù)的惠斯通電橋結(jié)構(gòu),內(nèi)部包含的感應(yīng)元件由4個(gè)壓電電阻組成,它們埋藏在一個(gè)化學(xué)蝕刻而成的薄硅隔膜表面下。壓力的變化使得隔膜產(chǎn)生形變,產(chǎn)生一個(gè)拉扯或扭曲力,這樣電阻的阻值就隨之發(fā)生改變,通過(guò)電路產(chǎn)生一個(gè)模擬輸出電信號(hào)。模擬輸出電信號(hào)在補(bǔ)償供電范圍內(nèi)與供電電壓成比例,分辨率高、應(yīng)用靈活、結(jié)構(gòu)簡(jiǎn)單、并易于最終產(chǎn)品設(shè)計(jì)。1.壓力傳感器MPX2010簡(jiǎn)述MPX2010是Freescale公司生產(chǎn)的硅壓力傳感器,壓力測(cè)量范圍0~10kPa,具有片上溫度補(bǔ)償和校準(zhǔn)功能。MPX2010的產(chǎn)品性能特性如表9-1所列,其引腳定義與引腳排列如表9-2所列。表9-1MPX2010壓力傳感器的性能特性表9-2MPX2010引腳定義2.壓力傳感器相關(guān)的術(shù)語(yǔ)壓力傳感器相關(guān)的技術(shù)指標(biāo)與術(shù)語(yǔ)分別如下。(1)額定壓力范圍。全部技術(shù)指標(biāo)都能夠滿足的范圍。如MPX2010的額定壓力范圍是0~10kPa。(2)超壓使用范圍(過(guò)壓使用范圍)。除了線性度和滯后特性之外的其他技術(shù)指標(biāo)都能夠得到滿足,并且能夠長(zhǎng)時(shí)間承受的最大壓力。在使用半導(dǎo)體壓力傳感器的情況下,由于線性度和溫度特性的原因而故意將其額定壓力范圍設(shè)定得比較窄。因此即使在額定壓力以上,盡管精度會(huì)偏離額定值,但卻可以不受損壞地施加連續(xù)壓力進(jìn)行測(cè)量。通常超壓使用范圍為額定壓力范圍的2~3倍。(3)最大承受壓力(損壞壓力)。即使瞬間施壓,也會(huì)導(dǎo)致壓力傳感器損壞的壓力。就是說(shuō),這是壓力傳感器能夠承受的壓力極限值,通常為額定壓力的10倍左右。(4)線性度。線性度是輸出電壓偏離基準(zhǔn)直線的程度,用偏離的最大值(%FS)表示。(5)滯后特性。滯后特性的含義是當(dāng)壓力增加時(shí)與壓力減小時(shí)感知壓力與實(shí)際壓力的偏差,它用偏離的最大值(%FS)表示。(6)溫度范圍。壓力傳感器的溫度范圍包括補(bǔ)償溫度范圍和工作溫度范圍兩種類型。補(bǔ)償溫度范圍表示通過(guò)對(duì)壓力傳感器進(jìn)行量程溫度補(bǔ)償和零點(diǎn)溫度補(bǔ)償,其精度可以達(dá)到技術(shù)指標(biāo)的溫度范圍。工作溫度范圍表示壓力傳感器在正常工作條件下,由某個(gè)溫度點(diǎn)返回到常溫時(shí),其特性仍然可以恢復(fù)至常溫狀態(tài)時(shí)特性的溫度。(7)測(cè)量對(duì)象的種類。半導(dǎo)體壓力傳感器的使用,幾乎都是在空氣等非腐蝕性氣體中進(jìn)行的。不過(guò)部分傳感器廠商的膜片采用了鍍銅合金,因此也可以測(cè)量水、腐蝕性氣體、易燃易爆氣體等的壓力。(8)壓力傳感器的種類和使用范圍。壓力傳感器一般分為3種:表壓壓力傳感器,絕對(duì)壓力傳感器,差壓壓力傳感器。它們都有對(duì)應(yīng)的使用范圍和條件。表壓壓力傳感器,就是將大氣的壓力取為零,當(dāng)做基準(zhǔn)壓力進(jìn)行壓力測(cè)量的傳感器。在不需要與其他類型的壓力計(jì)(如彈簧管壓力計(jì),水銀壓力計(jì)等)相區(qū)分的時(shí)候,也簡(jiǎn)稱為表壓壓力計(jì),或者稱之為壓力計(jì)。絕對(duì)壓力傳感器,是指以真空為基準(zhǔn)壓力的壓力傳感器。它的作用是測(cè)量大氣壓,在不需要與其他類型的壓力計(jì)(如彈簧管壓力計(jì),水銀壓力計(jì)等)相區(qū)分的時(shí)候,也簡(jiǎn)稱為絕對(duì)壓力計(jì)。差壓壓力傳感器,它是用來(lái)測(cè)量?jī)煞N壓力之差的壓力傳感器。在不需要與其他類型的壓力計(jì)(如彈簧管壓力計(jì),水銀壓力計(jì)等)相區(qū)分的時(shí)候,簡(jiǎn)稱為差壓壓力計(jì)。它與運(yùn)算放大器中的差動(dòng)放大器相類似,在壓力傳輸設(shè)備中,需要保持一個(gè)相對(duì)恒定的在線壓力,差壓傳感器就把這個(gè)壓力作為基準(zhǔn)壓力,即零壓力。差壓傳感器可以檢測(cè)出非常微小的壓力變化,這一點(diǎn)是其他類型的壓力傳感器不容易做到的。3.壓力單位計(jì)量換算壓力是工業(yè)流量計(jì)量中的常用參量,其計(jì)量單位相對(duì)比較多,常用壓力計(jì)量單位就有10多種。為了便于深入學(xué)習(xí)和討論壓力傳感器的技術(shù)指標(biāo),表9-3列出了常見(jiàn)的壓力單位換算關(guān)系。表9-3常見(jiàn)壓力單位換算表續(xù)表9-3注:此外同單位換算關(guān)系還有1Mbar=106bar;1kPa=103Pa等。依據(jù)上述單位換算關(guān)系,如;如413.7Mbar。9.1.2增益放大器如果要測(cè)量的信號(hào)太?。ㄅcADC的測(cè)量范圍相比),則最好使用一個(gè)外部的前級(jí)增益放大器,同時(shí)根據(jù)信號(hào)強(qiáng)弱決定是否需要使用多級(jí)增益放大。例如:如果要測(cè)量的信號(hào)變化范圍是0mV至25mV之間,而VDD是3V,這個(gè)信號(hào)就可以由多級(jí)增益放大器來(lái)進(jìn)行放大,使它的峰—峰幅度與VDD的數(shù)值相同,增益為120。圖9-2所示為這個(gè)例子的示范,這個(gè)放大器可以把輸入信號(hào)的范圍轉(zhuǎn)換至ADC的范圍。它同樣可以在輸入信號(hào)與ADC輸入之間引入偏移量。圖9-2前置放大器9.1.3模數(shù)轉(zhuǎn)換器(ADC)模數(shù)轉(zhuǎn)換器將輸入的連續(xù)模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),本章的模數(shù)轉(zhuǎn)換器采用TLC549。1.TLC549芯片概述TLC549是TI公司的一款8位分辨率的開(kāi)關(guān)電容式逐次逼近模數(shù)轉(zhuǎn)換芯片。該芯片有一個(gè)模擬輸入端口和三態(tài)的數(shù)據(jù)輸出端口,通過(guò)串行接口可以方便地和微處理器或外圍設(shè)備連接,并通過(guò)輸入/輸出時(shí)鐘(I/OCLOCK)和片選(CS)信號(hào)控制數(shù)據(jù)輸出(DATAOUT)。TLC549的輸入/輸出時(shí)鐘頻率可達(dá)1.1MHz。TLC549模數(shù)轉(zhuǎn)換器的主要特點(diǎn)如下:●片上軟件控制采樣和保持功能?!穹切?zhǔn)誤差:±0.5LSB。●寬電壓供電:3~6V。●低功耗:最大15mW。●內(nèi)部系統(tǒng)時(shí)鐘4MHz。輸入輸出完全兼容TTL和CMOS電路。模數(shù)轉(zhuǎn)換器TLC549的內(nèi)部功能框圖如圖9-3所示。圖9-3TLC549內(nèi)部功能框圖(1)TLC549芯片引腳定義。TLC549芯片有SOP-8和DIP-8兩種封裝,其引腳排列圖如圖9-4所示,相關(guān)引腳功能描述如表9-4所列。圖9-4TLC549引腳封裝示意圖表9-4TLC549芯片引腳功能定義(2)TLC549模數(shù)轉(zhuǎn)換工作原理。TLC549與控制單元通過(guò)SPI接口連接,即通過(guò)I/OCLOCK、CS、DATAOUT3個(gè)引腳。TLC549有片內(nèi)系統(tǒng)時(shí)鐘,該時(shí)鐘與I/OCLOCK相互獨(dú)立工作,無(wú)須特殊速度和相位匹配,其工作時(shí)序如圖9-5所示。圖9-5TLC549模數(shù)轉(zhuǎn)換工作時(shí)序當(dāng)變成低電平后,ADC前一次轉(zhuǎn)換的數(shù)據(jù)(A)的最高位A7立即出現(xiàn)在數(shù)據(jù)線DATAOUT上,其余的7位數(shù)據(jù)A6~A0在I/OCLOCK的下降沿依次隨時(shí)鐘同步輸出。讀完8位數(shù)據(jù)后,ADC開(kāi)始轉(zhuǎn)換采樣數(shù)據(jù)(B),以便下一次讀取,轉(zhuǎn)換時(shí)片選信號(hào)置為高電平,且轉(zhuǎn)換的時(shí)間不超過(guò)17μs。從變?yōu)榈碗娖降絀/OCLOCK第一個(gè)時(shí)鐘到來(lái)至少要等待1.4μs。TLC549的ADC沒(méi)有啟動(dòng)控制端,只要讀取前一次數(shù)據(jù)后馬上就可以開(kāi)始新的A/D轉(zhuǎn)換,轉(zhuǎn)換完成后就進(jìn)入保持狀態(tài)。2.ADC誤差種類在需要模擬/數(shù)字轉(zhuǎn)換的應(yīng)用中,ADC轉(zhuǎn)換的精度影響到整個(gè)系統(tǒng)的質(zhì)量和效率。通常,精度誤差是以LSB為單位表示。電壓的分辨率與參考電壓相關(guān)。電壓誤差是按照LSB的倍數(shù)計(jì)算:1LSB=VREF+/2n或VDD/2n(n=8,本章的ADC芯片TLC549是8位分辨率)。本小節(jié)就ADC誤差種類做一下簡(jiǎn)單介紹。(1)偏移誤差。偏移誤差定義為從第一次實(shí)際的轉(zhuǎn)換至第一次理想的轉(zhuǎn)換之間的偏差。當(dāng)ADC轉(zhuǎn)換的數(shù)字輸出從0變?yōu)?的時(shí)刻,發(fā)生了第一次轉(zhuǎn)換。理想情況下,當(dāng)模擬輸入信號(hào)介于0.5LSB至1.5LSB表達(dá)的范圍之內(nèi)時(shí),數(shù)字輸出應(yīng)該為1;即理想情況下,第一次轉(zhuǎn)換應(yīng)該發(fā)生在輸入信號(hào)為0.5LSB時(shí)。(2)增益誤差。增益誤差定義為最后一次實(shí)際轉(zhuǎn)換與最后一次理想轉(zhuǎn)換之間的偏差。(3)微分線性誤差。微分線性誤差定義為實(shí)際步長(zhǎng)與理想步長(zhǎng)之間的最大差別。理想情況下,當(dāng)模擬輸入電壓改變1LSB時(shí)應(yīng)該在數(shù)字輸出上同時(shí)產(chǎn)生一次改變。如果數(shù)字輸出上的改變需要輸入電壓大于1LSB的改變,則ADC具有微分線性誤差。(4)積分線性誤差。積分線性誤差是所有實(shí)際轉(zhuǎn)換點(diǎn)與終點(diǎn)連線之間的最大差別。終點(diǎn)連線可以理解為在A/D轉(zhuǎn)換曲線上,第一個(gè)實(shí)際轉(zhuǎn)換與最后一個(gè)實(shí)際轉(zhuǎn)換之間的連線。(5)總未調(diào)整誤差??偽凑{(diào)整誤差定義為實(shí)際轉(zhuǎn)換曲線和理想轉(zhuǎn)換曲線之間的最大偏差。這個(gè)參數(shù)表示所有可能發(fā)生的誤差,導(dǎo)致理想數(shù)字輸出與實(shí)際數(shù)字輸出之間的最大偏差。這是在對(duì)ADC的任何輸入電壓,在理想數(shù)值與實(shí)際數(shù)值之間所記錄到的最大偏差。除了上述ADC自身因素引起的誤差以外,電源噪聲、模擬輸入信號(hào)的噪聲、模擬信號(hào)源阻抗的影響以及溫度的影響等與環(huán)境相關(guān)的因素也會(huì)引起ADC誤差。9.2壓力傳感器數(shù)據(jù)采集系統(tǒng)硬件電路壓力傳感器數(shù)據(jù)采集系統(tǒng)與FPGA的硬件電路原理圖主要包括兩個(gè)部分:壓力傳感器及增益放大電路,模數(shù)轉(zhuǎn)換器TL549及其與FPGA的硬件接口電路。(1)壓力傳感器運(yùn)放電路。壓力傳感器MPX2010與增益放大電路的原理圖如圖9-6所示。MPX2010采用12V供電,LM324采用+12V,-12V雙電源供電(電源電路原理圖請(qǐng)見(jiàn)光盤中電路原理圖文件,此處省略介紹),需要保證放大后的模擬信號(hào)幅度最大不超過(guò)3.3V的范圍,即滿量程電壓≈3.3V。圖9-6傳感器與運(yùn)放電路原理(2)模數(shù)轉(zhuǎn)換器TL549電路。模數(shù)轉(zhuǎn)換器TL549電路原理圖如圖9-7所示,它的引腳5、6、7是串行接口,與FPGA核心單元相連接,引腳2則是模擬信號(hào)輸入端。圖9-7TLC549模數(shù)轉(zhuǎn)換部分原理圖9.3壓力傳感器硬件系統(tǒng)設(shè)計(jì)本實(shí)例的壓力傳感器數(shù)據(jù)采集系統(tǒng)設(shè)計(jì),基于Altera公司的CycloneII系列EP2C8芯片。壓力傳感器數(shù)據(jù)采集硬件系統(tǒng)結(jié)構(gòu)圖如圖9-8所示。圖9-8壓力傳感器數(shù)據(jù)采集硬件系統(tǒng)結(jié)構(gòu)圖壓力傳感器數(shù)據(jù)采集硬件系統(tǒng)設(shè)計(jì)部分的主要流程如下所述。9.3.1創(chuàng)建QuartusII工程項(xiàng)目打開(kāi)QuartusII開(kāi)發(fā)環(huán)境,創(chuàng)建新工程并設(shè)置相關(guān)的信息。本實(shí)例的工程項(xiàng)目名為“adc”,如圖9-9所示。圖9-9創(chuàng)建新工程項(xiàng)目對(duì)話框單擊“Next”按鈕,選擇對(duì)應(yīng)的芯片型號(hào),如圖9-10所示。最后,單擊“Finish”按鈕,完成工程項(xiàng)目創(chuàng)建。圖9-10選擇芯片型號(hào)9.3.2創(chuàng)建SOPC系統(tǒng)在QuartusII開(kāi)發(fā)環(huán)境下,點(diǎn)擊“Tools”→“SOPCBuilder”,即可打開(kāi)SOPCBuild-er開(kāi)發(fā)工具。在彈出的對(duì)話框中輸入SOPC系統(tǒng)模塊名稱,將“TargetHDL”設(shè)置為“VerilogHDL”。本實(shí)例的SOPC系統(tǒng)模塊名稱為“adcnios”,如圖9-11所示。接下來(lái)準(zhǔn)備進(jìn)行系統(tǒng)IP組件的添加。圖9-11創(chuàng)建新SOPC工程項(xiàng)目adcnios(1)NiosIICPU型號(hào)。選擇SOPCBuilder開(kāi)發(fā)環(huán)境左側(cè)的“NiosIIProcessor”,添加CPU模塊,在“CoreNiosII”欄選擇“NiosII/s”,其他配置均選擇默認(rèn)設(shè)置即可。(2)JTAG_UART。選擇SOPCBuilder開(kāi)發(fā)環(huán)境左側(cè)的“InterfaceProtocols”→“Serial”→“JTAG_UART”,添加JTAG_UART模塊,其他選項(xiàng)均選擇默認(rèn)設(shè)置,如圖9-12所示。圖9-12添加JTAG_UART模塊(3)SDRAM控制器。選擇SOPCBuilder開(kāi)發(fā)環(huán)境左側(cè)的“MemoriesandMemoryControl”→“SDRAM”→“SDRAMController”,添加SDRAM模塊,其他選項(xiàng)視用戶具體需求設(shè)置,如圖9-13所示。圖9-13添加SDRAM控制器模塊(4)Flash模塊。選擇SOPCBuilder開(kāi)發(fā)環(huán)境左側(cè)的“MemoriesandMemoryControl”→“Flash”→“FlashMemoryInterface(CFI)”,添加Flash控制器模塊,其他選項(xiàng)視用戶具體需求設(shè)置,如圖9-14所示。圖9-14添加FLASH控制器模塊(5)EPCSSerialFlashController。選擇SOPCBuilder開(kāi)發(fā)環(huán)境左側(cè)的“MemoriesandMemoryControl”→“Flash”→“EPCSSerialFlashController”,添加EPCSSerialFlashController模塊,其他選項(xiàng)按默認(rèn)設(shè)置,如圖9-15所示。圖9-15添加EPCS控制器模塊(6)Avalon-MMTristateBridge。由于Flash的數(shù)據(jù)總線是三態(tài)的,所以NiosIICPU與Flash進(jìn)行連接時(shí)需要添加Avalon總線三態(tài)橋。選擇SOPCBuilder開(kāi)發(fā)環(huán)境左側(cè)的“BridgesandAdapters”→“MemoryMapped”→“Avalon-MMTristateBridge”,添加Avalon三態(tài)橋,并在提示對(duì)話框中選中“Regis-tered”完成設(shè)置,如圖9-16所示。圖9-16添加Avalon-MM三態(tài)橋(7)7段數(shù)碼管顯示構(gòu)件。本實(shí)例添加一個(gè)7段數(shù)碼顯示管驅(qū)動(dòng)構(gòu)件,主要用于7段數(shù)碼管段位顯示控制等功能,從菜單添加新構(gòu)件后,如圖9-17所示。圖9-17添加7段數(shù)碼管構(gòu)件該構(gòu)件是自設(shè)構(gòu)件,其構(gòu)件程序代碼如下所示。

moduleseg78led(clk,reset_n,address,write_n,writedata,read_n,readdata,seg_data,seg_

com);

inputclk;//時(shí)鐘

inputreset_n;//復(fù)位

inputwrite_n;//寫(xiě)

inputread_n;//讀

input[2:0]address;//地址

input[7:0]writedata;//寫(xiě)數(shù)據(jù)

output[7:0]readdata;//讀數(shù)據(jù)

output[7:0]seg_data;//7段數(shù)碼管位

output[7:0]seg_com;//77段數(shù)碼管段控制

reg[7:0]outdata;

reg[7:0]datain[7:0];

reg[7:0]seg_com;

reg[7:0]seg_data;

reg[7:0]bcd_led;

reg[36:0]count;

assignreaddata=outdata;

always@(posedgeclk)

begin

if(!reset_n)

/*清零*/

begin

datain[0]<=8'b00000000;

datain[1]<=8'b00000000;

datain[2]<=8'b00000000;

datain[3]<=8'b00000000;

datain[4]<=8'b00000000;

datain[5]<=8'b00000000;

datain[6]<=8'b00000000;

datain[7]<=8'b00000000;

end

elseif(!read_n)

begin

outdata<=datain[address];

end

elseif(!write_n)

begin

datain[address]<=writedata;

end

end

always@(posedgeclk)

begin

count=count+1;

end

always@(count[17:15])

/*7段數(shù)碼管輸出狀態(tài)機(jī)*/

begin

case(count[17:15])

3'b000:

begin

bcd_led=datain[0];//第1種輸出狀態(tài)

seg_com=8'b1111_1110;//對(duì)應(yīng)段控制

end

3'b001:

begin

bcd_led=datain[1];//第2種輸出狀態(tài)

seg_com=8'b1111_1101;//對(duì)應(yīng)段控制

end

3'b010:

begin

bcd_led=datain[2];//第3種輸出狀態(tài)

seg_com=8'b1111_1011;//對(duì)應(yīng)段控制

end

3'b011:

begin

bcd_led=datain[3];//第4種輸出狀態(tài)

seg_com=8'b1111_0111;//對(duì)應(yīng)段控制

end

3'b100:

begin

bcd_led=datain[4];//第5種輸出狀態(tài)

seg_com=8'b1110_1111;//對(duì)應(yīng)段控制

end

3'b101:

begin

bcd_led=datain[5];//第6種輸出狀態(tài)

seg_com=8'b1101_1111;//對(duì)應(yīng)段控制

end

3'b110:

begin

bcd_led=datain[6];//第7種輸出狀態(tài)

seg_com=8'b1011_1111;//對(duì)應(yīng)段控制

end

3'b111:

begin

bcd_led=datain[7];//第8種輸出狀態(tài)

seg_com=8'b0111_1111;//對(duì)應(yīng)段控制

end

endcase

end

always@(seg_com)

/*數(shù)碼管段控制狀態(tài)機(jī)*/

begin

case(bcd_led[3:0])

4'h0:seg_data=8'hc0;

4'h1:seg_data=8'hf9;

4'h2:seg_data=8'ha4;

4'h3:seg_data=8'hb0;

4'h4:seg_data=8'h99;

4'h5:seg_data=8'h92;

4'h6:seg_data=8'h82;

4'h7:seg_data=8'hf8;

4'h8:seg_data=8'h80;

4'h9:seg_data=8'h90;

4'ha:seg_data=8'h88;

4'hb:seg_data=8'h83;

4'hc:seg_data=8'hc6;

4'hd:seg_data=8'ha1;

4'he:seg_data=8'h86;

4'hf:seg_data=8'h8e;

endcase

end

endmodule

(8)UART串口。選擇SOPCBuilder開(kāi)發(fā)環(huán)境左側(cè)的“InterfaceProtocols”→“Serial”→“UART(RS-232SerialPort)”,添加串口模塊,完成設(shè)置,如圖9-18所示。圖9-18添加UART串口(9)TCL549模數(shù)轉(zhuǎn)換器。TCL549模數(shù)轉(zhuǎn)換器是本實(shí)例最主要的功能構(gòu)件,其作用是將壓力傳感器經(jīng)增益放大器放大后的模擬信號(hào)進(jìn)行A/D轉(zhuǎn)換,該構(gòu)件是自設(shè)構(gòu)件,從菜單添加新構(gòu)件后,如圖9-19所示。其構(gòu)件程序代碼如下所示。

`timescale1ns/1ps

moduleADC_TLC549(

clk,

read_n,

AD_DATA,

AD_CS,

AD_CLK,

irq,

readdata

);

inputAD_DATA;//模數(shù)轉(zhuǎn)換器DATAOUT端口

outputAD_CS;//模數(shù)轉(zhuǎn)換器片選信號(hào)

outputAD_CLK;//模數(shù)轉(zhuǎn)換器時(shí)鐘

outputirq;//中斷請(qǐng)求

output[7:0]readdata;//讀數(shù)據(jù)

inputread_n;//讀

inputclk;//時(shí)鐘

wireAD_DATA;

regAD_CS;

regAD_CLK_r;

regAD_CLK_EN;

reg[10:0]DCLK_DIV;

reg[4:0]COUNTER;

reg[7:0]data_out;

reg[7:0]data_reg;

regirq;

wire[7:0]readdata;

/*時(shí)鐘頻率參數(shù)*/

parameterCLK_FREQ='D50_000_000;

parameterDCLK_FREQ='D1_000_000;

assignreaddata=data_out;

always@(posedgeclk)

if(DCLK_DIV<(CLK_FREQ/DCLK_FREQ))//分頻因子判定

DCLK_DIV<=DCLK_DIV+1'b1;//確定分頻因子

else

begin

DCLK_DIV<=0;//不分頻

AD_CLK_r<=~AD_CLK_r;//確定時(shí)鐘頻率

end

always@(posedgeAD_CLK_r)

COUNTER<=COUNTER+1'b1;//計(jì)數(shù)器加1

always@(posedgeAD_CLK_r)

if(COUNTER==0)//計(jì)數(shù)值為0

begin

AD_CS<=1'b0;//片選為低電平

irq<=0;

end

elseif(COUNTER>='d2&&COUNTER<='d9)//有計(jì)數(shù)值

begin

data_reg[0]<=AD_DATA;//數(shù)據(jù)位0

data_reg[7:1]<=data_reg[6:0];//數(shù)據(jù)位7:1

AD_CLK_EN<=1;

end

elseif(COUNTER>9)//計(jì)數(shù)值大于9

begin

data_out<=data_reg;

irq<=1;

AD_CS<=1'b1;

AD_CLK_EN=1'b0;

end

assignAD_CLK=AD_CLK_EN?AD_CLK_r:1'b1;

endmodule

圖9-19添加TLC549模數(shù)轉(zhuǎn)換器構(gòu)件將Cfi_Flash控制器與Avalon-MM三態(tài)橋建立連接后,至此,本實(shí)例中所需要的CPU及IP模塊均添加完畢,如圖9-20所示。圖9-20構(gòu)建完成的SOPC系統(tǒng)9.3.3生成NiosII系統(tǒng)在SOPCBuilder開(kāi)發(fā)環(huán)境中,分別選擇菜單欄的“System”→“Auto-AssignBaseAddress”和“System”→“Auto-AssignIRQs”,分別進(jìn)行自動(dòng)分配各組件模塊的基地址和中斷標(biāo)志位操作。雙擊“NiosIIProcessor”后在“ParameterSettings”菜單下配置“ResetVector”為“flash”,設(shè)置“ExceptionVector”為“sdram”,完成設(shè)置,如圖9-21所示。圖9-21NiosIICPU向量設(shè)置配置完成后,選擇“SystemGeneration”選項(xiàng)卡,單擊下方的“Generate”,啟動(dòng)系統(tǒng)生成。9.3.4創(chuàng)建頂層原理圖模塊打開(kāi)QuartusII開(kāi)發(fā)環(huán)境,選擇主菜單“File”→“New”命令,創(chuàng)建一個(gè)BlockDia-gram/SchematicFile文件作為頂層文件,并命名為“adc_top”后保存。本實(shí)例使用SDRAM芯片作為存儲(chǔ)介質(zhì),需要使用片內(nèi)鎖相環(huán)PLL來(lái)完成SDRAM控制器與SDRAM芯片之間的時(shí)鐘相位調(diào)整。1.添加PLL模塊本例使用的PLL模塊從其他現(xiàn)成的工程項(xiàng)目文件中復(fù)制過(guò)來(lái)。復(fù)制過(guò)來(lái)的PLL模塊可以直接添加到工程的頂層原理圖文件中。2.添加集成NiosII系統(tǒng)至QuartusII工程在頂層文件中添加adcnios模塊,并完成各模塊的原理圖線路連線,如圖9-22所示。圖9-22頂層文件的模塊連接圖連線完成后,用戶選擇編輯并運(yùn)行pinset.tcl文件為FPGA芯片分配引腳,也可以通過(guò)菜單選擇圖形化視窗來(lái)分配引腳。保存整個(gè)工程項(xiàng)目文件后,即可通過(guò)主菜單工具或者工具欄中的編譯按鈕執(zhí)行編譯,生成程序下載文件。至此,硬件設(shè)計(jì)部分完成。9.4壓力傳感器軟件系統(tǒng)設(shè)計(jì)與程序代碼本節(jié)主要針對(duì)NiosII系統(tǒng)軟件設(shè)計(jì)進(jìn)行講述,其主要設(shè)計(jì)流程如下。9.4.1創(chuàng)建NiosII工程啟動(dòng)NiosIIIDE開(kāi)發(fā)環(huán)境,選擇主菜單“File”→“New”→“Project”命令,創(chuàng)建NiosII工程項(xiàng)目文件,并進(jìn)行相關(guān)選項(xiàng)配置。9.4.2程序代碼設(shè)計(jì)NiosII新工程建立后,單擊“Finish”生成工程,添加并修改代碼。壓力傳感器數(shù)據(jù)采集系統(tǒng)的主程序ad_main.C的軟件代碼與程序注釋如下。/***********************************************************

*功能說(shuō)明:壓力傳感器輸出電壓值與壓力值成比例地輸入至TLC549,測(cè)試TLC549模數(shù)轉(zhuǎn)換功

能,采集到的數(shù)據(jù)打印顯示,并顯示在數(shù)碼管上

***********************************************************/

#include<stdio.h>

#include"system.h"

#include"io.h"

#include"unistd.h"

intmain()

{

unsignedintvoltage,ad_data;

while(1)

{

/*讀取模數(shù)轉(zhuǎn)換器中的數(shù)據(jù)*/

ad_data=IORD_8DIRECT(ADC_TLC549_0_BASE,0)&0x00ff;

/*轉(zhuǎn)換為電壓值=3.3V參考電壓,8位分辨率*/

voltage=3300*ad_data/256;

printf("voltage=%4dmV\n",voltage);

/*輸出到數(shù)碼管顯示*/

IOWR_8DIRECT(SEG78LED_0_BASE,4,voltage%10);

IOWR_8DIRECT(SEG78LED_0_BASE,5,(voltage/10)%10);

IOWR_8DIRECT(SEG78LED_0_BASE,6,(voltage/100)%10);

IOWR_8DIRECT(SEG78LED_0_BASE,7,(voltage/1000)%10);

usleep(1000000);

}

return0;

}

在NiosIIIDE環(huán)境中完成所有程序代碼設(shè)計(jì)與編譯參數(shù)配置后,即可執(zhí)行編譯和下載,驗(yàn)證系統(tǒng)運(yùn)行效果。9.5實(shí)例總結(jié)本章講述了TLC549芯片和壓力傳感器MPX2010的主要參數(shù)和工作原理。本章采用簡(jiǎn)單而實(shí)用的硬件電路設(shè)計(jì)了壓力傳感器數(shù)據(jù)采集系統(tǒng),使系統(tǒng)在準(zhǔn)確完成數(shù)據(jù)采集的前提下,有效節(jié)約硬件資源,同時(shí)使系統(tǒng)功能也易于拓展。實(shí)例中需要將壓力傳感器增益放大電路的模擬電壓輸入至TLC549模數(shù)轉(zhuǎn)換器,因此請(qǐng)注意增益放大器的增益調(diào)節(jié)范圍,不要超出TLC549及FPGA的I/O引腳的正常電壓范圍。第10章SD卡音樂(lè)播放器設(shè)計(jì)多媒體/音視頻播放器經(jīng)常采用大容量的SD存儲(chǔ)卡來(lái)存儲(chǔ)音樂(lè)或者視頻文件。本實(shí)例主要利用NiosII處理器、內(nèi)部硬件資源以及外圍音頻解碼芯片等資源,實(shí)現(xiàn)一個(gè)SD卡音樂(lè)播放器。SD卡音樂(lè)播放器讀取存儲(chǔ)在SD卡里面的音頻格式文件,并通過(guò)立體聲音頻解碼芯片輸出。10.1SD存儲(chǔ)卡概述SD存儲(chǔ)卡(SecureDigitalMemoryCard)是一種基于半導(dǎo)體快閃存儲(chǔ)器的新一代高速存儲(chǔ)設(shè)備。SD存儲(chǔ)卡的技術(shù)是從MMC卡(MultiMediaCard)格式上發(fā)展而來(lái),在兼容SD存儲(chǔ)卡基礎(chǔ)上發(fā)展了SDIO(SDInput/Output)卡,此兼容性包括機(jī)械,電子,電力,信號(hào)和軟件,通常將SD、SDIO卡俗稱SD存儲(chǔ)卡。SD卡具有高記憶容量、快速數(shù)據(jù)傳輸率、極大的移動(dòng)靈活性以及很好的安全性。它被廣泛地應(yīng)用于便攜式裝置上,例如數(shù)碼相機(jī)、個(gè)人數(shù)碼助理(PDA)和多媒體播放器等。SD卡的結(jié)構(gòu)能保證數(shù)字文件傳送的安全性,也很容易重新格式化,所以有著廣泛的應(yīng)用領(lǐng)域。音樂(lè)、電影等多媒體文件都可以方便地保存到SD卡中。目前市場(chǎng)上SD卡的品牌很多,諸如:SANDISK,Kingmax,Panasonic和Kings-ton。SD卡作為一種新型的存儲(chǔ)設(shè)備,具有以下特點(diǎn):●高存儲(chǔ)容量,最常用的容量:1GB,2GB,4GB,8GB,16GB,32GB。●內(nèi)置加密技術(shù),適應(yīng)基于SDMI協(xié)議的著作版權(quán)保護(hù)功能。●高速數(shù)據(jù)傳送;最大讀寫(xiě)速率為10MB/s。●體積輕小,便于攜帶,具有很強(qiáng)的抗沖擊能力。10.1.1SD存儲(chǔ)卡物理結(jié)構(gòu)與接口規(guī)范SD存儲(chǔ)卡尺寸為32mm×24mm×2.1mm,相當(dāng)于郵票大小。這樣尺寸的存儲(chǔ)卡用在數(shù)碼相機(jī)、DV機(jī)中還算合適,但如果用于尺寸空間要求嚴(yán)格的手機(jī)數(shù)碼產(chǎn)品,則顯得過(guò)分“龐大”。為了滿足數(shù)碼產(chǎn)品不斷縮小存儲(chǔ)卡體積的要求,SD卡還逐漸演變出了MiniSD,MicroSD兩種規(guī)格。它們與標(biāo)準(zhǔn)SD卡相比,外形上更加小巧。盡管MiniSD和Mi-croSD卡的外形大小及接口形狀與原來(lái)的SD卡有所不同,但接口規(guī)范保持不變,確保了兼容性。本小節(jié)針對(duì)SD卡物理性能構(gòu)造以及接口引腳規(guī)范進(jìn)行簡(jiǎn)單介紹。1.SD/SDIO存儲(chǔ)卡的物理結(jié)構(gòu)SD/SDIO存儲(chǔ)卡的物理結(jié)構(gòu)如圖10-1所示。圖10-1SD存儲(chǔ)卡物理結(jié)構(gòu)2.SD/SDIO卡接口規(guī)范及引腳定義SDIO版本2.0規(guī)范定義了兩種類型的SDIO卡:全速卡和低速卡。全速卡在0~25MHz的時(shí)鐘范圍內(nèi)支持SPI傳輸模式、1位SD傳輸模式以及4位SD傳輸模式。全速的SDIO卡的數(shù)據(jù)傳輸速率超過(guò)10MB/s。低速SDIO卡只需要SPI和1位SD傳輸模式,但也可以支持4位傳輸模式。此外,低速的SDIO卡支持0~400kHz的時(shí)鐘范圍。低速卡的用途主要是支持低速I/O硬件設(shè)備。比如,調(diào)制解調(diào)器等功能,條形碼掃描儀,GPS接收機(jī)等。SDIO卡引腳分布示意圖如圖10-2所示。圖10-2SDIO卡引腳分布示意圖SDIO卡接口一共有9個(gè)引腳,引腳功能定義如表10-1所列。表10-1SDIO卡引腳功能定義注:S:電源;I:輸入;O:輸出上拉;PP:輸入/輸出上拉。10.1.2SD存儲(chǔ)卡總線協(xié)議SD存儲(chǔ)卡的接口可以支持SD總線傳輸模式(簡(jiǎn)稱SD模式)和SPI接口總線傳輸模式(簡(jiǎn)稱SPI模式)兩種操作模式,主機(jī)系統(tǒng)可以選擇其中任一模式。SD模式允許4位數(shù)據(jù)寬度的高速數(shù)據(jù)傳輸;SPI模式允許使用簡(jiǎn)單通用的SPI外設(shè)接口,相對(duì)于SD模式來(lái)說(shuō)傳輸速度較低。1.SD總線傳輸模式SD傳輸模式允許1到4位數(shù)據(jù)信號(hào)設(shè)置。上電后,SD卡默認(rèn)地使用DAT0。初始化之后,主機(jī)可以改變數(shù)據(jù)寬度。SD總線上的通訊是以命令幀、反饋幀和數(shù)據(jù)幀進(jìn)行的,這幾種幀格式都包含起始位和停止位?!衩顜?。命令幀用來(lái)傳輸了一個(gè)操作命令的令牌?!穹答亷?。反饋幀是從地址卡或者所有連接卡發(fā)送給主機(jī)的作為對(duì)接收到的命令幀做出應(yīng)答的令牌?!駭?shù)據(jù)幀。數(shù)據(jù)幀用來(lái)在卡和主機(jī)之間進(jìn)行真正的有用的數(shù)據(jù)傳輸。數(shù)據(jù)是通過(guò)數(shù)據(jù)鏈路進(jìn)行傳輸?shù)?。SD總線協(xié)議的數(shù)據(jù)傳輸是以數(shù)據(jù)塊的方式進(jìn)行的。數(shù)據(jù)塊之后通常跟著CRC校驗(yàn)碼。在協(xié)議中定義了數(shù)據(jù)傳輸?shù)姆绞娇梢允菃螇K和多塊傳輸。多塊傳輸在進(jìn)行寫(xiě)卡操作時(shí)的速度比單塊傳輸快得多。多塊傳輸會(huì)在CMD信號(hào)上出現(xiàn)一個(gè)停止命令幀時(shí)中斷傳輸。SD傳輸模式下讀操作的數(shù)據(jù)塊傳輸時(shí)序圖如圖10-3所示。圖10-3SD模式讀操作時(shí)的數(shù)據(jù)塊傳輸時(shí)序?qū)懖僮骱妥x操作在時(shí)序上的不同,在于數(shù)據(jù)線DAT0上多了一個(gè)寫(xiě)操作忙的信號(hào)。SD傳輸模式下寫(xiě)操作時(shí)的數(shù)據(jù)塊傳輸時(shí)序圖如圖10-4所示。圖10-4SD模式寫(xiě)操作時(shí)的數(shù)據(jù)塊傳輸時(shí)序2.SPI接口總線傳輸模式SPI接口總線傳輸模式是一種通過(guò)SPI接口訪問(wèn)SD卡的兼容方式。SPI標(biāo)準(zhǔn)僅定義了物理連接方式,并未包括完整的數(shù)據(jù)傳輸協(xié)議。SD卡的SPI接口總線傳輸方式使用了和SD總線傳輸模式相同的命令集。SPI傳輸模式是面向字節(jié)的傳輸,它的命令和數(shù)據(jù)塊都是以8個(gè)比特為單位進(jìn)行分組的。與SD總線傳輸協(xié)議相似,SPI接口總線傳輸?shù)男畔⒁卜譃榭刂茙?,反饋幀和?shù)據(jù)幀。所有主機(jī)和卡之間的通訊都由主機(jī)進(jìn)行控制,主機(jī)通過(guò)拉低片選信號(hào)啟動(dòng)一個(gè)總線事務(wù)。SPI接口總線傳輸?shù)姆答伔绞胶蚐D總線傳輸模式協(xié)議相比有以下3個(gè)方面的不同:(1)被選中的卡必須時(shí)刻對(duì)命令幀做出響應(yīng);(2)使用兩種新的響應(yīng)結(jié)構(gòu)(8位或16位);(3)當(dāng)卡獲取數(shù)據(jù)出問(wèn)題時(shí),它將發(fā)出一個(gè)出錯(cuò)反饋幀通知主機(jī),而不是使用超時(shí)檢測(cè)的方式。除了需要對(duì)命令幀做出反饋之外,在進(jìn)行寫(xiě)卡操作期間,還需要對(duì)每一個(gè)發(fā)送到卡的數(shù)據(jù)塊發(fā)一個(gè)專門的數(shù)據(jù)反饋令牌。SPI接口總線傳輸模式下讀操作時(shí)的數(shù)據(jù)塊傳輸時(shí)序圖如圖10-5所示。圖10-5SPI模式寫(xiě)操作時(shí)的數(shù)據(jù)塊傳輸時(shí)序一旦數(shù)據(jù)讀取出現(xiàn)錯(cuò)誤,卡就不會(huì)再傳輸數(shù)據(jù),取而代之的是發(fā)送一個(gè)數(shù)據(jù)出錯(cuò)令牌給主機(jī)。數(shù)據(jù)讀取出錯(cuò)時(shí)的處理時(shí)序圖如圖10-6所示。圖10-6SPI模式數(shù)據(jù)讀取出錯(cuò)時(shí)的處理時(shí)序在SPI模式中也支持單塊和多塊的數(shù)據(jù)寫(xiě)命令,卡從主機(jī)端接收到一個(gè)數(shù)據(jù)塊之后,它就會(huì)發(fā)一個(gè)數(shù)據(jù)響應(yīng)令牌給主機(jī),如果接收的數(shù)據(jù)經(jīng)校驗(yàn)無(wú)錯(cuò),就把數(shù)據(jù)寫(xiě)入存儲(chǔ)卡介質(zhì)中;如果卡處于忙狀態(tài),它會(huì)持續(xù)發(fā)一個(gè)“工作忙”的令牌給主機(jī)。SPI接口總線傳輸模式下寫(xiě)操作時(shí)的數(shù)據(jù)塊傳輸時(shí)序圖如圖10-7所示。圖10-7SPI模式寫(xiě)操作時(shí)的數(shù)據(jù)塊傳輸時(shí)序10.2SD卡音樂(lè)播放器與FPGA接口電路設(shè)計(jì)SD卡音樂(lè)播放器硬件部分電路主要由SD存儲(chǔ)卡模塊、LCD顯示模塊、TLV320AIC23B音頻解碼器和FPGA主控制器等部分組成。由FPGA控制在LCD上顯示SD存儲(chǔ)卡播放MP3音樂(lè)的狀態(tài),TLV320AIC23B輸出音樂(lè)。SD卡播放器硬件電路結(jié)構(gòu)如圖10-8所示。圖10-8SD卡播放器硬件電路結(jié)構(gòu)圖SD卡音樂(lè)播放器的音樂(lè)輸出功能由TLV320AIC23B音頻解碼器實(shí)現(xiàn),其硬件電路原理圖參考第7章介紹。本實(shí)例僅介紹字符型LCD顯示電路及SD存儲(chǔ)卡接口電路部分硬件原理圖。10.2.1SD存儲(chǔ)卡硬件接口電路SD儲(chǔ)存卡采用SPI外設(shè)接口與FPGA連接,其硬件接口電路原理圖如圖10-9所示。圖10-9SD存儲(chǔ)卡硬件接口電路原理圖●SD_DAT3是片選信號(hào)(SD卡槽引腳1);●SD_CMD是SPI接口數(shù)據(jù)輸入信號(hào)(SD卡槽引腳2);●SD_CLK是SPI接口時(shí)鐘輸入信號(hào)(SD卡槽引腳5);●SD_DAT是SPI接口數(shù)據(jù)輸出信號(hào)(SD卡槽引腳7),其他數(shù)據(jù)引腳空置。10.2.2字符型LCD硬件電路圖10-10所示的是一個(gè)16×2字符型液晶顯示器,可以顯示兩行且每行可以顯示16個(gè)字符。其主要引腳功能定義如下所述。圖10-10字符型LCD硬件原理圖●第3腳:Vo為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接電源地時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“拖影”,使用時(shí)可以通過(guò)1個(gè)10kΩ的電位器調(diào)整對(duì)比度?!竦?腳:LCD_RS為寄存器選擇引腳,高電平時(shí)選擇數(shù)據(jù)寄存器,低電平時(shí)選擇指令寄存器?!竦?腳:LCD_RW為讀寫(xiě)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。當(dāng)LCD_RS和LCD_RW共同為低電平時(shí)可以寫(xiě)入指令或者顯示地址,當(dāng)LCD_RS為低電平LCD_RW為高電平時(shí)可以讀忙信號(hào),當(dāng)LCD_RS為高電平LCD_RW為低電平時(shí)可以寫(xiě)入數(shù)據(jù)?!竦?腳:LCD_E端為使能端,當(dāng)LCD_E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令?!竦?~14腳:LCD_D0~D7為8位雙向數(shù)據(jù)線。1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了點(diǎn)陣字符圖形,如圖10-11中的表格所示。這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫(xiě)、常用的符號(hào)等。每一個(gè)字符都有一個(gè)固定的代碼,比如大寫(xiě)的英文字母“A”的代碼是0100_0001B(41H)。顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母“A”。圖10-11點(diǎn)陣字符圖形標(biāo)準(zhǔn)庫(kù)10.3硬件系統(tǒng)的SOPC設(shè)計(jì)SD存儲(chǔ)卡音樂(lè)播放器硬件SOPC系統(tǒng)構(gòu)件組成主要包括字符型LCD、音頻解碼器、SD卡。3條SPI外設(shè)接口對(duì)應(yīng)時(shí)鐘與數(shù)據(jù)信號(hào)構(gòu)件、功能按鍵等。其完整的硬件系統(tǒng)結(jié)構(gòu)圖如圖10-12所示。圖10-12SD存儲(chǔ)卡音樂(lè)播放器硬件系統(tǒng)結(jié)構(gòu)圖SOPC硬件系統(tǒng)設(shè)計(jì)主要構(gòu)件創(chuàng)建過(guò)程如下文介紹。10.3.1創(chuàng)建QuartusII工程項(xiàng)目打開(kāi)QuartusII開(kāi)發(fā)環(huán)境,創(chuàng)建新工程并設(shè)置相關(guān)的信息,如圖10-13所示。圖10-13創(chuàng)建新工程項(xiàng)目對(duì)話框單擊“Finish”按鈕,完成工程項(xiàng)目創(chuàng)建。如果在QuartusII的“ProjectNavigator”中顯示的FPGA芯片與實(shí)際應(yīng)用有差異,則可選擇“Assignments”→“Device”命令,在彈出的窗體中進(jìn)行相應(yīng)設(shè)置。10.3.2創(chuàng)建SOPC系統(tǒng)在QuartusII開(kāi)發(fā)環(huán)境下,點(diǎn)擊“Tools”→“SOPCBuilder”,即可打開(kāi)系統(tǒng)開(kāi)發(fā)環(huán)境集成的SOPC開(kāi)發(fā)工具SOPCBuilder。在彈出的對(duì)話框中填入SOPC系統(tǒng)模塊名稱,將“TargetHDL”設(shè)置為“VerilogHDL”,本實(shí)例的SOPC系統(tǒng)模塊名稱為“sdaudi-onios”,如圖10-14所示。接下來(lái)準(zhǔn)備進(jìn)行系統(tǒng)IP組件的添加和創(chuàng)建,本節(jié)對(duì)主要IP組件進(jìn)行介紹,部分構(gòu)件省略說(shuō)明。圖10-14創(chuàng)建SOPC新工程項(xiàng)目對(duì)話框(1)NiosIICPU型號(hào)。選擇SOPCBuilder開(kāi)發(fā)環(huán)境左側(cè)的“NiosIIProcessor”,添加CPU模塊,在“CoreNiosII”欄選擇“NiosII/s”,其他配置根據(jù)用戶需求調(diào)整設(shè)置即可,如圖10-15所示。圖10-15添加NiosCPU模塊(2)JTAG_UART。選擇SOPCBuilder開(kāi)發(fā)環(huán)境左側(cè)的“InterfaceProtocols”→“Serial”→“JTAG_UART”,添加JTAG_UART模塊,其他選項(xiàng)均選擇默認(rèn)設(shè)置,如圖10-16所示。圖10-16添加JTAG_UART模塊(3)SDRAM控制器。選擇SOPCBuilder開(kāi)發(fā)環(huán)境左側(cè)的“MemoriesandMemoryControl”→“SDRAM”→“SDRAMController”,添加RAM模塊,其他選項(xiàng)視用戶具體需求設(shè)置,如圖10-17所示。圖10-17添加SDRAM控制器模塊(4)Avalon-MMTristateBridge。由于Flash的數(shù)據(jù)總線是三態(tài)的,所以NiosIICPU與Flash進(jìn)行連接時(shí)需要添加Avalon總線三態(tài)橋。選擇SOPCBuilder開(kāi)發(fā)環(huán)境左側(cè)的“BridgesandAdapters”→“MemoryMapped”→“Avalon-MMTristateBridge”,添加Avalon三態(tài)橋,并在提示對(duì)話框中選中“Regis-tered”完成設(shè)置,如圖10-18所示。圖10-18添加Avalon三態(tài)橋(5)Cfi-Flash。選擇SOPCBuilder開(kāi)發(fā)環(huán)境左側(cè)的“MemoriesandMemoryControl”→“Flash”→“FlashMemoryInterface(CFI)”,添加Flash模塊,其他選項(xiàng)視用戶具體需求設(shè)置,如圖10-19所示。圖10-19添加FLASH控制器模塊(6)LED-PIO。SOPCBuilder提供的PIO控制器主要用于完成NiosII處理器并行輸入輸出信號(hào)的傳輸。選擇左側(cè)的“Peripherals”→“MicrocontrollerPeripherals”→“PIO(ParallelI/O)”,添加PIO控制器模塊,單擊“Finish”完成設(shè)置并重命名為“l(fā)ed_red”,如圖10-20所示。圖10-20添加LED-PIO輸出端口(7)SD_DAT-PIO。SOPCBuilder提供的PIO控制器主要用于完成NiosII處理器并行輸入輸出信號(hào)的傳輸。選擇左側(cè)的“Peripherals”→“MicrocontrollerPeripherals”→“PIO(ParallelI/O)”,添加PIO控制器模塊,單擊“Finish”完成設(shè)置并重命名為“SD_DAT”,如圖10-21所示。圖10-21添加SD_DAT-PIO雙向數(shù)據(jù)端口(8)SD_CMD-PIO。SOPCBuilder提供的PIO控制器主要用于完成NiosII處理器并行輸入輸出信號(hào)的傳輸。選擇左側(cè)的“Peripherals”→“MicrocontrollerPeripherals”→“PIO(ParallelI/O)”,添加PIO控制器模塊,單擊“Finish”完成設(shè)置并重命名為“SD_CMD”,如圖10-22所示。圖10-22添加SD_CMD-PIO雙向端口(9)SD_CLK-PIO。SOPCBuilder提供的PIO控制器主要用于完成NiosII處理器并行輸入輸出信號(hào)的傳輸。選擇左側(cè)的“Peripherals”→“MicrocontrollerPeripherals”→“PIO(ParallelI/O)”,添加PIO控制器模塊,單擊“Finish”完成設(shè)置并重命名為“SD_CLK”,如圖10-23所示。圖10-23添加SD_CLK-PIO輸出端口(10)SWITCH-PIO。SOPCBuilder提供的PIO控制器主要用于完成NiosII處理器并行輸入輸出信號(hào)的傳輸。選擇左側(cè)的“Peripherals”→“MicrocontrollerPeripherals”→“PIO(ParallelI/O)”,添加PIO控制器模塊,單擊“Finish”完成設(shè)置并重命名為“SWITCH_PIO”,如圖10-24所示。圖10-24添加SWITCH-PIO輸入端口(11)字符型LCD。選擇SOPCBuilder開(kāi)發(fā)環(huán)境左側(cè)的“Peripherals”→“Display”→“CharacterLCD”,添加LCD控制器模塊,完成設(shè)置,如圖10-25所示。圖10-25添加字符型LCD控制器(12)IntervalTimer。SOPCBuilder提供的IntervalTimer控制器主要用于完成NiosII處理器的定時(shí)中斷控制。選擇左側(cè)的“Peripherals”→“MicrocontrollerPeripherals”→“IntervalTimer”,添加IntervalTimer定時(shí)器模塊,相關(guān)參數(shù)根據(jù)使用要求設(shè)置,如圖10-26所示。圖10-26添加IntervalTimer模塊(13)EPCSSerialFlashController。選擇SOPCBuilder開(kāi)發(fā)環(huán)境左側(cè)的“MemoriesandMemoryControl”→“Flash”→“EPCSSerialFlashController”,添加EPCSSerialFlashController模塊,其他選項(xiàng)按默認(rèn)設(shè)置,如圖10-27所示。圖10-27添加EPCS控制器模塊將所有添加的模塊添加完畢,并將CFI_FLASH與Avalon-MM三態(tài)橋建立連接。至此,本實(shí)例中所需要的CPU及IP模塊構(gòu)件均添加完畢,如圖10-28所示。圖10-28構(gòu)建完成的SOPC系統(tǒng)10.3.3生成NiosII系統(tǒng)在SOPCBuilder開(kāi)發(fā)環(huán)境中,分別選擇菜單欄的“System”→“Auto-AssignBaseAddress”和“System”→“Auto-AssignIRQs”,分別進(jìn)行自動(dòng)分配各組件模塊的基地址和中斷標(biāo)志位操作。雙擊“NiosIIProcessor”后在“ParameterSettings”菜單下配置“ResetVector”為“cfi_flash0”;設(shè)置“ExceptionVector”為“sdram0”,完成設(shè)置,如圖10-29所示。圖10-29NiosIICPU設(shè)置配置完成后,選擇“SystemGeneration”選項(xiàng)卡,單擊下方的“Generate”,啟動(dòng)系統(tǒng)生成。10.3.4創(chuàng)建工程頂層文件與子模塊文件打開(kāi)QuartusII開(kāi)發(fā)環(huán)境,選擇主菜單“File”→“New”命令,創(chuàng)建一個(gè)名稱為“SD_Audio_TOP”的“VerilogHDLFile”文件作為頂層文件,并保存。工程頂層文件的程序代碼文件如下。

moduleSD_Audio_TOP

/*時(shí)鐘輸入*/

CLOCK_50_audio,//電路板上27MHz

CLOCK_50,//電路板上50MHz

EXT_CLOCK,//外接時(shí)鐘

KEY,//功能按鍵

led_out,

LEDR,//LED指示燈

DRAM_DQ,//SDRAM數(shù)據(jù)總線16位

DRAM_ADDR,//SDRAM地址總線12位

DRAM_LDQM,//SDRAM低字節(jié)數(shù)據(jù)屏蔽

DRAM_UDQM,//SDRAM高字節(jié)數(shù)據(jù)屏蔽

DRAM_WE_N,//SDRAM寫(xiě)使能

DRAM_CAS_N,//SDRAM列地址

DRAM_RAS_N,//SDRAM行地址

DRAM_CS_N,//SDRAM片選

DRAM_BA_0,//SDRAMBank地址0

DRAM_BA_1,//SDRAMBank地址1

DRAM_CLK,//SDRAM時(shí)鐘

DRAM_CKE,//SDRAM時(shí)鐘使能

/*16x2字符型液晶顯示屏*/

LCD_ON,//LCD上電開(kāi)關(guān)

LCD_BLON,//LCD背光開(kāi)關(guān)

LCD_RW,//LCD讀/寫(xiě)選擇,0=寫(xiě),1=讀

LCD_EN,//LCD使能

LCD_RS,//LCD命令/數(shù)據(jù)選擇,0=命令,1=數(shù)據(jù)

LCD_DATA,//LCDDatabus8bits

/*SD存儲(chǔ)器接口*/

SD_DAT,//SPI接口數(shù)據(jù)輸出信號(hào)(SD卡槽引腳7)

SD_DAT3,//片選信號(hào)(SD卡槽引腳1)

SD_CMD,//SPI接口數(shù)據(jù)輸入信號(hào)(SD卡槽引腳2)

SD_CLK,//SPI接口時(shí)鐘輸入信號(hào)(SD卡槽引腳5)

/*TLV320AIC23B音頻編解碼器接口*/

AUD_ADCLRCK,//TLV320AIC23B音頻編解碼器ADCLRCK

AUD_ADCDAT,//TLV320AIC23B音頻編解碼器ADCDATA

AUD_DACLRCK,//TLV320AIC23B音頻編解碼器DACLRCK

AUD_DACDAT,//TLV320AIC23B音頻編解碼器DACDATA

AUD_BCLK,//TLV320AIC23B音頻編解碼器比特流時(shí)鐘BCLK

ACS,//TLV320AIC23B音頻編解碼器片選

AMODE,//TLV320AIC23B音頻編解碼器工作模式

A_SCLK,//SCLK

A_SDIN,//SDIN

/*CFI_FLASH存儲(chǔ)器接口*/

FLASH_RW,

FLASH_OE,

FLASH_CE,

FLASH_DA,

FLASH_ADD,

FLASH_RST,

SW0,

SW1

);

/*時(shí)鐘輸入*/

inputCLOCK_50_audio;//電路板上27MHz

inputCLOCK_50;//電路板上50MHz

inputEXT_CLOCK;//外部時(shí)鐘

input[3:0]KEY;//功能按鍵

/*CFI_FLASH存儲(chǔ)器接口*/

outputFLASH_RW;

outputFLASH_OE;

outputFLASH_CE;

outputFLASH_RST;

inout[7:0]FLASH_DA;

output[22:0]FLASH_ADD;

inputSW0;

inputSW1;

/*LED驅(qū)動(dòng)*/

output[23:0]led_out;

output[7:0]LEDR;

/*SDRAM存儲(chǔ)器接口*/

inout[15:0]DRAM_DQ;

output[11:0]DRAM_ADDR;

outputDRAM_LDQM;

outputDRAM_UDQM;

outputDRAM_WE_N;

outputDRAM_CAS_N;

outputDRAM_RAS_N;

outputDRAM_CS_N;

outputDRAM_BA_0;

outputDRAM_BA_1;

outputDRAM_CLK;

outputDRAM_CKE;

/*16×2字符型液晶顯示屏*/

inout[7:0]LCD_DATA;

outputLCD_ON;

outputLCD_BLON;

outputLCD_RW;

outputLCD_EN;

outputLCD_RS;

/*SD存儲(chǔ)器接口*/

inoutSD_DAT;

inoutSD_DAT3;

inoutSD_CMD;

outputSD_CLK;

/*TLV320AIC23B音頻編解碼器接口*/

inoutAUD_ADCLRCK;

inputAUD_ADCDAT;

inoutAUD_DACLRCK;

outputAUD_DACDAT;

inoutAUD_BCLK;

outputACS,AMODE;

inoutA_SCLK,A_SDIN;

wireCPU_CLK;

wireCPU_RESET;

wireCLK_18_4;

wireseg_seven;

//FlashReset信號(hào)賦值

assignFL_RST_N=1'b1;

//16×2字符型LCD信號(hào)賦值

assignLCD_ON=1'b1;//LCD開(kāi)

assignLCD_BLON=1'b1;//LCD背光開(kāi)

//雙向端口置三態(tài)

assignSD_DAT=1'bz;

assignAUD_ADCLRCK=AUD_DACLRCK;

//SD存儲(chǔ)卡片選信號(hào)置1

assignSD_DAT3=1'b1;

Reset_Delaydelay1(.iRST(KEY[0]),.iCLK(CLOCK_50),.oRESET(CPU_RESET));

SDRAM_PLLPLL1

(.inclk0(CLOCK_50),.c0(DRAM_CLK),.c1(CPU_CLK),.c2(CLK_18_4));

/*音頻時(shí)鐘配置*/

reg[2:0]i;

always@(posedgeCLOCK_50)

begin

i<=i+1'b1;

end

wireCLK_16_66=i[0];

/*TLV320AIC23B音頻編解碼芯片配置*/

Aic23_topbao_y(

.SYSCLK(CLOCK_50),//50MHz時(shí)鐘

.RST(KEY[0]),

.BCLK(),//BCLK

.DOUT(),//DACDAT

.LRCIN(),/ADCLRCK

.LRCOUT(),//DACLRCK

.DIN(),//ADCDAT

.ACS(ACS),

.AMODE(AMODE),

.A_SCLK(A_SCLK),

.A_SDIN(A_SDIN),

.clk_3(CLK_16_66)

);

/*計(jì)數(shù)器*/

countercounter(

.clk(CLOCK_50),

.rst_n(SW0),

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論