NIOS软件框架
1.Eclipse软件工程结构
主要介绍上面两个:
- 应用程序开发,开发者创建的软件工程
- BSP
- system.h,连接QSYS硬件和软件的桥梁,包括所有QSYS系统中的IP信息,包括基地址、中断号等。
- HAL结构,硬件抽象层系统库是在应用程序和系统硬件之间的一个系统库,HAL应用程序接口(API)与ANSI C标准库综合在一起,可以使用类似C语言的库函数的方式访问硬件设备或文件。我们可以用这个系统库函数来和底层的硬件进行交互而无需关注底层细节。HAL可看做是一个支持应用程序开发的软件平台,提供了大量API函数接口,屏蔽硬件访问细节(不像HDL语言一样必须去描述复杂时序)虽然占用一些额外资源,但大大提升开发速度和可移植性。比如想要获取时间信息,需要在QSYS中调用Timer,在软件工程中获取时间戳信息时,只需要#include <sys/alt_timestamp.h>就可以调用API函数alt_timestamp_start()来开启时间戳服务,调用t1 = alt_timestamp()获取时间信息。
- BSP包括五部分:
- 集成C标准函数库,在Include文件中
-
提供访问QSYS系统中各个设备的驱动程序, 在drivers文件夹中,包含以下6类设备:
- 字符型设备,接收和发送字符串的外围硬件设备,如JTAG
- 文件子系统,提供访问存储在物理设备中的文件操作,如用户可以利用有关flash的HAL API来编写Flash文件子系统驱动来访问Flash
- DMA设备,执行大量数据在数据源和目的地之间传输的外围设备。数据源和目的地可以是存储设备,也可以是其他设备(以太网、usb)
- 定时器设备,对时钟脉冲计数并产生周期行中断请求的外围设备
- Flash设备,包括通用Flash接口芯片和主动串行配置器件EPCS控制器
- 以太网设备,对Altera提供的轻量级IP协议提供访问的以太网连接(包括LAN9111以太网MAC/PHY控制器,并且需要uC/OS-II的支持)
- HAL通用的API函数(库),在HAL文件夹中
- alt_sys_init.c,系统初始化函数,为main函数建立运行环境,包括BootLoader,设备初始化函数
2.HAL异常处理
- 中断异常处理过程:保护现场;查找中断源;调用相应中断服务子程序(用户编写);恢复现场;中断返回。
- 使用HAL API 函数编写中断服务程序分两步:
- 注册中断。alt_ic_isr_register(UART0_IRQ_INTERRUPT_CONTROLLER_ID(控制器ID),UART0_IRQ(中断优先级),uart0_cmd_isr(中断处理函数),(void *) &uart_context(可选指针指向特定组件的数据结构,可声明一个 char * p 但是不用它),0(保留项,为0))
- 编写中断服务函数 void uart0_cmd_isr(void* isr_context) //isr_context可为空。