hal简介与开发应用程序

上传人:xzh****18 文档编号:53528319 上传时间:2018-09-02 格式:PPT 页数:25 大小:1.08MB
返回 下载 相关 举报
hal简介与开发应用程序_第1页
第1页 / 共25页
hal简介与开发应用程序_第2页
第2页 / 共25页
hal简介与开发应用程序_第3页
第3页 / 共25页
hal简介与开发应用程序_第4页
第4页 / 共25页
hal简介与开发应用程序_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《hal简介与开发应用程序》由会员分享,可在线阅读,更多相关《hal简介与开发应用程序(25页珍藏版)》请在金锄头文库上搜索。

1、HAL简介与开发应用程序,HAL简介与开发应用程序,6.1 硬件抽象层(HAL) 介绍6.2 使用HAL开发应用程序,6.1 硬件抽象层(HAL) 介绍,1、什么是HAL: 硬件抽象层,HAL提供了一个非线程的、类似UNIX的C/C+运行环境,HAL系统库为嵌入式系统中的外围设备提供接口程序,HAL应用程序接口(API)和ANSI C标准库综合在一起,使用户用类似C语言的库函数来访问硬件设备或文件,如printf(),2、HAL的生成:,NiosIDE 自动创建和管理HAL文件。它是用户在NiosIDE中创建一个新的工程时由IDE基于用户在SOPC Builder中创建的Nios处理器系统(P

2、TF文件)自动生成并且管理HAL文件,HAL和SOPC Builder紧密相关,如果硬件配置有了变化,HAL设备驱动配置也会自动随之改动,从而避免了由于底层硬件的变化而产生的程序错误。,3、HAL提供的服务:,同newlib ANSI C标准库集成提供用户熟悉的C标准库函数,驱动程序提供对系统中每个设备的访问,HAL API提供统一的标准的接口程序(如设备访问,中断处理),系统初始化在main函数执行之前,执行处理器和运行环境的初始化的任务,设备初始化在main()函数执行前,例化和初始化系统中的每个设备,4、HAL的结构:,每个设备驱动管理一个硬件设备。HAL为SOPC Builder的每一

3、个需要驱动程序的设备实例化一个驱动程序。在Nios II 开发环境中,一个设备驱动和一个特定的SOPC Builder设备相关联,Nios II HAL 的结构,5、HAL支持的通用设备模型HAL强大功 能的核心,(UART)串行发送和/或 接收字符的硬件外设,(只读文档系统)提供访问存储在 物理设备中的文件的一种机制, 其驱动程序可以直接访问底层 的设备,或使用一个单独的设备 驱动程序,(DMA控制器核)执行大 批量数据传输的外设,(定时器核)对时钟脉冲计数,并且能够产生周期性的中断请求外设,(通用Flash接口芯片等) 使用特殊的编程协议进行 存储数据的非易失存储设备,(以太网MAC控制器

4、) 对网络协议栈(TCP/IP协 议栈)提供以太网连接的访问,我们用HAL做什么?,通信桥梁SOPC BUILDER,NIOS II IDE,自动更新,HAL简介与开发应用程序,6.1 硬件抽象层(HAL)系统介绍6.2 使用HAL开发应用程序,6.2使用HAL开发应用程序,嵌入式系统的软件开发可分为2部分:,应用程序开发:,用户软件开发的主要部分,包括系统的主程序main()和其它子程序。,驱动程序:,直接和底层硬件的宏定义打交道。,6.2 使用HAL开发应用程序,Nios II IDE 工程结构,Nios II IDE工程结构,6.2 使用HAL开发应用程序,Nios II IDE 工程结

5、构,一个Nios II IDE工程,用户工程文件夹,HAL系统库文件夹,6.2 使用HAL开发应用程序,与目标系统相关的system.h系统描述文件,System.h文件构成过程,一部分描述系统库的设置信息;,另一部分给出了每个外围设备的相信信息;,6.2 使用HAL开发应用程序,与目标系统相关的system.h系统描述文件,程序清单6.1 system.h描述的UART设备,#define UART_NAME “/dev/uart“ /UART的设备名称及所在路径,open()等文件操作函数可以通/过UART_NAME开打一个UART设备 #define UART_TYPE “altera_

6、avalon_uart“ /描述了UART内核的类型,应用程序员可不关心 #define UART_BASE 0x00441480 /UART设备的寄存器基地址,驱动程序可以根据该地址对/UART寄存器进行访问 #define UART_IRQ 1 / UART设备的中断号,系统据此判别中断来自UART设备 #define UART_BAUD 115200 / 在系统生成过程中预设的串口波特率 #define UART_DATA_BITS 8 / 描述UART数据帧长度 #define UART_FIXED_BAUD 0 /波特率是否软件可变的标志 #define UART_PARITY N

7、/ 是否能奇偶校验 #define UART_STOP_BITS 1 / UART数据包中停止位的宽度 #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 / Avalon总线的频率,48MHz,6.2 使用HAL开发应用程序,数据宽度及

8、HAL类型定义 include“alt_types.h“,表6.1 HAL数据类型定义,表6.2 Altera提供的GNU编译器下的 ANSI C数据类型宽度,6.2 使用HAL开发应用程序,HAL对系统启动的支持 P221 启动代码用于系统上电复位后到运行main()函数前,初始化硬件,构建应用程序运行时环境的过程。 上电或复位后的程序入口标号是“_reset”,程序先对CPU进行初始化: 初始化指令Cache,然后调用_start; 初始化数据Cache,把异常向量表装入指令Cache; 设置堆栈指针(Stack Pointer)和全局指针(Global Pointer)寄存器; 把全局变

9、量和静态变量区(_bss_start _bss_end)清零; 如果没有bootloader,则把可读写数据(.rwdata),只读数据(.rodata)和异常向量表装入RAM中; 调用alt_main()。,6.2 使用HAL开发应用程序,HAL对系统启动的支持 HAL提供默认执行的alt_main()对CPU及外设进行初始化: 调用ALT_OS_INIT()初始化OS:默认情况下完成对uC/OS-II的初始化,如果系统不使用操作系统,则这步不执行。 如果使用操作系统,则初始化访问HAL提供的文件系统的信号量(alt_fd_list_lock)。 初始化中断控制器,开中断。 调用alt_sy

10、s_init()初始化系统设备及软件模块,NiosII IDE自动创建管理alt_sys_init.c。 把标准输入输出设备(stdin, stdout, stderr)映射到输入输出通道(I/O channel)上去; 调用C+的构造器,使用the _do_ctors()函数。 登记C+的解构器; 调用main()函数。,6.2 使用HAL开发应用程序,HAL与异常处理 当跳转到异常处理地址后,处理器开始执行一段由HAL插入的代码,判断中断源和中断优先级,然后再跳转到用户的中断服务子程序(ISR),异常处理过程和中断服务程序,6.2 使用HAL开发应用程序,HAL与异常处理 当异常发生后,处

11、理器会依次完成以下工作: 把status寄存器内容复制到estatus寄存器中,保存当前处理器状态,如果是硬件中断,estatus寄存器中的EPIE位置1; 清除status寄存器的U位为0,强制处理器进入超级用户状态; 清除status寄存器的PIE位为0,禁止所有的硬件中断; 把异常返回地址写入ea寄存器(r29); 跳转到异常处理地址。,6.2 使用HAL开发应用程序,HAL与异常处理 为了方便创建和维护中断服务程序,HAL系统库提供了中断API函数如下所示:,int alt_irq_register(alt_u32 id,void* context, void (*isr)(void*

12、, alt_u32) /注册中断服务程序 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()返回值作为输入参数 alt_u32 alt_irq_interruptible(alt_u32 priority

13、) /允许嵌套 void alt_irq_non_interruptible (alt_u32 mask) /禁止嵌套 int alt_irq_enabled (void) /检测中断的状态,如果有中断使能返回非0,6.2 使用HAL开发应用程序,提高处理性能的措施 (1)从软件上改善处理性能 把无关紧要的以及影响中断执行性能的事情放在中断服务程序之外处理,尽量使中断服务程序精简; 把传送大量数据之类的事情交给DMA来完成; 如果使用DMA传输大量数据,可以加大缓冲区以减少中断次数,从而提高中断性能。 DMA传输大量数据应用中,采用双缓冲区; 在允许的情况下,一直保持中断使能。 使用快速的存储空间来存储关键代码; 使用中断嵌套 将应用程序工程和系统库工程都设置为高的编译优化等级。,6.2 使用HAL开发应用程序,提高处理性能的措施 (1)从硬件上改善处理性能 添加或加大快速存储器来存储关键代码或作为数据缓存。 添加DMA控制器,这要与软件改善中的第3.4步同时执行。 使用性能更好的Nios II处理器,如Nios II/f。 根据系统实际的中断优先级来合理分配SOPC Builder系统中的中断号,注意IRQ0为最高优先级。,谢谢大家!,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 多媒体应用

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号