




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1基于FPGA的SOPC設(shè)計信息學(xué)院李貞妮二一三年五月2第六章第六章 Nios II應(yīng)用程序及其外設(shè)應(yīng)用程序及其外設(shè)HAL驅(qū)驅(qū)動開發(fā)動開發(fā)3本章首先簡單介紹本章首先簡單介紹Nios II IDE開發(fā)環(huán)境的使用;然后重開發(fā)環(huán)境的使用;然后重點介紹了硬件抽象層點介紹了硬件抽象層(HAL)系統(tǒng)庫,包括系統(tǒng)庫,包括HAL下的應(yīng)用程序下的應(yīng)用程序開發(fā)以及開發(fā)開發(fā)以及開發(fā)HAL下的設(shè)備驅(qū)動兩部分內(nèi)容;最后講述了下的設(shè)備驅(qū)動兩部分內(nèi)容;最后講述了MicroC/OS-II實時操作系統(tǒng)及其應(yīng)用程序開發(fā)實例。本章還實時操作系統(tǒng)及其應(yīng)用程序開發(fā)實例。本章還簡單介紹了最新的簡單介紹了最新的Nios II C語言至硬件
2、加速編譯器。語言至硬件加速編譯器。n主要內(nèi)容4第6章 目錄 6.1 Nios II IDE簡介 6.2 設(shè)置工程系統(tǒng)庫屬性和編譯選項 6.3 調(diào)試/運(yùn)行程序 6.4 下載程序到Flash 6.5 硬件抽象層(HAL)系統(tǒng)庫 6.6 使用HAL開發(fā)應(yīng)用程序 6.7 設(shè)備驅(qū)動概述 6.8 開發(fā)HAL下的設(shè)備驅(qū)動 6.9 MicroC/OS-II 6.10 Nios II C語言至硬件加速編譯器(C2H)簡介5 6.1 Nios II IDE簡介 6.2 設(shè)置工程系統(tǒng)庫屬性和編譯選項 6.3 調(diào)試/運(yùn)行程序 6.4 下載程序到Flash 6.5 硬件抽象層(HAL)系統(tǒng)庫 6.6 使用HAL開發(fā)應(yīng)用
3、程序 6.7 設(shè)備驅(qū)動概述 6.8 開發(fā)HAL下的設(shè)備驅(qū)動 6.9 MicroC/OS-II 6.10 Nios II C語言至硬件加速編譯器(C2H)簡介第6章 目錄66.1 Nios II IDE簡介Nios II IDE為軟件開發(fā)提供4個主要功能:一、工程管理一、工程管理二、編輯器和編譯器二、編輯器和編譯器三、調(diào)試器三、調(diào)試器四、閃存編程器四、閃存編程器統(tǒng)一開發(fā)平臺,用于所有Nios II處理器系統(tǒng)。7n硬件抽象層系統(tǒng)庫(HAL)n輕量級IP TCP/IP庫nuC/OS-II實時操作系統(tǒng)(RTOS)nAltera壓縮文件系統(tǒng)一工程管理器1. 新工程向?qū)?. 軟件工程模板3. 軟件組件6.
4、1 Nios II IDE簡介PIO內(nèi)核結(jié)構(gòu)框圖(對話框位置:對話框位置:FileNewC/C+ Application )工程模板工程命名指定硬件系統(tǒng)模板功能介紹8二編輯器和編譯器1. 文本編輯器成熟的全功能源文件編輯器,包括:語法高亮顯示C/C+程序代碼、全面的搜索工具、文件管理、在線幫助和教程、快速定位及自動糾錯、內(nèi)置調(diào)試等功能。2. C/C+編譯器Nios II IDE使用GCC編譯器,并為其提供了一個圖形化用戶界面。圖形化用戶界面為GCC編譯器提供了一個易用的按鈕式流程,同時允許開發(fā)人員手工設(shè)置高級編譯選項,使得操作更簡單方便。6.1 Nios II IDE簡介9三調(diào)試器軟件調(diào)試器(
5、GDB):是強(qiáng)大的、在GNU調(diào)試器基礎(chǔ)之上的軟件調(diào)試器。該調(diào)試器提供許多基本調(diào)試功能以及一些在低成本處理器開發(fā)套件中不會經(jīng)常用到的高級調(diào)試功能?;菊{(diào)試功能包括:運(yùn)行控制、調(diào)用堆棧查看、軟件斷點、反匯編代碼查看、調(diào)試信息查看、指令集仿真器。高級調(diào)試功能包括:硬件斷點調(diào)試ROM或閃存中的代碼、數(shù)據(jù)觸發(fā)、指令跟蹤。6.1 Nios II IDE簡介10四閃存編程器多數(shù)使用Nios II處理器的設(shè)計都需要采用閃存(Flash)來存儲FPGA配置數(shù)據(jù)和/或應(yīng)用程序。Nios II IDE提供了一個方便的閃存編程方法。任何連接到FPGA的兼容通用閃存接口(CFI)的閃存器件以及主動串行配置器件EPCS都
6、可以通過Nios II IDE閃存編程器來燒寫。6.1 Nios II IDE簡介11 6.1 Nios II IDE簡介 6.2 設(shè)置工程系統(tǒng)庫屬性和編譯選項 6.3 調(diào)試/運(yùn)行程序 6.4 下載程序到Flash 6.5 硬件抽象層(HAL)系統(tǒng)庫 6.6 使用HAL開發(fā)應(yīng)用程序 6.7 設(shè)備驅(qū)動概述 6.8 開發(fā)HAL下的設(shè)備驅(qū)動 6.9 MicroC/OS-II 6.10 Nios II C語言至硬件加速編譯器(C2H)簡介第6章 目錄126.2 設(shè)置工程系統(tǒng)庫屬性和編譯選項(對話框位置:對話框位置:右擊右擊C/C+工程文件夾工程文件夾System Library Properties
7、)Debug:調(diào)試模式:調(diào)試模式Release:發(fā)布模式:發(fā)布模式C/C+ Build 設(shè)置136.2 設(shè)置工程系統(tǒng)庫屬性和編譯選項(對話框位置:對話框位置:右擊右擊C/C+工程文件夾工程文件夾System Library Properties )C/C+ Indexer 編制程序文件索引:幫助用戶方便地找到程序文件中的相關(guān)信息。問題報告的類型:幫助用戶方便地定位錯誤。C/C+ Indexer設(shè)置146.2 設(shè)置工程系統(tǒng)庫屬性和編譯選項( 對話框位置:對話框位置:右擊右擊C/C+工程文件夾工程文件夾System Library Properties )System Library 設(shè)置156.
8、2 設(shè)置工程系統(tǒng)庫屬性和編譯選項( 對話框位置:對話框位置:右擊右擊C/C+工程文件夾工程文件夾System Library Properties )System Library 設(shè)置RTOS:指定是否使用操作系統(tǒng)。RTOS Options:對RTOS進(jìn)行設(shè)置。Stdout、stderr、stdin:選擇Nios II 系統(tǒng)的C標(biāo)準(zhǔn)輸入/輸出設(shè)備。Null可節(jié)省程序空間。System clock timer:系統(tǒng)時鐘驅(qū)動所用的定時器。Timestamp timer:時 間 標(biāo) 記 驅(qū) 動 所 用 的 定 時 器 。 與system clock timer不能使用同一個定時器Max file d
9、escriptors:能夠被字符型設(shè)備和文件子系統(tǒng)打開訪問的最大文件個數(shù)。166.2 設(shè)置工程系統(tǒng)庫屬性和編譯選項( 對話框位置:對話框位置:右擊右擊C/C+工程文件夾工程文件夾System Library Properties )System Library 設(shè)置用戶自己創(chuàng)建和管理連接,建議采用自動連接。Nios II IDE自動創(chuàng)建和管理連接,使用前必須指定下面選項。n可執(zhí)行代碼駐留的物理存儲器。n只讀數(shù)據(jù)駐留的物理存儲器。n可讀/寫數(shù)據(jù)駐留的物理存儲器。nHeap(堆)駐留的物理存儲器。nStack(棧)駐留的物理存儲器。選擇后,異常堆棧將駐留在單獨(dú)的物理存儲器中。n指定異常堆棧駐留的物
10、理存儲器。n指定異常堆棧的最大空間。17 6.1 Nios II IDE簡介 6.2 設(shè)置工程系統(tǒng)庫屬性和編譯選項 6.3 調(diào)試/運(yùn)行程序 6.4 下載程序到Flash 6.5 硬件抽象層(HAL)系統(tǒng)庫 6.6 使用HAL開發(fā)應(yīng)用程序 6.7 設(shè)備驅(qū)動概述 6.8 開發(fā)HAL下的設(shè)備驅(qū)動 6.9 MicroC/OS-II 6.10 Nios II C語言至硬件加速編譯器(C2H)簡介第6章 目錄186.3 調(diào)試/運(yùn)行程序(對話框位置:對話框位置:RUNDebug /Debug As)選擇Debug的目標(biāo)器件:1.Nios II硬件硬件2.Nios II指令仿真器指令仿真器3.Nios II多
11、處理器集多處理器集19調(diào)試器目標(biāo)連接設(shè)置-(Target Connection)6.3 調(diào)試/運(yùn)行程序(對話框位置:對話框位置:RUNDebug Nios II Hardware Target Connection)n進(jìn)行JTAG下載電纜的選擇。n進(jìn)行連接在JTAG下載電纜上帶JTAG接口器件的選擇。n進(jìn)行Nios II系統(tǒng)中斷通信工具選擇。20調(diào)試器設(shè)置-(Debugger)6.3 調(diào)試/運(yùn)行程序(對話框位置:對話框位置:RUNDebug Nios II Hardware Debugger)點擊點擊debug,NIOSII IDE會先編譯連接整個工程(如果已經(jīng)編譯連接就會跳過),然后生成下會
12、先編譯連接整個工程(如果已經(jīng)編譯連接就會跳過),然后生成下載文件并下載到硬件中去,接著程序執(zhí)行到用戶預(yù)設(shè)的第一個斷點處停下載文件并下載到硬件中去,接著程序執(zhí)行到用戶預(yù)設(shè)的第一個斷點處停下21調(diào)試器設(shè)置-(Debugger 視窗模式)6.3 調(diào)試/運(yùn)行程序(Nios II IDE 切換到切換到Debug視窗模式視窗模式)NIOSII 的的Debug與通常的與通常的debug工作無異,如單步,斷點,觀察變量工作無異,如單步,斷點,觀察變量/寄存器寄存器/存儲單元的值等。存儲單元的值等。使用使用byteblaster II下載電纜時,會出現(xiàn)如上提示,但并不影響下載電纜時,會出現(xiàn)如上提示,但并不影響B(tài)
13、yteblasterII下載電纜的使用,下載電纜的使用,可正常調(diào)試和運(yùn)行程序。可正常調(diào)試和運(yùn)行程序。22運(yùn)行程序-(Debugger 視窗模式)6.3 調(diào)試/運(yùn)行程序(對話框位置:對話框位置:RUNRUN /RUN As)RUN對話框設(shè)置和對話框設(shè)置和Debug對話框設(shè)置完全相同,設(shè)置的選項和方法也相同。對話框設(shè)置完全相同,設(shè)置的選項和方法也相同。23 6.1 Nios II IDE簡介 6.2 設(shè)置工程系統(tǒng)庫屬性和編譯選項 6.3 調(diào)試/運(yùn)行程序 6.4 下載程序到Flash 6.5 硬件抽象層(HAL)系統(tǒng)庫 6.6 使用HAL開發(fā)應(yīng)用程序 6.7 設(shè)備驅(qū)動概述 6.8 開發(fā)HAL下的設(shè)備
14、驅(qū)動 6.9 MicroC/OS-II 6.10 Nios II C語言至硬件加速編譯器(C2H)簡介第6章 目錄246.4 下載程序到Flash當(dāng)調(diào)試工作完成并確保程序無錯后,就可以把程序下載到Flash中了。25 6.1 Nios II IDE簡介 6.2 設(shè)置工程系統(tǒng)庫屬性和編譯選項 6.3 調(diào)試/運(yùn)行程序 6.4 下載程序到Flash 6.5 硬件抽象層(HAL)系統(tǒng)庫 6.6 使用HAL開發(fā)應(yīng)用程序 6.7 設(shè)備驅(qū)動概述 6.8 開發(fā)HAL下的設(shè)備驅(qū)動 6.9 MicroC/OS-II 6.10 Nios II C語言至硬件加速編譯器(C2H)簡介第6章 目錄266.5 硬件抽象層(
15、HAL)系統(tǒng)庫嵌入式系統(tǒng)的軟件開發(fā)可分為2部分:應(yīng)用程序開發(fā):用戶軟件開發(fā)的主要部分,包括系統(tǒng)的主程序main()和其它子程序。驅(qū)動程序:直接和底層硬件的宏定義打交道。276.5 硬件抽象層(HAL)系統(tǒng)庫HAL系統(tǒng)庫:指在應(yīng)用程序和系統(tǒng)硬件之間的一個系統(tǒng)庫。軟件工程師可方便的使用這些系統(tǒng)庫來與底層硬件通信,而無須關(guān)心底層硬件實現(xiàn)細(xì)節(jié)。HAL可以看作是一個支持應(yīng)用程序開發(fā)的軟件平臺,它提供API函數(shù)接口,屏蔽硬件訪問細(xì)節(jié),雖然占用了一些額外的資源,但是大大增加了應(yīng)用程序的開發(fā)速度和可移植性。286.5 硬件抽象層(HAL)系統(tǒng)庫nHAL的構(gòu)成HAL系統(tǒng)庫為用戶提供下列支持:1.集成了ANSI
16、C標(biāo)準(zhǔn)函數(shù)庫,允許調(diào)用類似C標(biāo)準(zhǔn)庫函數(shù);2.提供訪問NiosII系統(tǒng)每個設(shè)備的驅(qū)動程序;3.提供HAL API,用于標(biāo)準(zhǔn)的函數(shù)接口如設(shè)備訪問、中斷處理以及ALARM等;4.提供系統(tǒng)初始化函數(shù),為main()函數(shù)和C庫函數(shù)建立運(yùn)行時環(huán)境5.提供設(shè)備初始化函數(shù),在main()函數(shù)前,分配設(shè)備空間并初始化所有的外圍設(shè)備。Nios II HAL 的結(jié)構(gòu)296.5 硬件抽象層(HAL)系統(tǒng)庫nHAL的構(gòu)成Nios II HAL 的結(jié)構(gòu)306.5 硬件抽象層(HAL)系統(tǒng)庫用戶訪問硬件設(shè)備至少有四個辦法:調(diào)用C標(biāo)準(zhǔn)庫函數(shù),如printf()調(diào)用硬件抽象層的API函數(shù),如write()調(diào)用設(shè)備驅(qū)動程序如al
17、t_avalon_uart_write()直接訪問設(shè)備寄存器 (如IOWR_ALTERA_AVALON_UART_RXDATA(base,data)抽象程度高,可移植性最好,對用戶來抽象程度高,可移植性最好,對用戶來說最容易實現(xiàn),需要最多的額外開銷說最容易實現(xiàn),需要最多的額外開銷抽象程度較低,有一定的移植抽象程度較低,有一定的移植性,額外開銷較少,但還需要性,額外開銷較少,但還需要用戶考慮對設(shè)備寫數(shù)據(jù)前的其用戶考慮對設(shè)備寫數(shù)據(jù)前的其它硬件操作。它硬件操作。對硬件的直接訪問,需要用戶對硬件的直接訪問,需要用戶關(guān)注設(shè)備的每一個硬件細(xì)節(jié),關(guān)注設(shè)備的每一個硬件細(xì)節(jié),無額外開銷。無額外開銷。316.5
18、硬件抽象層(HAL)系統(tǒng)庫nHAL的構(gòu)成HAL支持以下幾種通用的設(shè)備模型,各類通用的設(shè)備模型使用相同的應(yīng)用編程接口(API),用戶無需考慮底層硬件而利用與通用設(shè)備模型相一致的API編寫應(yīng)用程序:1.字符型設(shè)備:發(fā)送和接收字符串的外圍硬件設(shè)備,如UART2.文件子系統(tǒng):提供訪問存儲在物理設(shè)備中的文件操作。3.DMA設(shè)備:執(zhí)行大量數(shù)據(jù)在數(shù)據(jù)源和目的地之間傳輸?shù)耐鈬O(shè)備4.定時器設(shè)備:對時鐘脈沖計數(shù)并能產(chǎn)生周期性中斷請求的外圍設(shè)備。5.Flash設(shè)備;6.以太網(wǎng)設(shè)備:對Altera提供的輕量級IP協(xié)議提供訪問的以太網(wǎng)連接。326.5 硬件抽象層(HAL)系統(tǒng)庫nHAL的通用設(shè)備模型上述通用設(shè)備模型,
19、具有相同且與硬件細(xì)節(jié)無關(guān)的API,方便應(yīng)用程序開發(fā),增加了應(yīng)用程序的開發(fā)速度和可移植性。HAL系統(tǒng)庫定義了一套函數(shù),用戶可以用來初始化和訪問上述類型的設(shè)備。通用設(shè)備模型也方便了驅(qū)動程序的開發(fā)。如果用戶要為一個新的外圍設(shè)備編寫驅(qū)動程序,只須提供該設(shè)備所必需的驅(qū)動函數(shù)。最后用戶的驅(qū)動開發(fā)任務(wù)就是做好預(yù)定義和文檔說明。用戶驅(qū)動程序是HAL API的一部分使用。336.5 硬件抽象層(HAL)系統(tǒng)庫nHAL的通用設(shè)備模型Altera提供的完整HAL支持的外圍設(shè)備:1.字符型設(shè)備包括UART核、JTAG核以及LCD16207顯示控制器;2.文件子系統(tǒng)包括只讀文檔系統(tǒng);3.DMA設(shè)備包括DMA控制器核;4
20、.定時器設(shè)備包括定時器核;5.Flash存儲器設(shè)備包括通用Flash接口芯片和主動串行配置器件EPCS控制器。6.以太網(wǎng)設(shè)備包括LAN9111以太網(wǎng)MAC/PHY控制器并且需要uC/OS-II支持。7.還有一些第三方提供的外圍設(shè)備,用戶也可以定制字節(jié)的外圍設(shè)備。34 6.1 Nios II IDE簡介 6.2 設(shè)置工程系統(tǒng)庫屬性和編譯選項 6.3 調(diào)試/運(yùn)行程序 6.4 下載程序到Flash 6.5 硬件抽象層(HAL)系統(tǒng)庫 6.6 使用HAL開發(fā)應(yīng)用程序 6.7 設(shè)備驅(qū)動概述 6.8 開發(fā)HAL下的設(shè)備驅(qū)動 6.9 MicroC/OS-II 6.10 Nios II C語言至硬件加速編譯器
21、(C2H)簡介第6章 目錄356.6 使用HAL開發(fā)應(yīng)用程序 nNios II IDE 工程結(jié)構(gòu)Nios II IDE工程結(jié)構(gòu)366.6 使用HAL開發(fā)應(yīng)用程序 nNios II IDE 工程結(jié)構(gòu)一個Nios II IDE工程用戶工程文件夾HAL系統(tǒng)庫文件夾Nios II設(shè)備驅(qū)動376.6 使用HAL開發(fā)應(yīng)用程序 nHAL系統(tǒng)工程庫nHAL系統(tǒng)工程庫包含所有與硬件處理器相關(guān)的接口信息,系統(tǒng)庫工程基于用戶定制的NIOS II處理器系統(tǒng)(由SOPC builder生成的.ptf文件)n如果SOPC builder系統(tǒng)有所改變,則由SOPC builder生成的.ptf文件將被修改,NIOS II
22、IDE會在下次編譯用戶應(yīng)用工程時自動更新HAL系統(tǒng)庫并更新驅(qū)動配置來配合系統(tǒng)硬件的改動。nHAL系統(tǒng)庫工程在用戶創(chuàng)建用戶應(yīng)用工程時自動生成。nHAL系統(tǒng)庫將用戶的程序和底層硬件分開,且總是同步于目標(biāo)硬件,用戶在開發(fā)和調(diào)試用戶代碼時不用擔(dān)心因為硬件系統(tǒng)改變而出現(xiàn)應(yīng)用程序和硬件系統(tǒng)不匹配現(xiàn)象。386.6 使用HAL開發(fā)應(yīng)用程序 n與目標(biāo)系統(tǒng)相關(guān)的system.h系統(tǒng)描述文件n第一次編譯NIOS II IDE過程中,編譯工具會根據(jù)硬件系統(tǒng)文件(.ptf)生成一個描述硬件信息的system.h文件。nSystem.h是由編譯工具根據(jù)SOPC Builder系統(tǒng)的內(nèi)容和系統(tǒng)庫的配置設(shè)置生成的一個頭文件。
23、n提供了NIOS II系統(tǒng)硬件的描述,是硬件和軟件之間的橋梁。n對應(yīng)用程序開發(fā)來說,并不是system.h中所有信息都有用,因此并不一定要在應(yīng)用程序的C源代碼文件中包含system.h396.6 使用HAL開發(fā)應(yīng)用程序 n與目標(biāo)系統(tǒng)相關(guān)的system.h系統(tǒng)描述文件System.h文件構(gòu)成過程一部分描述系統(tǒng)庫的設(shè)置信息;另一部分給出了每個外圍設(shè)備的詳細(xì)信息;406.6 使用HAL開發(fā)應(yīng)用程序 n與目標(biāo)系統(tǒng)相關(guān)的system.h系統(tǒng)描述文件程序清單6.1 system.h描述的UART設(shè)備#define UART_NAME /dev/uart /UART的設(shè)備名稱及所在路徑,open()等文件操
24、作函數(shù)可以通/過UART_NAME開打一個UART設(shè)備#define UART_TYPE altera_avalon_uart /描述了UART內(nèi)核的類型,應(yīng)用程序員可不關(guān)心#define UART_BASE 0 x00441480 /UART設(shè)備的寄存器基地址,驅(qū)動程序可以根據(jù)該地址對/UART寄存器進(jìn)行訪問#define UART_IRQ 1 / UART設(shè)備的中斷號,系統(tǒng)據(jù)此判別中斷來自UART設(shè)備#define UART_BAUD 115200 / 在系統(tǒng)生成過程中預(yù)設(shè)的串口波特率#define UART_DATA_BITS 8 / 描述UART數(shù)據(jù)幀長度#define UART_FI
25、XED_BAUD 0 /波特率是否軟件可變的標(biāo)志#define UART_PARITY N / 是否能奇偶校驗#define UART_STOP_BITS 1 / UART數(shù)據(jù)包中停止位的寬度#define UART_USE_CTS_RTS 0 /是否使用CTS和RTS信號#define UART_USE_EOP_REGISTER 0 /是否生成了EOP(End of Packet)寄存器#define UART_SIM_TRUE_BAUD 0 /仿真時的波特率#define UART_SIM_CHAR_STREAM /仿真時的字符流#define UART_FREQ 48000000 / A
26、valon總線的頻率,48MHz416.6 使用HAL開發(fā)應(yīng)用程序 n數(shù)據(jù)寬度及HAL類型定義nHAL使用alt_types.h頭文件定義了一套支持ANSI C類型的數(shù)據(jù)類型。類型說明alt_8有符號8位整數(shù)alt_u8無符號8位整數(shù)alt_16有符號16位整數(shù)alt_u16有符號16位整數(shù)alt_32無符號32位整數(shù)alt_u32有符號32位整數(shù)類型說明char8bitsshort16bitslong32bitsint32bits表6.1 HAL數(shù)據(jù)類型定義表6.2 Altera提供的GNU編譯器下的ANSI C數(shù)據(jù)類型寬度426.6 使用HAL開發(fā)應(yīng)用程序 nHAL對系統(tǒng)啟動的支持啟動代碼
27、用于系統(tǒng)上電復(fù)位后到運(yùn)行main()函數(shù)前,初始化硬件,構(gòu)建應(yīng)用程序運(yùn)行時環(huán)境的過程。下面簡單地敘述一下這段代碼的完成的功能:上電或復(fù)位后的程序入口標(biāo)號是“_reset”,程序先對CPU進(jìn)行初始化:1.初始化指令Cache,然后調(diào)用_start;2.初始化數(shù)據(jù)Cache,把異常向量表裝入指令Cache;3.設(shè)置堆棧指針(Stack Pointer)和全局指針(Global Pointer)寄存器;4.把全局變量和靜態(tài)變量區(qū)(_bss_start _bss_end)清零;5.如果沒有bootloader,則把可讀寫數(shù)據(jù)(.rwdata),只讀數(shù)據(jù)(.rodata)和異常向量表裝入RAM中;6.調(diào)
28、用alt_main()。436.6 使用HAL開發(fā)應(yīng)用程序 nHAL對系統(tǒng)啟動的支持HAL提供默認(rèn)執(zhí)行的alt_main()對CPU及外設(shè)進(jìn)行初始化:1.調(diào)用ALT_OS_INIT()初始化OS:默認(rèn)情況下完成對uC/OS-II的初始化,如果系統(tǒng)不使用操作系統(tǒng),則這步不執(zhí)行。2.如果使用操作系統(tǒng),則初始化訪問HAL提供的文件系統(tǒng)的信號量(alt_fd_list_lock)。3.初始化中斷控制器,開中斷。4.調(diào)用alt_sys_init()初始化系統(tǒng)設(shè)備及軟件模塊,NiosII IDE自動創(chuàng)建管理alt_sys_init.c。5.把標(biāo)準(zhǔn)輸入輸出設(shè)備(stdin, stdout, stderr)映
29、射到輸入輸出通道(I/O channel)上去;6.調(diào)用C+的構(gòu)造器,使用the _do_ctors()函數(shù)。7.登記C+的解構(gòu)器;8.調(diào)用main()函數(shù)。446.6 使用HAL開發(fā)應(yīng)用程序 nHAL與異常處理當(dāng)跳轉(zhuǎn)到異常處理地址后,處理器開始執(zhí)行一段由HAL插入的代碼,判斷中斷源和中斷優(yōu)先級,然后再跳轉(zhuǎn)到用戶的中斷服務(wù)子程序(ISR)異常處理過程和中斷服務(wù)程序NIOS II采用典型的,簡單的,異常處理方式,使用一個簡單的異常處理器處理采用典型的,簡單的,異常處理方式,使用一個簡單的異常處理器處理所有類型的中斷所有類型的中斷456.6 使用HAL開發(fā)應(yīng)用程序 nHAL與異常處理當(dāng)異常發(fā)生后,
30、處理器會依次完成以下工作:1.把status寄存器內(nèi)容復(fù)制到estatus寄存器中,保存當(dāng)前處理器狀態(tài),如果是硬件中斷,estatus寄存器中的EPIE位置1;2.清除status寄存器的U位為0,強(qiáng)制處理器進(jìn)入超級用戶狀態(tài);3.清除status寄存器的PIE位為0,禁止所有的硬件中斷;4.把異常返回地址寫入ea寄存器(r29);5.跳轉(zhuǎn)到異常處理地址。466.6 使用HAL開發(fā)應(yīng)用程序 nHAL與異常處理為了方便創(chuàng)建和維護(hù)中斷服務(wù)程序,HAL系統(tǒng)庫提供了中斷API函數(shù)如下所示:int alt_irq_register(alt_u32 id,void* context,void (*isr)(
31、void*, alt_u32) /注冊中斷服務(wù)程序int alt_irq_disable(alt_u32 id) /禁止單個中斷int alt_irq_enable(alt_u32 id) /使能單個中斷alt_irq_context alt_irq_disable_all(void) /禁止所有中斷,并返回一個context 值void alt_irq_enable_all(alt_irq_context context) /使能所有中斷,以alt_irq_disable_all()返回值作為輸入?yún)?shù)alt_u32 alt_irq_interruptible(alt_u32 priority
32、) /允許嵌套void alt_irq_non_interruptible (alt_u32 mask) /禁止嵌套int alt_irq_enabled (void) /檢測中斷的狀態(tài),如果有中斷使能返回非0476.6 使用HAL開發(fā)應(yīng)用程序 n提高處理性能的措施(1)從軟件上改善處理性能1.把無關(guān)緊要的以及影響中斷執(zhí)行性能的事情放在中斷服務(wù)程序之外處理,盡量使中斷服務(wù)程序精簡;2.把傳送大量數(shù)據(jù)之類的事情交給DMA來完成;3.如果使用DMA傳輸大量數(shù)據(jù),可以加大緩沖區(qū)以減少中斷次數(shù),從而提高中斷性能。4.DMA傳輸大量數(shù)據(jù)應(yīng)用中,采用雙緩沖區(qū);5.在允許的情況下,一直保持中斷使能。6.使用
33、快速的存儲空間來存儲關(guān)鍵代碼;7.使用中斷嵌套8.將應(yīng)用程序工程和系統(tǒng)庫工程都設(shè)置為高的編譯優(yōu)化等級。486.6 使用HAL開發(fā)應(yīng)用程序 n提高處理性能的措施(2)從硬件上改善處理性能1.添加或加大快速存儲器來存儲關(guān)鍵代碼或作為數(shù)據(jù)緩存。2.添加DMA控制器,這要與軟件改善中的第3.4步同時執(zhí)行。3.使用性能更好的Nios II處理器,如Nios II/f。4.根據(jù)系統(tǒng)實際的中斷優(yōu)先級來合理分配SOPC Builder系統(tǒng)中的中斷號,注意IRQ0為最高優(yōu)先級。49 6.1 Nios II IDE簡介 6.2 設(shè)置工程系統(tǒng)庫屬性和編譯選項 6.3 調(diào)試/運(yùn)行程序 6.4 下載程序到Flash 6
34、.5 硬件抽象層(HAL)系統(tǒng)庫 6.6 使用HAL開發(fā)應(yīng)用程序 6.7 設(shè)備驅(qū)動概述 6.8 開發(fā)HAL下的設(shè)備驅(qū)動 6.9 MicroC/OS-II 6.10 Nios II C語言至硬件加速編譯器(C2H)簡介第6章 目錄506.7 設(shè)備驅(qū)動概述n設(shè)備驅(qū)動的開發(fā)n設(shè)備驅(qū)動可看作是一組描述設(shè)備的數(shù)據(jù)結(jié)構(gòu)和控制設(shè)備行為的函數(shù)的集合n驅(qū)動開發(fā)分為兩部分:定義描述設(shè)備的數(shù)據(jù)結(jié)構(gòu)實現(xiàn)設(shè)備訪問的辦法516.7 設(shè)備驅(qū)動概述n6.7.1 設(shè)備寄存器抽象驅(qū)動開發(fā)人員眼中的設(shè)備我們只能通過讀寫設(shè)備寄存我們只能通過讀寫設(shè)備寄存器來間接控制設(shè)備的行為。器來間接控制設(shè)備的行為。設(shè)備可看作一組寄存器的抽設(shè)備可看作
35、一組寄存器的抽象。象。526.7 設(shè)備驅(qū)動概述n6.7.1 設(shè)備寄存器抽象n要實現(xiàn)對設(shè)備寄存器的讀寫,必須把設(shè)備放在CPU可以訪問的空間:I/O地址空間:由專門硬件和CPU指令支持內(nèi)存地址空間:映射入該地址空間的設(shè)備讀/寫方法與內(nèi)存一致。n采用“基地址+偏移量”訪問536.7 設(shè)備驅(qū)動概述n6.7.2 處理器外圍設(shè)備的分類字符型設(shè)備:以字符為單位進(jìn)行傳輸?shù)脑O(shè)備。比如字符終端、串口、鼠標(biāo)等等。塊設(shè)備:以數(shù)據(jù)塊為單位進(jìn)行傳輸?shù)脑O(shè)備,比如CF卡。網(wǎng)絡(luò)設(shè)備:是支持網(wǎng)絡(luò)通信的設(shè)備。以包的形式傳送。546.7 設(shè)備驅(qū)動概述n標(biāo)準(zhǔn)I/O訪問方法標(biāo)準(zhǔn)I/O訪問方法就是標(biāo)準(zhǔn)I/O設(shè)備訪問函數(shù)的集合。這些訪問函數(shù)
36、就是我們所熟知的打開(Open)、讀(Read)、寫(Write)等。標(biāo)準(zhǔn)I/O函數(shù)描 述open準(zhǔn)備使用一個I/O設(shè)備close釋放設(shè)備占用的資源read從一個I/O設(shè)備讀數(shù)據(jù)write向一個I/O設(shè)備寫數(shù)據(jù)lseek移動文件描述字的當(dāng)前位置fstat獲取一個打開的文件描述的文件信息ioctl設(shè)置I/O設(shè)備的操作參數(shù)表6.3 標(biāo)準(zhǔn)I/O設(shè)備訪問函數(shù)556.7 設(shè)備驅(qū)動概述n標(biāo)準(zhǔn)I/O函數(shù)到具體驅(qū)動程序的映射標(biāo)準(zhǔn)I/O訪問函數(shù)映射566.7 設(shè)備驅(qū)動概述n標(biāo)準(zhǔn)I/O函數(shù)到具體驅(qū)動程序的映射Device_nameopenreadwritecloselseekfstatioctl“my”my_op
37、enmy_readmy_writemy_closemy_lseekmy_fstatmy_ioctl 驅(qū)動函數(shù)入口地址表6.4 驅(qū)動設(shè)備表576.7 設(shè)備驅(qū)動概述n標(biāo)準(zhǔn)I/O函數(shù)到具體驅(qū)動程序的映射程序清單6.2 驅(qū)動設(shè)備表項struct alt_dev_s alt_llist llist; /用以鏈接設(shè)備表項 const char* name; /設(shè)備名 int (*open)(alt_fd* fd, const char* name, int flags, int mode); int (*close)(alt_fd* fd); int (*read)(alt_fd* fd, char* p
38、tr, int len); int (*write)(alt_fd* fd, const char* ptr, int len); int (*lseek)(alt_fd* fd, int ptr, int dir); int (*fstat)(alt_fd* fd, struct stat* buf); int (*ioctl)(alt_fd* fd, int req, void* arg);586.7 設(shè)備驅(qū)動概述n驅(qū)動程序與設(shè)備交互的方法輪詢和中斷p輪詢方法:是指軟件周期性查詢硬件事件的發(fā)生。其驅(qū)動程序設(shè)計起來比較簡單;缺點是,當(dāng)有多個設(shè)備需要輪詢時,由此帶來的輪詢開銷是比較大的,而實時
39、性會降低。p中斷方式:是指外部事件發(fā)生后,打斷正在處理的事件,進(jìn)而去檢查事件發(fā)生的原因,最后做出相應(yīng)的處理??梢蕴岣逤PU的利用率并可以保證系統(tǒng)具有較高的實時性能。在實時系統(tǒng)以及有多個外設(shè)的系統(tǒng)中,通常采用中斷方式與外設(shè)進(jìn)行交互。596.7 設(shè)備驅(qū)動概述n調(diào)用設(shè)備驅(qū)動的方式調(diào)用設(shè)備驅(qū)動通常有3種方式:1.應(yīng)用程序直接調(diào)用;2.應(yīng)用程序通過操作系統(tǒng)調(diào)用;3.應(yīng)用程序通過操作系統(tǒng)的擴(kuò)展。優(yōu)點:高效訪問設(shè)備;缺點:應(yīng)用程序與設(shè)備驅(qū)動直接關(guān)聯(lián),可移植性變差。優(yōu)點:高效訪問設(shè)備;缺點:應(yīng)用程序與設(shè)備驅(qū)動直接關(guān)聯(lián),可移植性變差。優(yōu)點:高效訪問設(shè)備;缺點:應(yīng)用程序與設(shè)備驅(qū)動直接關(guān)聯(lián),可移植性變差。60 6.
40、1 Nios II IDE簡介 6.2 設(shè)置工程系統(tǒng)庫屬性和編譯選項 6.3 調(diào)試/運(yùn)行程序 6.4 下載程序到Flash 6.5 硬件抽象層(HAL)系統(tǒng)庫 6.6 使用HAL開發(fā)應(yīng)用程序 6.7 設(shè)備驅(qū)動概述 6.8 開發(fā)HAL下的設(shè)備驅(qū)動 6.9 MicroC/OS-II 6.10 Nios II C語言至硬件加速編譯器(C2H)簡介第6章 目錄616.8 開發(fā)HAL下的設(shè)備驅(qū)動調(diào)驅(qū)動程序的開發(fā)步驟:1.創(chuàng)建一個設(shè)備頭文件,用于描述設(shè)備的寄存器和其訪問方法;2.定義并實現(xiàn)設(shè)備驅(qū)動的功能;3.在main()中單獨(dú)測試設(shè)備驅(qū)動的功能;4.把設(shè)備驅(qū)動集成到HAL中。626.8 開發(fā)HAL下的設(shè)
41、備驅(qū)動n創(chuàng)建一個描述設(shè)備寄存器的頭文件1.文件名遵循_regs.h的格式;2.文件最后應(yīng)該放置在: componentsinc文件夾下;3.以IORD_的形式定義出寄存器的讀訪問方式;4.以IOWR_的形式定義出寄存器的寫訪問方式;5.以_MSK的形式定義出寄存器位的掩碼;6.以_OFST的形式定義出寄存器位的偏移位置。636.8 開發(fā)HAL下的設(shè)備驅(qū)動n為各類設(shè)備創(chuàng)建驅(qū)動程序HAL支持以下幾種通用的設(shè)備模型:p字符型設(shè)備(Character-mode devices)p文件子系統(tǒng)(File subsytems)pDMA設(shè)備(DMA devices)p用作系統(tǒng)時鐘的定時器設(shè)備(Timer de
42、vices used as system clock)p用作時間標(biāo)記的定時器設(shè)備(Timer devices used as timestamp clock)pFlash設(shè)備(Flash memory devices)p以太網(wǎng)設(shè)備(Ethernet devices)下面將敘述各類設(shè)備驅(qū)動的實現(xiàn)方法及如何它們注冊(register)到HAL系統(tǒng)中去。646.8 開發(fā)HAL下的設(shè)備驅(qū)動n為各類設(shè)備創(chuàng)建驅(qū)動程序1. 字符型設(shè)備 把字符型虛擬設(shè)備具體化 實現(xiàn)設(shè)備的具體操作 向HAL注冊字符設(shè)備656.8 開發(fā)HAL下的設(shè)備驅(qū)動 把字符型虛擬設(shè)備具體化程序清單6.3 字符型設(shè)備結(jié)構(gòu)體定義/* compo
43、nentsaltera_halHALincsysalt_dev.h文件中定義*/struct alt_dev_s alt_llist llist; /* for internal use */ const char* name; int (*open) (alt_fd* fd, const char* name, int flags, int mode); int (*close) (alt_fd* fd); int (*read) (alt_fd* fd, char* ptr, int len); int (*write) (alt_fd* fd, const char* ptr, int
44、len); int (*lseek) (alt_fd* fd, int ptr, int dir); int (*fstat) (alt_fd* fd, struct stat* buf); int (*ioctl) (alt_fd* fd, int req, void* arg);typedef struct alt_dev_s alt_dev; 這個結(jié)構(gòu)體表達(dá)的意思是,字符型設(shè)備有這樣的共性:它們都有一個以字符串形式表達(dá)的名字(name),都支持open、close、read、write、lseek、fstat、ioctl操作中的一種或幾種。666.8 開發(fā)HAL下的設(shè)備驅(qū)動 把字符型虛擬
45、設(shè)備具體化程序清單6.4 alt_fd類型定義typedef struct alt_fd_s alt_dev* dev; alt_u8* priv; int fd_flags; alt_fd;Dev:是指向設(shè)備類型結(jié)構(gòu)體的指針;Priv:供驅(qū)動程序內(nèi)部使用;Fd_flags:傳遞文件處理標(biāo)志。676.8 開發(fā)HAL下的設(shè)備驅(qū)動 把字符型虛擬設(shè)備具體化程序清單6.4 描述uART設(shè)備的結(jié)構(gòu)體typedef struct alt_dev dev; void* base; alt_u32 ctrl; alt_u32 rx_start; volatile alt_u32 rx_end; volatil
46、e alt_u32 tx_start; alt_u32 tx_end; #ifdef ALTERA_AVALON_UART_USE_IOCTL struct termios termios; alt_u32 freq; #endif alt_u32 flags; ALT_FLAG_GRP(events) ALT_SEM(read_lock) ALT_SEM(write_lock) alt_u8 rx_bufALT_AVALON_UART_BUF_LEN; alt_u8 tx_bufALT_AVALON_UART_BUF_LEN; alt_avalon_uart_dev;686.8 開發(fā)HAL下
47、的設(shè)備驅(qū)動 把字符型虛擬設(shè)備具體化void func(alt_dev* dev) alt_avalon_uart_dev * uart_dev = (alt_avalon_uart_dev *) dev;696.8 開發(fā)HAL下的設(shè)備驅(qū)動 把字符型虛擬設(shè)備具體化上面定義出了UART設(shè)備的數(shù)據(jù)類型,但是內(nèi)存空間中還沒有真正描述UART設(shè)備的數(shù)據(jù)域,接下來把UART設(shè)備實例化。程序清單6.4 描述uART設(shè)備的結(jié)構(gòu)體見下頁706.8 開發(fā)HAL下的設(shè)備驅(qū)動程序清單6.4 描述uART設(shè)備的結(jié)構(gòu)體#define ALTERA_AVALON_UART_INSTANCE(name, dev) stati
48、c alt_avalon_uart_dev dev = ALT_LLIST_ENTRY, name#_NAME, NULL, /* open */ NULL, /* close */ alt_avalon_uart_read, alt_avalon_uart_write, NULL, /* lseek */ NULL, /* fstat */ ALTERA_AVALON_UART_IOCTL, , (void*) name#_BASE, 0, 0, 0, 0, 0, ALTERA_AVALON_UART_TERMIOS(name#_STOP_BITS, (name#_PARITY = N),
49、(name#_PARITY = O), name#_DATA_BITS, name#_USE_CTS_RTS, name#_BAUD) ALTERA_AVALON_UART_FREQ(name) (name#_FIXED_BAUD ? ALT_AVALON_UART_FB : 0) | (name#_USE_CTS_RTS ? ALT_AVALON_UART_FC : 0) 716.8 開發(fā)HAL下的設(shè)備驅(qū)動 實現(xiàn)設(shè)備的具體操作上一步中,已經(jīng)獲得了設(shè)備的屬性,也把訪問函數(shù)地址填入相應(yīng)的函數(shù)指針,接下來的工作就是實現(xiàn)這些函數(shù)。實現(xiàn)這些函數(shù)例子見UART的實現(xiàn)文件 componentsaltera
50、_avalon_uartHALsrcaltera_avalon_uart.c726.8 開發(fā)HAL下的設(shè)備驅(qū)動 向HAL注冊(Register)字符設(shè)備方法:在設(shè)備的初始化函數(shù)中調(diào)用字符設(shè)備驅(qū)動注冊函數(shù):注冊函數(shù)返回負(fù)數(shù)表示注冊失敗,非負(fù)數(shù)(0和正數(shù))表示操作成功。所以,只須檢測返回值是否小于零,即可知道是否操作成功。例如:int alt_dev_reg(alt_dev* dev)#define ENODEV 50int func() err = -ENODEV; return err;736.8 開發(fā)HAL下的設(shè)備驅(qū)動n為各類設(shè)備創(chuàng)建驅(qū)動程序2. 文件子系統(tǒng)HAL已經(jīng)提供了一個文件系統(tǒng),當(dāng)把
51、一個新的設(shè)備掛載到HAL文件系統(tǒng)的某個點上時,可以用文件的方式來管理和操作它。 把文件子系統(tǒng)型虛擬設(shè)備具體化; 實現(xiàn)設(shè)備的具體操作; 向HAL注冊文件子系統(tǒng)。746.8 開發(fā)HAL下的設(shè)備驅(qū)動n為各類設(shè)備創(chuàng)建驅(qū)動程序3. Flash設(shè)備 把Flash型虛擬設(shè)備具體化756.8 開發(fā)HAL下的設(shè)備驅(qū)動程序清單6.7 Flash型虛擬設(shè)備結(jié)構(gòu)體定義struct alt_flash_dev alt_llist llist; const char* name; alt_flash_open open; alt_flash_close close; alt_flash_write write; alt_
52、flash_read read; alt_flash_get_flash_info get_info; alt_flash_erase_block erase_block; alt_flash_write_block write_block; void* base_addr; /flash的基地址 int length; /flash的容量大小,單位為字節(jié) int number_of_regions; /flash中可擦除區(qū)的數(shù)量 flash_region region_infoALT_MAX_NUMBER_OF_FLASH_REGIONS; ;766.8 開發(fā)HAL下的設(shè)備驅(qū)動程序清單6.8
53、 具體Flash設(shè)備的數(shù)據(jù)結(jié)構(gòu)定義struct alt_flash_cfi_dev alt_flash_dev dev; int algorithm; int mode_width; int device_width; int write_timeout; int erase_timeout; int primary_address; /* Flash type specific functions to access the flash and perform various operations */ alt_write_command_fn write_command; alt_read
54、_query_fn read_query; alt_write_native_fn write_native;776.8 開發(fā)HAL下的設(shè)備驅(qū)動n為各類設(shè)備創(chuàng)建驅(qū)動程序3. Flash設(shè)備 實現(xiàn)Flash設(shè)備的具體操作現(xiàn)Flash設(shè)備的具體操作。從Flash型虛擬設(shè)備結(jié)構(gòu)體定義中,我們可以知道,對于Flash型設(shè)備需要實現(xiàn)7種訪問方法,它們是:1. alt_flash_open();2. alt_flash_close();3. alt_flash_write();4. alt_flash_read();5. alt_flash_get_flash_info();6. alt_flash_er
55、ase_block();7. alt_flash_write_block();786.8 開發(fā)HAL下的設(shè)備驅(qū)動n為各類設(shè)備創(chuàng)建驅(qū)動程序3. Flash設(shè)備 向HAL注冊Flash設(shè)備注冊方法同字符設(shè)備,唯一不同是需要調(diào)用Flash設(shè)備注冊函數(shù):注冊函數(shù)返回0表示注冊成功,返回一個負(fù)數(shù)表示注冊失敗。int alt_flash_device_register(alt_flash_fd* dev)796.8 開發(fā)HAL下的設(shè)備驅(qū)動n為各類設(shè)備創(chuàng)建驅(qū)動程序4. 以太網(wǎng)設(shè)備Altera提供了SMSC lan91c111器件的驅(qū)動,因此用戶如果想使用不同廠家的以太網(wǎng)芯片,編寫驅(qū)動的一種簡便的方法就是在l
56、an91c111驅(qū)動的基礎(chǔ)上 進(jìn) 行 修 改 。 l a n 9 1 c 1 1 1 的 驅(qū) 動 位 于 alterakitsnios2componentsaltera_avalon_lan91c111文件夾中。剩下的三種設(shè)備:DMA設(shè)備、用作系統(tǒng)時鐘的定時器設(shè)備、用作時間標(biāo)記的定時器設(shè)備Altera已經(jīng)為用戶實現(xiàn)了,所以這里就不再鏊述了。806.8 開發(fā)HAL下的設(shè)備驅(qū)動n把設(shè)備驅(qū)動集成到HAL中1. 放置驅(qū)動程序驅(qū)動程序開發(fā)完畢后,還需要把源程序文件放到約定的SRC文件夾下,并在此文件夾下為它編寫一個簡單的Makefile文件,以便于工程的管理和編譯。所有驅(qū)動都應(yīng)該置在components
57、目錄下集成到HAL系統(tǒng)庫中的設(shè)備驅(qū)動文件放在HAL目錄放 置 設(shè) 備 寄 存 器 描 述 文 件816.8 開發(fā)HAL下的設(shè)備驅(qū)動n把設(shè)備驅(qū)動集成到HAL中2. 編寫Makefile文件程序清單6.10 Makefile的基本格式# List all source files supplied by this component.C_LIB_SRCS += altera_avalon_uart.cASM_LIB_SRCS +=INCLUDE_PATH += 欲編譯的C文件放置在C_LIB_SRCS一行; 欲編譯的匯編文件放置在ASM_LIB_SRCS一行; 欲增加包含文件的路徑,把路徑加在IN
58、CLUDE_PATH一行; 多個文件之間和多個路徑之間用空格分開。826.8 開發(fā)HAL下的設(shè)備驅(qū)動n把設(shè)備驅(qū)動集成到HAL中3. 設(shè)備頭文件編寫找到設(shè)備頭文件后,編譯器會在alt_sys_init.c文件中插入下面一些代碼:包含該設(shè)備的頭文件;插入為該設(shè)備分配存儲空間的宏定義:_INSTANCE;在初始化函數(shù)alt_sys_init()中插入初始化設(shè)備的宏定義:_INIT。836.8 開發(fā)HAL下的設(shè)備驅(qū)動程序清單6.11 alt_sys_init.c的片段#include system.h#include sys/alt_sys_init.h“/* device headers*/#inc
59、lude altera_avalon_timer.h#include altera_avalon_uart.h“/* Allocate the device storage*/ALTERA_AVALON_UART_INSTANCE( UART1, uart1 );ALTERA_AVALON_TIMER_INSTANCE( SYSCLK, sysclk );/* Initialise the devices*/void alt_sys_init( void )ALTERA_AVALON_UART_INIT( UART1, uart1 );ALTERA_AVALON_TIMER_INIT( SYS
60、CLK, sysclk );846.8 開發(fā)HAL下的設(shè)備驅(qū)動n把設(shè)備驅(qū)動集成到HAL中3. 設(shè)備頭文件編寫設(shè)備頭文件的格式:設(shè)備頭文件名要與SOPC Builder中對應(yīng)的組件名一致。在設(shè)備頭文件中以_INSTANCE的形式定義一個設(shè)備實例化的宏。在設(shè)備頭文件中以_INIT的形式定義一個設(shè)備初始化的宏。856.8 開發(fā)HAL下的設(shè)備驅(qū)動程序清單6.12 alter_avalon_uart設(shè)備的實例化宏componentsaltera_avalon_uartHALinc altera_avalon_uart.h文件中定義#define ALTERA_AVALON_UART_INSTANCE(name, dev
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年唇彩行業(yè)投資機(jī)會及風(fēng)險投資運(yùn)作模式研究報告
- 中級經(jīng)濟(jì)師高頻試題及詳細(xì)答案
- 水利水電工程創(chuàng)新研發(fā)課題分析試題及答案
- 2025年市政工程技術(shù)規(guī)范試題及答案
- 中級經(jīng)濟(jì)師考試復(fù)習(xí)的階段性總結(jié)試題及答案
- 提升通過率的2025年考試試題及答案
- 2025標(biāo)準(zhǔn)船舶融資借款合同模板
- 水利水電工程重大事故處理試題及答案
- 工程項目價值管理試題及答案
- 項目規(guī)劃中的數(shù)據(jù)分析試題及答案
- 2025年云計算與大數(shù)據(jù)技術(shù)考試試題及答案
- 納西族文化課件
- 礦石加工中的化學(xué)工藝安全技術(shù)考核試卷
- 水利水電工程技術(shù)術(shù)語全
- 2024-2025教科版科學(xué)一年級下冊第二單元測試卷及答案
- 醫(yī)療器械研究報告醫(yī)療器械產(chǎn)業(yè)現(xiàn)狀及未來發(fā)展趨勢分析報告(2025年)
- 數(shù)字孿生技術(shù)在智慧能源系統(tǒng)中的挑戰(zhàn)與機(jī)遇
- 拋石專項施工方案
- 電力增材再造技術(shù)的創(chuàng)新與發(fā)展
- 網(wǎng)絡(luò)釣魚攻擊防范-第1篇-全面剖析
- 《環(huán)境設(shè)計中的天人合一》教學(xué)課件-2024-2025學(xué)年人美版(北京)(2024)初中美術(shù)七年級下冊
評論
0/150
提交評論