硬件抽象層(Hardware Abstraction Layer, HAL)是一個(gè)輕量級(jí)嵌入式運(yùn)行時(shí)環(huán)境,它為用戶應(yīng)用程序和底層硬件提供了一個(gè)簡(jiǎn)單的設(shè)備驅(qū)動(dòng)程序接口。HAL應(yīng)用程序接口(API)與ANSI C標(biāo)準(zhǔn)庫(kù)綜合在一起,可使用類似C語(yǔ)言的庫(kù)函數(shù)來(lái)訪問(wèn)硬件設(shè)備或文件,如printf()、fopen()、fwrite()等函數(shù)。軟件工程師可非常方便的使用這些函數(shù)來(lái)與底層硬件通信,而無(wú)須關(guān)心底層硬件實(shí)現(xiàn)細(xì)節(jié)。
HAL可以看作是一個(gè)支持應(yīng)用程序開(kāi)發(fā)的軟件平臺(tái),它提供API函數(shù)接口,屏蔽硬件訪問(wèn)細(xì)節(jié),雖然占用了一些額外的資源,但是大大增加了應(yīng)用程序的開(kāi)發(fā)速度和可移植性。用戶只要利用HAL提供的各種函數(shù)就可以編寫應(yīng)用程序。
HAL作為Nios II處理器系統(tǒng)的設(shè)備驅(qū)動(dòng)程序包,為系統(tǒng)中的外圍設(shè)備提供了一致的接口。Nios II SBT從SOPC信息文件(.sopcinfo)中提取系統(tǒng)信息,生成一個(gè)針對(duì)于該硬件配置的定制的HAL板級(jí)支持包(BSP)。當(dāng)硬件配置信息發(fā)生改變時(shí),HAL設(shè)備驅(qū)動(dòng)配置也會(huì)自動(dòng)隨之更改,從而避免了由于底層硬件的變化而產(chǎn)生的編程錯(cuò)誤。Nios II SBT為用戶自動(dòng)創(chuàng)建和管理HAL設(shè)備驅(qū)動(dòng)程序,用戶不用創(chuàng)建或拷貝HAL文件,也不用編輯HAL中的任何源代碼。
HAL為用戶提供以下支持:
集成了newlib ANSI C標(biāo)準(zhǔn)庫(kù),允許調(diào)用類似C標(biāo)準(zhǔn)庫(kù)函數(shù);
提供訪問(wèn)Nios II系統(tǒng)中每個(gè)設(shè)備的驅(qū)動(dòng)程序;
提供HAL API,用于標(biāo)準(zhǔn)的函數(shù)接口如設(shè)備訪問(wèn)、中斷處理以及ALARM等;
提供系統(tǒng)初始化函數(shù),為main()函數(shù)和C庫(kù)函數(shù)建立運(yùn)行時(shí)環(huán)境;
提供設(shè)備初始化函數(shù),在main()函數(shù)之前,分配設(shè)備空間并初始化所有的外圍設(shè)備;
Nios II HAL的結(jié)構(gòu)如圖下所示。
	
Nios II HAL的結(jié)構(gòu)
由上圖可以看出,用戶應(yīng)用程序在硬件抽象層和C標(biāo)準(zhǔn)庫(kù)函數(shù)上,這說(shuō)明用戶應(yīng)用程序要訪問(wèn)硬件設(shè)備至少有4中方法:
調(diào)用C標(biāo)準(zhǔn)庫(kù)函數(shù),如printf()和fwrite();
調(diào)用硬件抽象層的API函數(shù),如write();
調(diào)用設(shè)備驅(qū)動(dòng)程序,如alt_avalon_uart_write();
直接訪問(wèn)設(shè)備寄存器,如IOWR_ALTERA_AVALON_UART_RXDATA(base, data);
HAL I/O操作宏
	
前兩種方法的抽象度最高,可移植性最好,對(duì)用戶來(lái)說(shuō)最容易實(shí)現(xiàn),但是需要最多的額外開(kāi)銷;第三種方法抽象度較低,有一定的移植性,額外開(kāi)銷較少,但還需要用戶考慮對(duì)設(shè)備寫數(shù)據(jù)前的其他硬件操作;最后一種方法完全是對(duì)硬件的直接訪問(wèn),需要用戶關(guān)注設(shè)備的每個(gè)硬件細(xì)節(jié),無(wú)額外開(kāi)銷。
	對(duì)于I/O外設(shè),HAL提供了一些宏定義來(lái)訪問(wèn)其中的寄存器,這些宏在
另外,在HAL中還定義了常用的數(shù)據(jù)類型,這些定義在alt_type.h文件中,下面是alt_types.h文件內(nèi)容的片段,從中我們可以看出,所有的數(shù)據(jù)類型都是以alt_開(kāi)頭,若是無(wú)符號(hào)類型,那么數(shù)據(jù)類型中含有“u”表示unsigned的意思,最后會(huì)用數(shù)據(jù)的位數(shù)來(lái)結(jié)尾,如8、16、32、64。使用這些HAL數(shù)據(jù)類型可以很方便的看出變量的數(shù)據(jù)類型,比如,alt_u8 key_data 就表示key_data是一個(gè)8位的無(wú)符號(hào)數(shù)據(jù)。
	
使用HAL開(kāi)發(fā)應(yīng)用程序
基于HAL的軟件工程的創(chuàng)建和管理與Nios II SBT緊密相關(guān),下圖為Nios II SBT工程結(jié)構(gòu)。
	
Nios II SBT工程結(jié)構(gòu)
從上圖可以看出,一個(gè)Nios II SBT工程包括2個(gè)工程:用戶應(yīng)用程序工程和HAL BSP工程。用戶應(yīng)用程序工程包含所有的用戶程序代碼文件,最終的可執(zhí)行映像由此工程生成。HAL BSP工程中包含所有與硬件處理器系統(tǒng)相關(guān)的接口信息。
在第一次編譯Nios II SBT過(guò)程中,編譯工具會(huì)根據(jù)硬件系統(tǒng)信息生成一個(gè)描述硬件信息的system.h文件,如代碼1.1所示。該文件是HAL的基礎(chǔ),它提供了關(guān)于Nios II系統(tǒng)硬件的描述,是硬件和軟件之間的橋梁。對(duì)應(yīng)用程序開(kāi)發(fā)來(lái)說(shuō),并不是system.h中的所有信息都有用,因此并不一定要在應(yīng)用程序的C源代碼文件中包含system.h。
由代碼1.1可知,system.h文件給出了每個(gè)外設(shè)的詳細(xì)信息,包括以下幾部分:
外設(shè)的硬件配置;
外設(shè)的基地址;
中斷優(yōu)先級(jí)(如果外設(shè)有中斷);
外設(shè)的符號(hào)名稱;
	
代碼1.1 system.h文件示例
- 
                                處理器
                                +關(guān)注關(guān)注 68文章 20111瀏覽量 244345
- 
                                嵌入式
                                +關(guān)注關(guān)注 5178文章 20028瀏覽量 326075
- 
                                接口
                                +關(guān)注關(guān)注 33文章 9336瀏覽量 155776
- 
                                硬件
                                +關(guān)注關(guān)注 11文章 3540瀏覽量 68572
原文標(biāo)題:Nios II 處理器的硬件抽象層(HAL)中文解說(shuō)
文章出處:【微信號(hào):友晶FPGA,微信公眾號(hào):友晶FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于NIOS II嵌入式處理器的LCD控制實(shí)現(xiàn)
 
    
基于Nios II和uClinux實(shí)現(xiàn)遠(yuǎn)程測(cè)控服務(wù)器的設(shè)計(jì)
 
    
基于NIOS II 軟核處理器的SOPC 技術(shù)
Cyclone II FPGA和Nios II嵌入式處理器的優(yōu)勢(shì)
基于Nios II處理器的USB接口設(shè)計(jì)
NIOS II的特性及開(kāi)發(fā)設(shè)計(jì)流程
Nios II處理器-世界上最通用的處理器
 
    
Nios II處理器內(nèi)核詳解
Nios II 系列處理器配置選項(xiàng)
怎樣使用Nios II處理器來(lái)構(gòu)建多處理器系統(tǒng)
FPGA視頻教程之如何使用NIOS II處理器
 
    
FPGA Nios嵌入式處理器的硬件開(kāi)發(fā)
 
    
 
           
        
 
         深度剖析Nios II 處理器的硬件抽象層
深度剖析Nios II 處理器的硬件抽象層 
                 
  
     
     
            
             
             
                 
             工商網(wǎng)監(jiān)
工商網(wǎng)監(jiān)
        
評(píng)論