NiosII系統(tǒng)的外圍設(shè)備課件_第1頁
NiosII系統(tǒng)的外圍設(shè)備課件_第2頁
NiosII系統(tǒng)的外圍設(shè)備課件_第3頁
NiosII系統(tǒng)的外圍設(shè)備課件_第4頁
NiosII系統(tǒng)的外圍設(shè)備課件_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

SOPC技術(shù)第5章

NiosII系統(tǒng)的外圍設(shè)備NO.3.11謝謝觀賞2019-8-26SOPC技術(shù)第5章NiosII系統(tǒng)的外圍設(shè)備NO.34.使用IDEFlashProgrammer編程完成所有的軟/硬件開發(fā)工作后,可以使用NiosⅡ?IDE提供的FlashProgrammer工具將程序下載到FPGA平臺上的FLASH存儲器中。FlashProgrammer是NiosⅡIDE6.0提供的新工具,它可以將配置數(shù)據(jù)、NiosⅡ程序及其他數(shù)據(jù)文件下載到目標板上的FLASH存儲器中,這里所說的FLASH存儲器包括業(yè)界標準的CFI或CFI兼容的FLASH存儲器,以及Altera公司的EPCS系列串行配置器件。2謝謝觀賞2019-8-264.使用IDEFlashProgrammer編程完IDEFlashProgrammer通過2個過程將數(shù)據(jù)寫入flash:(1)用Altera提供的“Flash編程設(shè)計”對FPGA進行配置;(2)IDEFlashProgrammer將文件內(nèi)容→“Flash編程設(shè)計”→FlashFlash編程設(shè)計3謝謝觀賞2019-8-26IDEFlashProgrammer通過2個過程將數(shù)據(jù)每個Flash編程設(shè)計應(yīng)包含的元件:4謝謝觀賞2019-8-26每個Flash編程設(shè)計應(yīng)包含的元件:4謝謝觀賞2019-8-使用IDEFlashProgrammer編程,首先要保證在SOPCBuilder中,在Target選項區(qū)中的Board的下拉列表框中選擇用戶當前使用的目標板Flash編程設(shè)計。SmartSOPC_Board_1C6是現(xiàn)用核心板提供的目標板Flash編程設(shè)計,可以對核心板上的NORFlash(元件標號U7)和EPCS(元件標號U10)進行編程。5謝謝觀賞2019-8-26使用IDEFlashProgrammer編使用NiosⅡIDE對FLASH存儲器編程的步驟:

啟動NiosIIIDE。建立軟件工程,然后編譯連接(BuildProject)選中要進行編程的工程,然后選Tools>FlashProgrammer菜單啟動FlashProgrammer對話框,如圖5.5.2。單擊FlashProgrammer對話框左下角的New命令按鈕,建立一個新編程任務(wù),可以修改這個新任務(wù)的名稱。

6謝謝觀賞2019-8-26使用NiosⅡIDE對FLASH存儲器編程的步驟:6謝謝若選中programsoftwareprojectintoflashmemoryproject,可將工程的.elf文件寫入Flash(EPCS)。若選中programFPGAconfigurationdataintohardware-imageregionofflashmemory,可將FPGA的配置文件寫入Flash(EPCS)。若選中Programfileintoaflashmemory選項,可將二進制文件寫入Flash。需要選擇要編程的二進制文件及要編程的存儲器(U7為Flash,U10為EPCS)。

(5)在Main頁面中可以選擇所要編程的內(nèi)容,包括工程名稱、FPGA配置文件的名稱以及目標存儲器。

7謝謝觀賞2019-8-26若選中programsoftwareprojectin圖5.5.2FlashProgrammer對話框8謝謝觀賞2019-8-26圖5.5.2FlashProgrammer對話框8謝

(4)在TargetConnection頁面中選擇與目標板相連的下載電纜,如圖5.5.3。(5)設(shè)置好這些內(nèi)容之后,單擊Apply按鈕,然后單擊ProgramFlash按鈕,NiosⅡ?IDE重新編譯工程并對FLASH存儲器進行編程。(若在SOPCBuilder中沒有指定目標板,則ProgramFlash按鈕將是灰色不能使用。)從IDE的Console窗口可以看見編程過程。(見圖5.5.4)完成Flash編程后,需讓系統(tǒng)重新上電,使FPGA使用EPCS中配置數(shù)據(jù)重新配置FPGA,程序才能正常運行。9謝謝觀賞2019-8-26(4)在TargetConnection頁面中選擇與圖5.5.3FlashProgrammer中目標連接設(shè)置10謝謝觀賞2019-8-26圖5.5.3FlashProgrammer中目標連接設(shè)在console窗口顯示編程過程及編程結(jié)束標志圖5.5.411謝謝觀賞2019-8-26在console窗口顯示編程過程及編程結(jié)束標志圖5.5.41通信接口目前存在的所有計算機通信接口在嵌入式領(lǐng)域中都有其廣泛的應(yīng)用,應(yīng)用最為廣泛的接口設(shè)備包括

RS-232接口(串口UART)

USB接口(通用串行總線接口)

IrDA(InfraRedDataAssociation-紅外線接口)

SPI(串行外圍設(shè)備接口)、

I2C、CAN總線接口、藍牙接口(Bluetooth)

Ethernet(以太網(wǎng)接口)、

IEEE1394接口和通用可編程接口GPIO。12謝謝觀賞2019-8-26通信接口目前存在的所有計算機通信接口在5.5UART內(nèi)核UART(UniversalAsynchronousReceiver/Transmitter通用異步接收器/發(fā)生器)內(nèi)核帶有Avalon接口,為嵌入式系統(tǒng)和外部設(shè)備提供了串行字符流動通信方式,其數(shù)據(jù)以RS-232協(xié)議的形式與外界進行交互。提供可調(diào)整的波特率;可配置奇偶校驗位、停止位和數(shù)據(jù)位等。13謝謝觀賞2019-8-265.5UART內(nèi)核UART(UniversalAsyncUART內(nèi)核的結(jié)構(gòu)框圖14謝謝觀賞2019-8-26UART內(nèi)核的結(jié)構(gòu)框圖14謝謝觀賞2019-8-26UART內(nèi)核寄存器映射15謝謝觀賞2019-8-26UART內(nèi)核寄存器映射15謝謝觀賞2019-8-26UART內(nèi)核配置選項1、波特率設(shè)置2、數(shù)據(jù)位、停止位、奇偶校驗位3、流控制4、Avalon流控制傳輸16謝謝觀賞2019-8-26UART內(nèi)核配置選項1、波特率設(shè)置16謝謝觀賞2019-8-軟件編程Altera提供的驅(qū)動程序執(zhí)行HAL字符模式設(shè)備驅(qū)動程序。HAL用戶應(yīng)通過熟悉的HALAPI函數(shù)和ANSIC標準庫函數(shù)訪問UART,而不是訪問UART寄存器。altera_avalon_uart_regs.h寄存器級訪問頭文件altera_avalon_uart.h,altera_avalon_uart.cHAL系統(tǒng)庫的UART內(nèi)核設(shè)備驅(qū)動程序17謝謝觀賞2019-8-26軟件編程Altera提供的驅(qū)動程序執(zhí)行HAL字符模式設(shè)備驅(qū)動實驗4.10:ANSIC標準庫來訪問UART;如果檢測到字符’t’,則報告檢測到字符’t’;如果檢測到字符’v’,則退出程序。#include<stdio.h>#include<string.h>#include"system.h"intmain(){char*msg="Detectedthecharacter't'.\n";FILE*fp;charprompt=0;

printf("PleaseEntersomecharacters:\n");fp=fopen(UART_NAME,"r+");//打開文件進行讀和寫18謝謝觀賞2019-8-26實驗4.10:ANSIC標準庫來訪問UART;如果檢測到字

if(fp){while(prompt!='v')//循環(huán)直至接收到'v'

{

prompt=getc(fp);//從UART中獲取字符

if(prompt=='t'){//如果字符為't'打印信息

fwrite(msg,strlen(msg),1,fp);}if(ferror(fp))//檢查錯誤是否在UART連接上出現(xiàn)

clearerr(fp);//如果是,清除它

}

fprintf(fp,"ClosingtheUARTfilehandle.\n");fclose(fp);}else{printf("Failtoopenfile...\n");}return0;}19謝謝觀賞2019-8-26if(fp)19謝謝觀賞2019-8-26System.h描述的UART設(shè)備#defineUART_NAME"/dev/uart"#defineUART_TYPE"altera_avalon_uart"#defineUART_BASE0x00B00840#defineUART_IRQ1#defineUART_BAUD115200#defineUART_DATA_BITS8#defineUART_FIXED_BAUD0#defineUART_PARITY'N'#defineUART_STOP_BITS1#defineUART_USE_CTS_RTS0#defineUART_USE_EOP_REGISTER0#defineUART_SIM_TRUE_BAUD0#defineUART_SIM_CHAR_STREAM""#defineUART_FREQ4800000020謝謝觀賞2019-8-26System.h描述的UART設(shè)備#defineUART21謝謝觀賞2019-8-2621謝謝觀賞2019-8-26具有Avalon接口的JTAGUART核是實現(xiàn)在PC機和FPGA上的SOPCBuilder系統(tǒng)間進行串行通信的一種實現(xiàn)方式JTAGUART用來替代RS-232完成與PC主機的字符輸入/輸出,NiosII處理器通過讀/寫控制和數(shù)據(jù)寄存器與JTAGUART核通信5.6JTAG-UART內(nèi)核22謝謝觀賞2019-8-26具有Avalon接口的JTAGUART核是實現(xiàn)在PC機和F對于NiosII處理器,HAL系統(tǒng)庫中包含該設(shè)備的驅(qū)動程序,允許使用ANSIC標準庫stdio.h訪問JTAGUART核對PC機,Altera提供JTAG終端軟件來管理PC機與目標系統(tǒng)的連接,對JTAG數(shù)據(jù)流解碼和在屏幕上顯示字符5.7JTAG-UART內(nèi)核23謝謝觀賞2019-8-26對于NiosII處理器,HAL系統(tǒng)庫中包含該設(shè)備的驅(qū)動程JTAGUART核方框圖24謝謝觀賞2019-8-26JTAGUART核方框圖24謝謝觀賞2019-8-26缺省的深度值(64)IRQ門限值(8)是最優(yōu)的,不用改變JTAGUART核配置25謝謝觀賞2019-8-26缺省的深度值(64)IRQ門限值(8)是最優(yōu)的,不用改變JT軟件編程HAL用戶應(yīng)通過HALAPI

和ANSIC標準庫訪問JTAG-UART,而不是訪問JTAG-UART寄存器。對JTAGUART核的操作與下列文件有關(guān)。

altera_avalon_jtag_uart_regs.haltera_avalon_jtag_uart.haltera_avalon_jtag_uart.c26謝謝觀賞2019-8-26軟件編程HAL用戶應(yīng)通過HALAPI和ANSIC標準#include<stdio.h>#include<string.h>#include"system.h"intmain(){char*msg=“Detectedthecharacter’t’.\n”;FILE*fp;charprompt=0;printf("PleaseEntersomecharacters:\n");fp=fopen(“/dev/jtag_uart”,”r+”);//為讀寫操作打開文件If(fp){while(prompt!=‘v’)//循環(huán)直到接收一個”v”

{prompt=getc(fp);//從JTAGUART中讀取一個字符if(prompt==‘t’)//若字符是“t”,則輸出信息{fwrite(msg,strlen(msg),1,fp);}例:使用標準庫通過JTAGUART核讀和發(fā)送一個消息27謝謝觀賞2019-8-26#include<stdio.h>例:使用標準庫通過JTAif(ferror(fp))//檢查是否有錯誤產(chǎn)生clearerr(fp);}//若有則清除fprintf(fp,”ClosingtheJTAGUARTfilehandle.\n”);fclose(fp);}else{printf("Failtoopenfile...\n");}return0;}28謝謝觀賞2019-8-26if(ferror(fp))//檢查是否有錯誤產(chǎn)生25.7定時器內(nèi)核定時器可作為系統(tǒng)的周期性時鐘源(Tick);可以作為計數(shù)器測定事件發(fā)生的時間;作“看門狗”(Watchdog)。定時器內(nèi)核特性:可控制定時器的啟動、停止或復(fù)位兩種計數(shù)模式:單次減一和連續(xù)減一計數(shù)模式計數(shù)器達到0時產(chǎn)生中斷請求(IRQ)可作為看門狗定時器可選擇輸出周期性脈沖可由軟件使能或屏蔽定時器中斷29謝謝觀賞2019-8-265.7定時器內(nèi)核定時器可作為系統(tǒng)的周期性時鐘源(Tick)定時器內(nèi)核結(jié)構(gòu)框圖30謝謝觀賞2019-8-26定時器內(nèi)核結(jié)構(gòu)框圖30謝謝觀賞2019-8-26定時器寄存器31謝謝觀賞2019-8-26定時器寄存器31謝謝觀賞2019-8-261.狀態(tài)寄存器(status)32謝謝觀賞2019-8-261.狀態(tài)寄存器(status)32謝謝觀賞2019-8-22.控制寄存器(control)33謝謝觀賞2019-8-262.控制寄存器(control)33謝謝觀賞2019-8-3.periodl&periodh寄存器periodl和periodh寄存器一起存儲超時周期的計數(shù)值。當對此寄存器進行寫操作或內(nèi)部計數(shù)器減到0時,保存在periodl&和periodh中的值會裝載到內(nèi)部計數(shù)器中。34謝謝觀賞2019-8-263.periodl&periodh寄存器4.snapl&snaph寄存器可通過對snapl&snaph寄存器的寫操作來獲取32位內(nèi)部計數(shù)器的當前值。5.中斷操作只要內(nèi)部計數(shù)器減到0且控制寄存器的ITO位設(shè)為1,定時器內(nèi)核就會產(chǎn)生IRQ.用戶可用以下任一方式應(yīng)答IRQ:

清除狀態(tài)寄存器的TO位,等待下一個超時事件的發(fā)生;通過將控制寄存器的ITO位清零來禁止中斷。35謝謝觀賞2019-8-264.snapl&snaph寄存器可通過對定時器內(nèi)核(intervaltimer)配置選項TimeoutPeriod:

設(shè)置periodl和periodh寄存器的初始值,此值可根據(jù)系統(tǒng)輸入時鐘頻率和initialperiod中的設(shè)置計算獲得。36謝謝觀賞2019-8-26定時器內(nèi)核(intervaltimer)配置選項Timeo定時器內(nèi)核配置選項PresetConfigurations:

提供的預(yù)定義硬件配置:Simpleperiodicinterrupt

Full-featured

Watchdog37謝謝觀賞2019-8-26定時器內(nèi)核配置選項PresetConfigurationsWriteableperiod:主控制器可通過寫periodl和periodh改變向下計數(shù)周期Readablesnapshot:主控制器可讀當前向下計數(shù)的值Start/stopcontrolbits:主控制器可通過寫控制寄存器的START和STOP位來啟動后停止定時器。Timeoutpulse:當定時器計數(shù)到0時將輸出持續(xù)一個周期的高電平。Systemresetontimeout:配置定時器用于看門狗。當使能以下各項時:38謝謝觀賞2019-8-26Writeableperiod:主控制器可通過寫perio定時器提供了硬件的寄存器級訪問和HAL層的API函數(shù):altera_avalon_time_regs.h:定義內(nèi)核的寄存器映射并提供硬件設(shè)備訪問宏定義;

altera_avalon_timer.h、altera_avalon_timer_sc.c、altera_avalon_timer_ts.c、altera_avalon_timer_vars.c實現(xiàn)了HAL系統(tǒng)庫的定時器設(shè)備驅(qū)動程序(在components/altera_avalon_timer中)軟件設(shè)計39謝謝觀賞2019-8-26定時器提供了硬件的寄存器級訪問和HAL層的API函數(shù):軟件設(shè)計HALAPI提供如下兩種定時器設(shè)備的驅(qū)動程序:系統(tǒng)時鐘定時器---該驅(qū)動程序支持報警(alarms)。時間戳定時器-----該驅(qū)動程序支持高精度的時間測量。HAL特定的訪問定時器設(shè)備的API函數(shù)在components/altera_hal/HAL/inc/sys/alt_alarm.h和sys/alt_timestamp.h中定義。40謝謝觀賞2019-8-26軟件設(shè)計HALAPI提供如下兩種定時器設(shè)備的驅(qū)動程序:40【實驗4.5】利用系統(tǒng)時鐘服務(wù)產(chǎn)生1s的周期性事件,并借此控制LED閃爍#include<stdio.h>#include"system.h"http://包含基本的硬件描述信息#include"altera_avalon_pio_regs.h"http://包含基本的IO寄存器信息#include"alt_types.h"http://Altera定義的數(shù)據(jù)類型#include"sys/alt_alarm.h"

//系統(tǒng)時鐘服務(wù)頭文件41謝謝觀賞2019-8-26【實驗4.5】利用系統(tǒng)時鐘服務(wù)產(chǎn)生1s的周期性事件,并借此控#ifndefLED_PIO_BASE//這是LED_PIO核的基地址#defineLED_PIO_BASE0xffffffff//user'sdefinitionhere#endif#ifLED_PIO_BASE==0xffffffff#error"NodefinitionofLED_PIOcore...\n"#endif#defineLEDCON0xffstaticalt_alarmalarm;//按調(diào)用API函數(shù)規(guī)定定義的變量staticunsignedcharled=0xff;42謝謝觀賞2019-8-26#ifndefLED_PIO_BASE

功能:按調(diào)用規(guī)定系統(tǒng)時鐘回調(diào)函數(shù),在該函數(shù)中實現(xiàn)用戶功能入口參數(shù):context,系統(tǒng)傳給回調(diào)函數(shù)的參數(shù)出口參數(shù):返回下一次的系統(tǒng)時鐘服務(wù)的周期值alt_u32my_alarm_callback(void*context){if(led==0xff){led=0x00;}else{led=0xff;}IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,led);//操作IO口

returnalt_ticks_per_second();}43謝謝觀賞2019-8-26功能:按調(diào)用規(guī)定系統(tǒng)時鐘回調(diào)函數(shù),在該函數(shù)中實現(xiàn)用戶功能入功能:初始化LED_PIO為輸出,其余輸入,屏蔽中斷,清邊沿捕獲寄存器voidInitPIO(void){/*LED_PIO為輸出,其余輸入*/IOWR_ALTERA_AVALON_PIO_DIRECTION(LED_PIO_BASE,LEDCON);/*禁止所有PIO中斷*/IOWR_ALTERA_AVALO

溫馨提示

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

評論

0/150

提交評論