




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
SOPC技術(shù)第5章
NiosII系統(tǒng)的外圍設(shè)備NO.3.1SOPC技術(shù)第5章NiosII系統(tǒng)的外圍設(shè)備NO.34.使用IDEFlashProgrammer編程完成所有的軟/硬件開(kāi)發(fā)工作后,可以使用NiosⅡ?IDE提供的FlashProgrammer工具將程序下載到FPGA平臺(tái)上的FLASH存儲(chǔ)器中。FlashProgrammer是NiosⅡIDE6.0提供的新工具,它可以將配置數(shù)據(jù)、NiosⅡ程序及其他數(shù)據(jù)文件下載到目標(biāo)板上的FLASH存儲(chǔ)器中,這里所說(shuō)的FLASH存儲(chǔ)器包括業(yè)界標(biāo)準(zhǔn)的CFI或CFI兼容的FLASH存儲(chǔ)器,以及Altera公司的EPCS系列串行配置器件。4.使用IDEFlashProgrammer編程完2IDEFlashProgrammer通過(guò)2個(gè)過(guò)程將數(shù)據(jù)寫(xiě)入flash:(1)用Altera提供的“Flash編程設(shè)計(jì)”對(duì)FPGA進(jìn)行配置;(2)IDEFlashProgrammer將文件內(nèi)容→“Flash編程設(shè)計(jì)”→FlashFlash編程設(shè)計(jì)IDEFlashProgrammer通過(guò)2個(gè)過(guò)程將數(shù)據(jù)每個(gè)Flash編程設(shè)計(jì)應(yīng)包含的元件:每個(gè)Flash編程設(shè)計(jì)應(yīng)包含的元件:使用IDEFlashProgrammer編程,首先要保證在SOPCBuilder中,在Target選項(xiàng)區(qū)中的Board的下拉列表框中選擇用戶當(dāng)前使用的目標(biāo)板Flash編程設(shè)計(jì)。SmartSOPC_Board_1C6是現(xiàn)用核心板提供的目標(biāo)板Flash編程設(shè)計(jì),可以對(duì)核心板上的NORFlash(元件標(biāo)號(hào)U7)和EPCS(元件標(biāo)號(hào)U10)進(jìn)行編程。使用IDEFlashProgrammer編使用NiosⅡIDE對(duì)FLASH存儲(chǔ)器編程的步驟:
啟動(dòng)NiosIIIDE。建立軟件工程,然后編譯連接(BuildProject)選中要進(jìn)行編程的工程,然后選Tools>FlashProgrammer菜單啟動(dòng)FlashProgrammer對(duì)話框,如圖5.5.2。單擊FlashProgrammer對(duì)話框左下角的New命令按鈕,建立一個(gè)新編程任務(wù),可以修改這個(gè)新任務(wù)的名稱。
使用NiosⅡIDE對(duì)FLASH存儲(chǔ)器編程的步驟:若選中programsoftwareprojectintoflashmemoryproject,可將工程的.elf文件寫(xiě)入Flash(EPCS)。若選中programFPGAconfigurationdataintohardware-imageregionofflashmemory,可將FPGA的配置文件寫(xiě)入Flash(EPCS)。若選中Programfileintoaflashmemory選項(xiàng),可將二進(jìn)制文件寫(xiě)入Flash。需要選擇要編程的二進(jìn)制文件及要編程的存儲(chǔ)器(U7為Flash,U10為EPCS)。
(5)在Main頁(yè)面中可以選擇所要編程的內(nèi)容,包括工程名稱、FPGA配置文件的名稱以及目標(biāo)存儲(chǔ)器。
若選中programsoftwareprojectin7圖5.5.2FlashProgrammer對(duì)話框圖5.5.2FlashProgrammer對(duì)話框
(4)在TargetConnection頁(yè)面中選擇與目標(biāo)板相連的下載電纜,如圖5.5.3。(5)設(shè)置好這些內(nèi)容之后,單擊Apply按鈕,然后單擊ProgramFlash按鈕,NiosⅡ?IDE重新編譯工程并對(duì)FLASH存儲(chǔ)器進(jìn)行編程。(若在SOPCBuilder中沒(méi)有指定目標(biāo)板,則ProgramFlash按鈕將是灰色不能使用。)從IDE的Console窗口可以看見(jiàn)編程過(guò)程。(見(jiàn)圖5.5.4)完成Flash編程后,需讓系統(tǒng)重新上電,使FPGA使用EPCS中配置數(shù)據(jù)重新配置FPGA,程序才能正常運(yùn)行。(4)在TargetConnection頁(yè)面中選擇與9圖5.5.3FlashProgrammer中目標(biāo)連接設(shè)置圖5.5.3FlashProgrammer中目標(biāo)連接設(shè)10在console窗口顯示編程過(guò)程及編程結(jié)束標(biāo)志圖5.5.4在console窗口顯示編程過(guò)程及編程結(jié)束標(biāo)志圖5.5.411通信接口目前存在的所有計(jì)算機(jī)通信接口在嵌入式領(lǐng)域中都有其廣泛的應(yīng)用,應(yīng)用最為廣泛的接口設(shè)備包括
RS-232接口(串口UART)
USB接口(通用串行總線接口)
IrDA(InfraRedDataAssociation-紅外線接口)
SPI(串行外圍設(shè)備接口)、
I2C、CAN總線接口、藍(lán)牙接口(Bluetooth)
Ethernet(以太網(wǎng)接口)、
IEEE1394接口和通用可編程接口GPIO。通信接口目前存在的所有計(jì)算機(jī)通信接口在125.5UART內(nèi)核UART(UniversalAsynchronousReceiver/Transmitter通用異步接收器/發(fā)生器)內(nèi)核帶有Avalon接口,為嵌入式系統(tǒng)和外部設(shè)備提供了串行字符流動(dòng)通信方式,其數(shù)據(jù)以RS-232協(xié)議的形式與外界進(jìn)行交互。提供可調(diào)整的波特率;可配置奇偶校驗(yàn)位、停止位和數(shù)據(jù)位等。5.5UART內(nèi)核UART(UniversalAsync13UART內(nèi)核的結(jié)構(gòu)框圖UART內(nèi)核的結(jié)構(gòu)框圖14UART內(nèi)核寄存器映射UART內(nèi)核寄存器映射15UART內(nèi)核配置選項(xiàng)1、波特率設(shè)置2、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位3、流控制4、Avalon流控制傳輸U(kuò)ART內(nèi)核配置選項(xiàng)1、波特率設(shè)置16軟件編程Altera提供的驅(qū)動(dòng)程序執(zhí)行HAL字符模式設(shè)備驅(qū)動(dòng)程序。HAL用戶應(yīng)通過(guò)熟悉的HALAPI函數(shù)和ANSIC標(biāo)準(zhǔn)庫(kù)函數(shù)訪問(wèn)UART,而不是訪問(wèn)UART寄存器。altera_avalon_uart_regs.h寄存器級(jí)訪問(wèn)頭文件altera_avalon_uart.h,altera_avalon_uart.cHAL系統(tǒng)庫(kù)的UART內(nèi)核設(shè)備驅(qū)動(dòng)程序軟件編程Altera提供的驅(qū)動(dòng)程序執(zhí)行HAL字符模式設(shè)備驅(qū)動(dòng)17實(shí)驗(yàn)4.10:ANSIC標(biāo)準(zhǔn)庫(kù)來(lái)訪問(wèn)UART;如果檢測(cè)到字符’t’,則報(bào)告檢測(cè)到字符’t’;如果檢測(cè)到字符’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+");//打開(kāi)文件進(jìn)行讀和寫(xiě)實(shí)驗(yàn)4.10:ANSIC標(biāo)準(zhǔn)庫(kù)來(lái)訪問(wèn)UART;如果檢測(cè)到字18
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))//檢查錯(cuò)誤是否在UART連接上出現(xiàn)
clearerr(fp);//如果是,清除它
}
fprintf(fp,"ClosingtheUARTfilehandle.\n");fclose(fp);}else{printf("Failtoopenfile...\n");}return0;}if(fp)19System.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_FREQ48000000System.h描述的UART設(shè)備#defineUART20使用NiosⅡIDE對(duì)FLASH存儲(chǔ)器編程的步驟啟動(dòng)NiosIIIDE課件21具有Avalon接口的JTAGUART核是實(shí)現(xiàn)在PC機(jī)和FPGA上的SOPCBuilder系統(tǒng)間進(jìn)行串行通信的一種實(shí)現(xiàn)方式JTAGUART用來(lái)替代RS-232完成與PC主機(jī)的字符輸入/輸出,NiosII處理器通過(guò)讀/寫(xiě)控制和數(shù)據(jù)寄存器與JTAGUART核通信5.6JTAG-UART內(nèi)核具有Avalon接口的JTAGUART核是實(shí)現(xiàn)在PC機(jī)和F22對(duì)于NiosII處理器,HAL系統(tǒng)庫(kù)中包含該設(shè)備的驅(qū)動(dòng)程序,允許使用ANSIC標(biāo)準(zhǔn)庫(kù)stdio.h訪問(wèn)JTAGUART核對(duì)PC機(jī),Altera提供JTAG終端軟件來(lái)管理PC機(jī)與目標(biāo)系統(tǒng)的連接,對(duì)JTAG數(shù)據(jù)流解碼和在屏幕上顯示字符5.7JTAG-UART內(nèi)核對(duì)于NiosII處理器,HAL系統(tǒng)庫(kù)中包含該設(shè)備的驅(qū)動(dòng)程23JTAGUART核方框圖JTAGUART核方框圖24缺省的深度值(64)IRQ門(mén)限值(8)是最優(yōu)的,不用改變JTAGUART核配置缺省的深度值(64)IRQ門(mén)限值(8)是最優(yōu)的,不用改變JT25軟件編程HAL用戶應(yīng)通過(guò)HALAPI
和ANSIC標(biāo)準(zhǔn)庫(kù)訪問(wèn)JTAG-UART,而不是訪問(wèn)JTAG-UART寄存器。對(duì)JTAGUART核的操作與下列文件有關(guān)。
altera_avalon_jtag_uart_regs.haltera_avalon_jtag_uart.haltera_avalon_jtag_uart.c軟件編程HAL用戶應(yīng)通過(guò)HALAPI和ANSIC標(biāo)準(zhǔn)26#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+”);//為讀寫(xiě)操作打開(kāi)文件If(fp){while(prompt!=‘v’)//循環(huán)直到接收一個(gè)”v”
{prompt=getc(fp);//從JTAGUART中讀取一個(gè)字符if(prompt==‘t’)//若字符是“t”,則輸出信息{fwrite(msg,strlen(msg),1,fp);}例:使用標(biāo)準(zhǔn)庫(kù)通過(guò)JTAGUART核讀和發(fā)送一個(gè)消息#include<stdio.h>例:使用標(biāo)準(zhǔn)庫(kù)通過(guò)JTA27if(ferror(fp))//檢查是否有錯(cuò)誤產(chǎn)生clearerr(fp);}//若有則清除fprintf(fp,”ClosingtheJTAGUARTfilehandle.\n”);fclose(fp);}else{printf("Failtoopenfile...\n");}return0;}if(ferror(fp))//檢查是否有錯(cuò)誤產(chǎn)生285.7定時(shí)器內(nèi)核定時(shí)器可作為系統(tǒng)的周期性時(shí)鐘源(Tick);可以作為計(jì)數(shù)器測(cè)定事件發(fā)生的時(shí)間;作“看門(mén)狗”(Watchdog)。定時(shí)器內(nèi)核特性:可控制定時(shí)器的啟動(dòng)、停止或復(fù)位兩種計(jì)數(shù)模式:?jiǎn)未螠p一和連續(xù)減一計(jì)數(shù)模式計(jì)數(shù)器達(dá)到0時(shí)產(chǎn)生中斷請(qǐng)求(IRQ)可作為看門(mén)狗定時(shí)器可選擇輸出周期性脈沖可由軟件使能或屏蔽定時(shí)器中斷5.7定時(shí)器內(nèi)核定時(shí)器可作為系統(tǒng)的周期性時(shí)鐘源(Tick)29定時(shí)器內(nèi)核結(jié)構(gòu)框圖定時(shí)器內(nèi)核結(jié)構(gòu)框圖30定時(shí)器寄存器定時(shí)器寄存器311.狀態(tài)寄存器(status)1.狀態(tài)寄存器(status)322.控制寄存器(control)2.控制寄存器(control)333.periodl&periodh寄存器periodl和periodh寄存器一起存儲(chǔ)超時(shí)周期的計(jì)數(shù)值。當(dāng)對(duì)此寄存器進(jìn)行寫(xiě)操作或內(nèi)部計(jì)數(shù)器減到0時(shí),保存在periodl&和periodh中的值會(huì)裝載到內(nèi)部計(jì)數(shù)器中。3.periodl&periodh寄存器344.snapl&snaph寄存器可通過(guò)對(duì)snapl&snaph寄存器的寫(xiě)操作來(lái)獲取32位內(nèi)部計(jì)數(shù)器的當(dāng)前值。5.中斷操作只要內(nèi)部計(jì)數(shù)器減到0且控制寄存器的ITO位設(shè)為1,定時(shí)器內(nèi)核就會(huì)產(chǎn)生IRQ.用戶可用以下任一方式應(yīng)答IRQ:
清除狀態(tài)寄存器的TO位,等待下一個(gè)超時(shí)事件的發(fā)生;通過(guò)將控制寄存器的ITO位清零來(lái)禁止中斷。4.snapl&snaph寄存器可通過(guò)對(duì)35定時(shí)器內(nèi)核(intervaltimer)配置選項(xiàng)TimeoutPeriod:
設(shè)置periodl和periodh寄存器的初始值,此值可根據(jù)系統(tǒng)輸入時(shí)鐘頻率和initialperiod中的設(shè)置計(jì)算獲得。定時(shí)器內(nèi)核(intervaltimer)配置選項(xiàng)Timeo36定時(shí)器內(nèi)核配置選項(xiàng)PresetConfigurations:
提供的預(yù)定義硬件配置:Simpleperiodicinterrupt
Full-featured
Watchdog定時(shí)器內(nèi)核配置選項(xiàng)PresetConfigurations37Writeableperiod:主控制器可通過(guò)寫(xiě)periodl和periodh改變向下計(jì)數(shù)周期Readablesnapshot:主控制器可讀當(dāng)前向下計(jì)數(shù)的值Start/stopcontrolbits:主控制器可通過(guò)寫(xiě)控制寄存器的START和STOP位來(lái)啟動(dòng)后停止定時(shí)器。Timeoutpulse:當(dāng)定時(shí)器計(jì)數(shù)到0時(shí)將輸出持續(xù)一個(gè)周期的高電平。Systemresetontimeout:配置定時(shí)器用于看門(mén)狗。當(dāng)使能以下各項(xiàng)時(shí):Writeableperiod:主控制器可通過(guò)寫(xiě)perio38定時(shí)器提供了硬件的寄存器級(jí)訪問(wèn)和HAL層的API函數(shù):altera_avalon_time_regs.h:定義內(nèi)核的寄存器映射并提供硬件設(shè)備訪問(wèn)宏定義;
altera_avalon_timer.h、altera_avalon_timer_sc.c、altera_avalon_timer_ts.c、altera_avalon_timer_vars.c實(shí)現(xiàn)了HAL系統(tǒng)庫(kù)的定時(shí)器設(shè)備驅(qū)動(dòng)程序(在components/altera_avalon_timer中)軟件設(shè)計(jì)定時(shí)器提供了硬件的寄存器級(jí)訪問(wèn)和HAL層的API函數(shù):39軟件設(shè)計(jì)HALAPI提供如下兩種定時(shí)器設(shè)備的驅(qū)動(dòng)程序:系統(tǒng)時(shí)鐘定時(shí)器---該驅(qū)動(dòng)程序支持報(bào)警(alarms)。時(shí)間戳定時(shí)器-----該驅(qū)動(dòng)程序支持高精度的時(shí)間測(cè)量。HAL特定的訪問(wèn)定時(shí)器設(shè)備的API函數(shù)在components/altera_hal/HAL/inc/sys/alt_alarm.h和sys/alt_timestamp.h中定義。軟件設(shè)計(jì)HALAPI提供如下兩種定時(shí)器設(shè)備的驅(qū)動(dòng)程序:40【實(shí)驗(yàn)4.5】利用系統(tǒng)時(shí)鐘服務(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)時(shí)鐘服務(wù)頭文件【實(shí)驗(yàn)4.5】利用系統(tǒng)時(shí)鐘服務(wù)產(chǎn)生1s的周期性事件,并借此控41#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;#ifndefLED_PIO_BASE42
功能:按調(diào)用規(guī)定系統(tǒng)時(shí)鐘回調(diào)函數(shù),在該函數(shù)中實(shí)現(xiàn)用戶功能入口參數(shù):context,系統(tǒng)傳給回調(diào)函數(shù)的參數(shù)出口參數(shù):返回下一次的系統(tǒng)時(shí)鐘服務(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();}功能:按調(diào)用規(guī)定系統(tǒng)時(shí)鐘回調(diào)函數(shù),在該函數(shù)中實(shí)現(xiàn)用戶功能入43功能:初始化LED_PIO為輸出,其余輸入,屏蔽中斷,清邊沿捕獲寄存器voidInitPIO(void){/*LED_PIO為輸出,其余輸入*/IOWR_ALTERA_AVALON_PIO_DIRECTION(LED_PIO_BASE,LEDCON);/*禁止所有PIO中斷*/IOWR_ALTERA_AVALON_PIO_IRQ_MASK(LED_PIO_BASE,0x00);/*清清邊沿捕獲寄存器*/IOWR_ALTERA_AVALON_PIO_EDGE_CAP(LED_PIO_BASE,0x00);}功能:初始化LED_PIO為輸出,其余輸入,屏蔽中斷,清邊沿44
intmain(){InitPIO();IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0xff);//滅LED
printf("testalarm...\n");//打印提示信息
printf("alt_ticks_per_second()is%ld",alt_ticks_per_second());if(alt_alarm_start(&alarm,alt_ticks_per_second()//啟動(dòng)系統(tǒng)時(shí)鐘
,my_alarm_callback,NULL)<0){printf("Nosystemclockavailable\n");}while(1);//等待時(shí)鐘事件發(fā)生
return0;}intmain()455.8SystemID內(nèi)核SOPCBuilder生成NiosII系統(tǒng)時(shí),將為每個(gè)NiosII系統(tǒng)生成一個(gè)標(biāo)識(shí)符,供編譯器和用戶辨別所運(yùn)行的程序是否與目標(biāo)系統(tǒng)匹配。當(dāng)程序運(yùn)行在與之不匹配的系統(tǒng)上時(shí)會(huì)產(chǎn)生不可預(yù)測(cè)的結(jié)果。系統(tǒng)ID內(nèi)核寄存器包括ID寄存器(SOPCBuilder系統(tǒng)ID)和timestamp寄存器(SOPCBuilder生成時(shí)間)在下載程序運(yùn)行或調(diào)試之前,NiosIIIDE會(huì)檢查硬件中的系統(tǒng)ID內(nèi)核是否匹配所期望的軟件系統(tǒng)ID,如不匹配,則終止下載。5.8SystemID內(nèi)核SOPCBuilder46SOPC技術(shù)第5章
NiosII系統(tǒng)的外圍設(shè)備NO.3.1SOPC技術(shù)第5章NiosII系統(tǒng)的外圍設(shè)備NO.34.使用IDEFlashProgrammer編程完成所有的軟/硬件開(kāi)發(fā)工作后,可以使用NiosⅡ?IDE提供的FlashProgrammer工具將程序下載到FPGA平臺(tái)上的FLASH存儲(chǔ)器中。FlashProgrammer是NiosⅡIDE6.0提供的新工具,它可以將配置數(shù)據(jù)、NiosⅡ程序及其他數(shù)據(jù)文件下載到目標(biāo)板上的FLASH存儲(chǔ)器中,這里所說(shuō)的FLASH存儲(chǔ)器包括業(yè)界標(biāo)準(zhǔn)的CFI或CFI兼容的FLASH存儲(chǔ)器,以及Altera公司的EPCS系列串行配置器件。4.使用IDEFlashProgrammer編程完48IDEFlashProgrammer通過(guò)2個(gè)過(guò)程將數(shù)據(jù)寫(xiě)入flash:(1)用Altera提供的“Flash編程設(shè)計(jì)”對(duì)FPGA進(jìn)行配置;(2)IDEFlashProgrammer將文件內(nèi)容→“Flash編程設(shè)計(jì)”→FlashFlash編程設(shè)計(jì)IDEFlashProgrammer通過(guò)2個(gè)過(guò)程將數(shù)據(jù)每個(gè)Flash編程設(shè)計(jì)應(yīng)包含的元件:每個(gè)Flash編程設(shè)計(jì)應(yīng)包含的元件:使用IDEFlashProgrammer編程,首先要保證在SOPCBuilder中,在Target選項(xiàng)區(qū)中的Board的下拉列表框中選擇用戶當(dāng)前使用的目標(biāo)板Flash編程設(shè)計(jì)。SmartSOPC_Board_1C6是現(xiàn)用核心板提供的目標(biāo)板Flash編程設(shè)計(jì),可以對(duì)核心板上的NORFlash(元件標(biāo)號(hào)U7)和EPCS(元件標(biāo)號(hào)U10)進(jìn)行編程。使用IDEFlashProgrammer編使用NiosⅡIDE對(duì)FLASH存儲(chǔ)器編程的步驟:
啟動(dòng)NiosIIIDE。建立軟件工程,然后編譯連接(BuildProject)選中要進(jìn)行編程的工程,然后選Tools>FlashProgrammer菜單啟動(dòng)FlashProgrammer對(duì)話框,如圖5.5.2。單擊FlashProgrammer對(duì)話框左下角的New命令按鈕,建立一個(gè)新編程任務(wù),可以修改這個(gè)新任務(wù)的名稱。
使用NiosⅡIDE對(duì)FLASH存儲(chǔ)器編程的步驟:若選中programsoftwareprojectintoflashmemoryproject,可將工程的.elf文件寫(xiě)入Flash(EPCS)。若選中programFPGAconfigurationdataintohardware-imageregionofflashmemory,可將FPGA的配置文件寫(xiě)入Flash(EPCS)。若選中Programfileintoaflashmemory選項(xiàng),可將二進(jìn)制文件寫(xiě)入Flash。需要選擇要編程的二進(jìn)制文件及要編程的存儲(chǔ)器(U7為Flash,U10為EPCS)。
(5)在Main頁(yè)面中可以選擇所要編程的內(nèi)容,包括工程名稱、FPGA配置文件的名稱以及目標(biāo)存儲(chǔ)器。
若選中programsoftwareprojectin53圖5.5.2FlashProgrammer對(duì)話框圖5.5.2FlashProgrammer對(duì)話框
(4)在TargetConnection頁(yè)面中選擇與目標(biāo)板相連的下載電纜,如圖5.5.3。(5)設(shè)置好這些內(nèi)容之后,單擊Apply按鈕,然后單擊ProgramFlash按鈕,NiosⅡ?IDE重新編譯工程并對(duì)FLASH存儲(chǔ)器進(jìn)行編程。(若在SOPCBuilder中沒(méi)有指定目標(biāo)板,則ProgramFlash按鈕將是灰色不能使用。)從IDE的Console窗口可以看見(jiàn)編程過(guò)程。(見(jiàn)圖5.5.4)完成Flash編程后,需讓系統(tǒng)重新上電,使FPGA使用EPCS中配置數(shù)據(jù)重新配置FPGA,程序才能正常運(yùn)行。(4)在TargetConnection頁(yè)面中選擇與55圖5.5.3FlashProgrammer中目標(biāo)連接設(shè)置圖5.5.3FlashProgrammer中目標(biāo)連接設(shè)56在console窗口顯示編程過(guò)程及編程結(jié)束標(biāo)志圖5.5.4在console窗口顯示編程過(guò)程及編程結(jié)束標(biāo)志圖5.5.457通信接口目前存在的所有計(jì)算機(jī)通信接口在嵌入式領(lǐng)域中都有其廣泛的應(yīng)用,應(yīng)用最為廣泛的接口設(shè)備包括
RS-232接口(串口UART)
USB接口(通用串行總線接口)
IrDA(InfraRedDataAssociation-紅外線接口)
SPI(串行外圍設(shè)備接口)、
I2C、CAN總線接口、藍(lán)牙接口(Bluetooth)
Ethernet(以太網(wǎng)接口)、
IEEE1394接口和通用可編程接口GPIO。通信接口目前存在的所有計(jì)算機(jī)通信接口在585.5UART內(nèi)核UART(UniversalAsynchronousReceiver/Transmitter通用異步接收器/發(fā)生器)內(nèi)核帶有Avalon接口,為嵌入式系統(tǒng)和外部設(shè)備提供了串行字符流動(dòng)通信方式,其數(shù)據(jù)以RS-232協(xié)議的形式與外界進(jìn)行交互。提供可調(diào)整的波特率;可配置奇偶校驗(yàn)位、停止位和數(shù)據(jù)位等。5.5UART內(nèi)核UART(UniversalAsync59UART內(nèi)核的結(jié)構(gòu)框圖UART內(nèi)核的結(jié)構(gòu)框圖60UART內(nèi)核寄存器映射UART內(nèi)核寄存器映射61UART內(nèi)核配置選項(xiàng)1、波特率設(shè)置2、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位3、流控制4、Avalon流控制傳輸U(kuò)ART內(nèi)核配置選項(xiàng)1、波特率設(shè)置62軟件編程Altera提供的驅(qū)動(dòng)程序執(zhí)行HAL字符模式設(shè)備驅(qū)動(dòng)程序。HAL用戶應(yīng)通過(guò)熟悉的HALAPI函數(shù)和ANSIC標(biāo)準(zhǔn)庫(kù)函數(shù)訪問(wèn)UART,而不是訪問(wèn)UART寄存器。altera_avalon_uart_regs.h寄存器級(jí)訪問(wèn)頭文件altera_avalon_uart.h,altera_avalon_uart.cHAL系統(tǒng)庫(kù)的UART內(nèi)核設(shè)備驅(qū)動(dòng)程序軟件編程Altera提供的驅(qū)動(dòng)程序執(zhí)行HAL字符模式設(shè)備驅(qū)動(dòng)63實(shí)驗(yàn)4.10:ANSIC標(biāo)準(zhǔn)庫(kù)來(lái)訪問(wèn)UART;如果檢測(cè)到字符’t’,則報(bào)告檢測(cè)到字符’t’;如果檢測(cè)到字符’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+");//打開(kāi)文件進(jìn)行讀和寫(xiě)實(shí)驗(yàn)4.10:ANSIC標(biāo)準(zhǔn)庫(kù)來(lái)訪問(wèn)UART;如果檢測(cè)到字64
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))//檢查錯(cuò)誤是否在UART連接上出現(xiàn)
clearerr(fp);//如果是,清除它
}
fprintf(fp,"ClosingtheUARTfilehandle.\n");fclose(fp);}else{printf("Failtoopenfile...\n");}return0;}if(fp)65System.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_FREQ48000000System.h描述的UART設(shè)備#defineUART66使用NiosⅡIDE對(duì)FLASH存儲(chǔ)器編程的步驟啟動(dòng)NiosIIIDE課件67具有Avalon接口的JTAGUART核是實(shí)現(xiàn)在PC機(jī)和FPGA上的SOPCBuilder系統(tǒng)間進(jìn)行串行通信的一種實(shí)現(xiàn)方式JTAGUART用來(lái)替代RS-232完成與PC主機(jī)的字符輸入/輸出,NiosII處理器通過(guò)讀/寫(xiě)控制和數(shù)據(jù)寄存器與JTAGUART核通信5.6JTAG-UART內(nèi)核具有Avalon接口的JTAGUART核是實(shí)現(xiàn)在PC機(jī)和F68對(duì)于NiosII處理器,HAL系統(tǒng)庫(kù)中包含該設(shè)備的驅(qū)動(dòng)程序,允許使用ANSIC標(biāo)準(zhǔn)庫(kù)stdio.h訪問(wèn)JTAGUART核對(duì)PC機(jī),Altera提供JTAG終端軟件來(lái)管理PC機(jī)與目標(biāo)系統(tǒng)的連接,對(duì)JTAG數(shù)據(jù)流解碼和在屏幕上顯示字符5.7JTAG-UART內(nèi)核對(duì)于NiosII處理器,HAL系統(tǒng)庫(kù)中包含該設(shè)備的驅(qū)動(dòng)程69JTAGUART核方框圖JTAGUART核方框圖70缺省的深度值(64)IRQ門(mén)限值(8)是最優(yōu)的,不用改變JTAGUART核配置缺省的深度值(64)IRQ門(mén)限值(8)是最優(yōu)的,不用改變JT71軟件編程HAL用戶應(yīng)通過(guò)HALAPI
和ANSIC標(biāo)準(zhǔn)庫(kù)訪問(wèn)JTAG-UART,而不是訪問(wèn)JTAG-UART寄存器。對(duì)JTAGUART核的操作與下列文件有關(guān)。
altera_avalon_jtag_uart_regs.haltera_avalon_jtag_uart.haltera_avalon_jtag_uart.c軟件編程HAL用戶應(yīng)通過(guò)HALAPI和ANSIC標(biāo)準(zhǔn)72#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+”);//為讀寫(xiě)操作打開(kāi)文件If(fp){while(prompt!=‘v’)//循環(huán)直到接收一個(gè)”v”
{prompt=getc(fp);//從JTAGUART中讀取一個(gè)字符if(prompt==‘t’)//若字符是“t”,則輸出信息{fwrite(msg,strlen(msg),1,fp);}例:使用標(biāo)準(zhǔn)庫(kù)通過(guò)JTAGUART核讀和發(fā)送一個(gè)消息#include<stdio.h>例:使用標(biāo)準(zhǔn)庫(kù)通過(guò)JTA73if(ferror(fp))//檢查是否有錯(cuò)誤產(chǎn)生clearerr(fp);}//若有則清除fprintf(fp,”ClosingtheJTAGUARTfilehandle.\n”);fclose(fp);}else{printf("Failtoopenfile...\n");}return0;}if(ferror(fp))//檢查是否有錯(cuò)誤產(chǎn)生745.7定時(shí)器內(nèi)核定時(shí)器可作為系統(tǒng)的周期性時(shí)鐘源(Tick);可以作為計(jì)數(shù)器測(cè)定事件發(fā)生的時(shí)間;作“看門(mén)狗”(Watchdog)。定時(shí)器內(nèi)核特性:可控制定時(shí)器的啟動(dòng)、停止或復(fù)位兩種計(jì)數(shù)模式:?jiǎn)未螠p一和連續(xù)減一計(jì)數(shù)模式計(jì)數(shù)器達(dá)到0時(shí)產(chǎn)生中斷請(qǐng)求(IRQ)可作為看門(mén)狗定時(shí)器可選擇輸出周期性脈沖可由軟件使能或屏蔽定時(shí)器中斷5.7定時(shí)器內(nèi)核定時(shí)器可作為系統(tǒng)的周期性時(shí)鐘源(Tick)75定時(shí)器內(nèi)核結(jié)構(gòu)框圖定時(shí)器內(nèi)核結(jié)構(gòu)框圖76定時(shí)器寄存器定時(shí)器寄存器771.狀態(tài)寄存器(status)1.狀態(tài)寄存器(status)782.控制寄存器(control)2.控制寄存器(control)793.periodl&periodh寄存器periodl和periodh寄存器一起存儲(chǔ)超時(shí)周期的計(jì)數(shù)值。當(dāng)對(duì)此寄存器進(jìn)行寫(xiě)操作或內(nèi)部計(jì)數(shù)器減到0時(shí),保存在periodl&和periodh中的值會(huì)裝載到內(nèi)部計(jì)數(shù)器中。3.periodl&periodh寄存器804.snapl&snaph寄存器可通過(guò)對(duì)snapl&snaph寄存器的寫(xiě)操作來(lái)獲取32位內(nèi)部計(jì)數(shù)器的當(dāng)前值。5.中斷操作只要內(nèi)部計(jì)數(shù)器減到0且控制寄存器的ITO位設(shè)為1,定時(shí)器內(nèi)核就會(huì)產(chǎn)生IRQ.用戶可用以下任一方式應(yīng)答IRQ:
清除狀態(tài)寄存器的TO位,等待下一個(gè)超時(shí)事件的發(fā)生;通過(guò)將控制寄存器的ITO位清零來(lái)禁止中斷。4.snapl&snaph寄存器可通過(guò)對(duì)81定時(shí)器內(nèi)核(intervaltimer)配置選項(xiàng)TimeoutPeriod:
設(shè)置periodl和periodh寄存器的初始值,此值可根據(jù)系統(tǒng)輸入時(shí)鐘頻率和initialperiod中的設(shè)置計(jì)算獲得。定時(shí)器內(nèi)核(intervaltimer)配置選項(xiàng)Timeo82定時(shí)器內(nèi)核配置選項(xiàng)PresetConfigurations:
提供的預(yù)定義硬件配置:Simpleperiodicinterrupt
Full-featured
Watchdog定時(shí)器內(nèi)核配置選項(xiàng)PresetConfigurations83Writeableperiod:主控制器可通過(guò)寫(xiě)periodl和periodh改變向下計(jì)數(shù)周期Readablesnapshot:主控制器可讀當(dāng)前向下計(jì)數(shù)的值Start/stopcontrolbits:主控制器可通過(guò)寫(xiě)控制寄存器的START和STOP位來(lái)啟動(dòng)后停止定時(shí)器。Timeoutpulse:當(dāng)定時(shí)器計(jì)數(shù)到0時(shí)將輸出持續(xù)一個(gè)周期的高電平。Systemresetontimeout:配置定時(shí)器用于看門(mén)狗。當(dāng)使能以下各項(xiàng)時(shí):Writeableperiod:主控制器可通過(guò)寫(xiě)perio84定時(shí)器提供了硬件的寄存器級(jí)訪問(wèn)和HAL層的API函數(shù):altera_avalon_time_regs.h:定義內(nèi)核的寄存器映射并提供硬件設(shè)備訪問(wèn)宏定義;
altera_avalon_timer.h、altera_avalon_timer_sc.c、altera_avalon_timer_ts.c、altera_avalon_timer_vars.c實(shí)現(xiàn)了HAL系統(tǒng)庫(kù)的定時(shí)器設(shè)備驅(qū)動(dòng)程序(在components/altera_avalon_timer中)軟件設(shè)計(jì)定時(shí)器提供了硬件的寄存器級(jí)訪問(wèn)和HAL層的API函數(shù):85軟件設(shè)計(jì)HALAPI提供如下兩種定時(shí)器設(shè)備的驅(qū)動(dòng)程序:系統(tǒng)時(shí)鐘定時(shí)器---該驅(qū)動(dòng)程序支持報(bào)警(alarms)。時(shí)間戳定時(shí)器-----該驅(qū)動(dòng)程序支持高精度的時(shí)間測(cè)量。HAL特定的訪問(wèn)定時(shí)器設(shè)備的API函數(shù)在components/altera_hal/HAL/inc/sys/alt_alarm.h和sys/alt_timestamp.h中定義。軟件設(shè)計(jì)HALAPI提供如下兩種定時(shí)器設(shè)備的驅(qū)動(dòng)程序:86【實(shí)驗(yàn)4.5】利用系統(tǒng)時(shí)鐘服務(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
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新疆師范大學(xué)《實(shí)驗(yàn)室安全與法規(guī)》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶市主城區(qū)七校聯(lián)考2025年高三教學(xué)質(zhì)量檢測(cè)試題試卷(二)物理試題含解析
- 公共交通運(yùn)營(yíng)服務(wù)收費(fèi)標(biāo)準(zhǔn)制度
- 第18課 清朝的邊疆治理 教案2024-2025學(xué)年七年級(jí)歷史下冊(cè)新課標(biāo)
- 內(nèi)圓形吊頂施工方案
- 護(hù)坡植草施工方案
- 路基修復(fù)夜間施工方案
- 工程資料與施工方案
- 汽車(chē)隔音施工方案范本
- 2025年搞笑考試面試試題及答案
- 2025年合肥共達(dá)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案
- 2025美國(guó)急性冠脈綜合征(ACS)患者管理指南解讀課件
- 足球迷互動(dòng)活動(dòng)策劃與執(zhí)行策略
- 2025年寧夏工商職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)帶答案
- ESC+2024+心房顫動(dòng)(房顫)管理指南解讀
- 三級(jí)機(jī)動(dòng)車(chē)駕駛教練員職業(yè)資格理論題庫(kù)(匯總版)
- 南方醫(yī)科大學(xué)研究生培養(yǎng)點(diǎn)評(píng)價(jià)簡(jiǎn)況表
- 玉米雜交制種基地檔案豐墾種業(yè)(樣本)
- EXCEL函數(shù)公式培訓(xùn)PPT(共39張)
- A4標(biāo)簽打印模板
- 矛盾糾紛排查調(diào)處記錄表
評(píng)論
0/150
提交評(píng)論