【文章內(nèi)容簡介】
合成HDL在同一文件里被執(zhí)行。仿真的特點是采用了翻譯開啟和翻譯關閉合成指令來執(zhí)行,使某些路段的HDL代碼對綜合工具來說可見。如果你是用Altera的推薦仿真程序,那么不編輯仿真指令。如果你為自己定制的仿真流程改變了仿真指示,那么請注意SOPC Builder在系統(tǒng)生成期間會改寫現(xiàn)有文件。采取防范措施確保你的修改不被覆蓋。關于NiosII處理器系統(tǒng)模擬UART的核的細節(jié)請看AN351:模擬NiosII處理器的設計。為詳細了解在Nios的嵌入式處理器系統(tǒng)模擬UART的核AN189:模擬Nios的嵌入式處理器的設計。5. 軟件編程模型以下章節(jié)描述UART的核的軟件編程模型的建立,包括寄存器映射和軟件聲明來訪問硬件。對NiosII處理器的用戶,Altera提供了硬件抽象層(HAL)系統(tǒng)庫驅(qū)動器,它使你用ANSIC的標準庫函數(shù)訪問UART,如printf( )和getchar( )。 HAL系統(tǒng)庫支持該Altera公司提供的驅(qū)動程序所執(zhí)行的HAL字符模式的裝置驅(qū)動器對NiosII系統(tǒng)來說,可以整合到HAL系統(tǒng)庫。HAL用戶應通過熟悉的HAL的API和ANSIC的標準庫來訪問UART,而不是訪問UART寄存器。ioctl( )的要求是指允許HAL用戶控制硬件依賴性方面的UART。注意:如果你的程序使用HAL設備驅(qū)動器來訪問UART硬件,對設備寄存器的直接訪問將干擾驅(qū)動器的正確行為。對NiosII處理器的用戶來說,HAL系統(tǒng)庫API提供了完全的UART核的功能。NiosII程序把UART的核看作是一個字符模式裝置,并通過使用ANSIC的標準庫函數(shù)同時發(fā)送和接收數(shù)據(jù)。該驅(qū)動支持在SOPC Builder中有效的CTS/RTS控制信號,見811頁“驅(qū)動器的選擇:快與小的執(zhí)行”。下面的代碼顯示了最簡單可行的使用,印刷信息標準輸出使用printf( )。在這個例子中,SOPC Builder系統(tǒng)包含一個UART的核,并且HAL系統(tǒng)庫已配置好,以使用這個裝置來標準輸出。例如:印刷字符到一個UART的核,作為標準輸出includeint main(){printf(Hello world.\n)。return 0。}下面的代碼顯示了使用的標準庫從UART裝置讀字符和向UART裝置發(fā)送信息的過程。在這個例子中,SOPC Builder系統(tǒng)中包含一個SOPC Builder的系統(tǒng)包含一個UART的核命名為uart1,它不一定作為標準輸出設備被配置。在這種情況下,程序?qū)ρb置就像任何其他節(jié)點中的HAL文件系統(tǒng)一樣。例如:發(fā)送和接收字符。/* A simple program that recognizes the characters 39。t39。 and 39。v39。 */include include int main (){char* msg = Detected the character 39。t39。.\n。FILE* fp。char prompt = 0。fp = fopen (/dev/uart1, r+)。 //Open file for reading and writingif (fp){while (prompt != 39。v39。){ // Loop until we receive a 39。v39。.prompt = getc(fp)。 // Get a character from the UART.if (prompt == 39。t39。){ // Print a message if character is 39。t39。.fwrite (msg, strlen (msg), 1, fp)。}}fprintf(fp, Closing the UART file.\n)。fclose (fp)。}return0。}該NiosII軟件開發(fā)者的手冊提供了完整的HAL系統(tǒng)庫的詳細情況。 驅(qū)動器的選擇:快與小的執(zhí)行為容納所需的不同類型的系統(tǒng),UART的驅(qū)動提供了兩種變體:一種快速的版本和一個小型版本??焖傩袨槎紝⒈荒J使用。無論是快速和小型驅(qū)動器完全支持C標準庫函數(shù)和HAL的API??焖衮?qū)動器是一個中斷驅(qū)動的執(zhí)行,當設備尚未準備好發(fā)送或接收時,它允許處理器執(zhí)行其它任務。因為UART的數(shù)據(jù)傳輸速率與處理器相比緩慢,快速的驅(qū)動器能給系統(tǒng)提供一個較大的執(zhí)行優(yōu)點,使系統(tǒng)在過渡期間可以執(zhí)行其它任務。小型驅(qū)動器是詢問執(zhí)行的,它在發(fā)送和接收每個字符之前要等待UART硬件。有兩種啟動小軌跡的驅(qū)動器?!鰹镠AL系統(tǒng)庫工程進行小軌跡設置。這個選擇也會影響系統(tǒng)中所有設備的設備驅(qū)動器?!鲎⒚黝A處理選項DALTERA_AVALON_UART_SMALL。如果你要用小型、詢問執(zhí)行的UART驅(qū)動器,你可用這一選項,但你不能影響其它設備的驅(qū)動器。見NiosII IDE的幫助系統(tǒng)詳細了解如何設置性能及預選項。如果CTS/RTS流量控制信號在硬件中被允許,那么快速驅(qū)動器可以自動使用它們,小型驅(qū)動器總是忽略它們。 ioctl( )運行該UART的驅(qū)動支持ioctl( )函數(shù)讓基于HAL的程序要求裝置的具體運行。表2界定了UART驅(qū)動支持的操作要求。表2 UART ioctl( )操作請求含義TIOCEXCL鎖定設備以免額外的訪問。很難進一步的用open()訪問設備直到這個文件描述器關閉或使用TIOCNXCL ioctl請求來解除鎖定。為了讓請求得以實現(xiàn),這個設備沒有其他存在的文件描述器。ioctl“arg”參數(shù)將被忽略。TIOCNXCL解除對之前的額外訪問的鎖定。詳見上文內(nèi)容。ioctl“arg”參數(shù)將被忽略。額外的操作要求也只供快速驅(qū)動選擇,如表3為使這些操作在你的程序中運行,你必須設置預選項。DALTERA_AVALON_UART_USE_IOCTL。表3 僅對快速驅(qū)動的可選UART ioctl()操作請求含義TIOCMGET通過填寫輸入termios(1)結(jié)構(gòu)的內(nèi)容來返回設備的當前設置。這個結(jié)構(gòu)的指針作為ioctl“opt”參數(shù)的值。TIOCMESET根據(jù)輸入termios結(jié)構(gòu)(1)里的值來設置設備的配置。這個結(jié)構(gòu)的指針作為ioctl“arg”參數(shù)的值。注:(1)termios結(jié)構(gòu)是指newlibC標準庫。您可以在文件NiosII EDS install path/ponents/ altera_hal/HAL/inc/sys/。參考NiosII軟件開發(fā)手冊詳細了解ioctl( )函數(shù)。 局限性該HAL驅(qū)動程序用于UART的核