NIOS II HAL(Hardware Abstraction Layer)
参考:http://blog.sina.com.cn/s/blog_6f36f4fb0100n3nw.html
HAL系统库是一个轻量级的运行环境,提供了简单的与硬件通信的设备驱动程序。
HAL API集成了ANSI C库,这些API允许你使用标准C函数(printf(), fopen(), fwrite()等)。
HAL类似于ARM系统中的BSP(board-support package),提供了一个一致的设备存取界面。
由于SOPC Builder和NIOS II IDE紧密的集成,在SOPC Builder生成硬件系统以后,NIOS II IDE 能够自动生成对应的客户HAL系统库。更新硬件系统设置以后NIOS II IDE能自动更新HAL的驱动设置。
在创建软件项目的时候,NIOS II IDE自动生成并管理HAL系统库。
HAL系统库提供了下列系统服务:
- 集成newlib。一个ANSI C标准库。(具体可以参考 http://sources.redhat.com/newlib)
- 设备驱动。这些设备驱动程序提供了常用设备的驱动。同时也是我们学习设备驱动程序开发的范例。
- HAL API。提供了一个一致的设备存取、中断处理以及ALARM等工具。
- 系统初始化。在main执行前完成相关的初始化任务。注意这里包含了BOOTLOAD以及程序重定位等工作。所以NIOS II开发中没有象ARM系统开发中涉及BOOTLOAD等问题。
- 设备初始化。在main前分配设备空间,并初始化设备。
HAL体系结构:
(图)
在NIOS II软件系统开发中,程序员划分为应用程序开发和设备驱动开发。
应用程序开发通过HAL与标准C完成设计,而设备驱动开发则为应用开发提供可用的HAL,他们直接面对的对象是硬件层。
HAL将设备分为不同的类别管理。类别包括:
1、Character-mode devices,定义为连续的收发数据的外围设备,如UART。其中提供HAL API的设备如下:
●UART core
●JTAG UART core
●LCD 16207 display controller
2、Timer devices,计数周期性脉冲,可以产生中断请求的外围设备。其中提供HAL API的设备如下:
●Timer core
3、File subsystems,访问设备中存储的文件。其中提供HAL API的设备如下:
●Altera host based file system
●Altera read-only zip file system
4、Ethernet devices,网络相关设备。其中提供HAL API的设备如下:
●Triple Speed Ethernet MegaCore® function
●LAN91C111 Ethernet MAC/PHY Controller
5、DMA devices,数据传输外围设备。其中提供HAL API的设备如下:
DMA controller core
Scatter-gather DMA controller core
6、Flash memory devices,非易失性存储器外围设备。其中提供HAL API的设备如下:
●Common flash interface compliant flash chips
●EPCS serial configuration device controller
Altera与第三方提供的设备还有很多,对于没有提供API接口的设备,可以通过对应头文件中的宏定义直接访问。无论是Altera还是第三方提供的设备驱动都必须包含头文件,定义设备与硬件的底层接口。这个文件是可以扩展的,可以增减功能。
延伸:程序的编译过程
工具:反汇编程序(使用HDasm工具简单介绍)
利用Nios EDS工具实际查看HAL相关文件,了解相关信息在哪里,编程使用时查看引用。