课程

教学相长

认真教书,认真学习

第一章 概述
第二章 Nios II处理器体系结构
第三章 Avalon接口规范
第四章 SOPC软硬件开发平台
第五章 Nios II处理器常用外设
第六章 μC/OS II操作系统移植
第七章 Nios II系统深入设计
第八章 调试技术

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系统库提供了下列系统服务:

  1. 集成newlib。一个ANSI C标准库。(具体可以参考 http://sources.redhat.com/newlib
  2. 设备驱动。这些设备驱动程序提供了常用设备的驱动。同时也是我们学习设备驱动程序开发的范例。
  3. HAL API。提供了一个一致的设备存取、中断处理以及ALARM等工具。
  4. 系统初始化。在main执行前完成相关的初始化任务。注意这里包含了BOOTLOAD以及程序重定位等工作。所以NIOS II开发中没有象ARM系统开发中涉及BOOTLOAD等问题。
  5. 设备初始化。在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相关文件,了解相关信息在哪里,编程使用时查看引用。