您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 嵌入式技术概述_NIOSII处理器系统的软件设计流程和方法(二)
工程学院自动化及测控系嵌入式技术概述——基于HAL的NIOSII系统软件开发刘兰军工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/312硬件抽象层HAL概述1)什么是HAL,基于HAL进行系统软件设计的优点是什么?硬件抽象层HAL是轻量级的运行环境,提供了设备驱动程序接口,应用程序使用设备驱动程序接口访问底层硬件。优点:(1)HAL将应用程序与驱动程序区别开来,使底层硬件的改变对应用程序没有影响,保证了应用程序代码的可重用性;(2)应用程序、驱动程序开发是嵌入式系统软件开发的主要组成部分,对于应用程序开发人员,HAL提供了一套初始化和访问各类设备的函数,统一的API对系统硬件是透明的,开发人员不必关心底层硬件的差异;对于驱动程序开发人员,HAL提供了一套必要的驱动函数,驱动程序调用驱动函数来访问底层硬件,加快了驱动程序的开发。工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/313硬件抽象层HAL概述2)基于HAL开发NIOSII软件的特殊优点是什么?NIOSII处理器系统的HAL基于一个特定的SOPCBuilder系统创建,SOPCBuilder与NiosIIEDS之间的紧密集成保证了:(1)用户在创建应用工程时,NiosIIIDE也同时创建了HAL系统库,用户不必创建、复制、编辑HAL系统库,NiosIIIDE自动为用户管理和维护HAL库;(2)若SOPCBuilder的硬件系统发生了改动,NiosIIIDE会自动地对HAL系统库进行更新,保证了底层硬件与应用程序的一致性。工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/314硬件抽象层HAL概述3)NIOSII处理器系统的HAL的体系结构HAL提供的服务:1)提供newlibANSIC标准库2)提供设备驱动程序3)提供统一的HAL应用程序接口API4)提供系统初始化:main()函数执行之前,执行处理器和运行环境的初始化任务5)提供设备初始化:main()函数执行之前,例化和初始化系统中的各个设备工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/315硬件抽象层HAL概述3)NIOSII处理器系统的HAL的体系结构HAL系统库对设备提供的两个服务层次:通用设备模型和驱动程序、头文件和访问函数(1)通用设备模型和驱动程序:通用设备模型是HAL强大功能的核心,用户可采用统一的API编写程序访问提供通用设备模型的设备;HAL为大多数NIOSII系统外设提供驱动程序,使用户可以通过HALAPI访问硬件字符型设备:UART核、JTAGUART核、LCD16207显示控制器定时器设备:TIMER核文件子系统:基于ALTERA主机的文件系统、ALTERA压缩只读文件子系统以太网设备:Ethernet核、LAN91C111EthernetMAC/PHY控制器DMA设备:DMA控制器核、Scatter-gatherDMA控制器核FLASH存储设备:CFIFLASH接口、EPCS串口配置控制器工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/316硬件抽象层HAL概述3)NIOSII处理器系统的HAL的体系结构HAL系统库对设备提供的三个服务层次:通用设备模型、驱动程序、头文件和访问函数(2)头文件和访问函数:对于部分NIOSII系统外设和一些自定制外设,HAL只提供头文件和访问函数。NIOSII系统的通用IO核:PIO核用户自定制的外设此外,对于具有特殊硬件特性的外设,不能使用通用API,HAL提供了UNIX类型的ioctl()函数工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/317基于HAL的NIOSII系统应用程序开发1)NIOSIIIDE工程结构HAL系统库工程包含了所有的用户程序与系统硬件接口的必要信息HAL系统库工程紧密依赖于SOPCBuiler系统,保证了HAL与目标硬件的同步工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/318基于HAL的NIOSII系统应用程序开发2)系统描述文件system.hsystem.h文件提供了完整的NIOSII系统硬件的描述,包括:外设的硬件配置外设的基地址外设的中断请求优先级外设的符号名工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/319基于HAL的NIOSII系统应用程序开发2)系统描述文件system.h工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/3110基于HAL的NIOSII系统应用程序开发3)数据宽度和HAL类型定义对于嵌入式处理器,准确的数据宽度和精度定义是非常重要的,而标准C的数据类型宽度取决于编译器的约定。头文件alt_types.h定义了HAL类型工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/3111基于HAL的NIOSII系统应用程序开发4)文件系统HAL提供支持UNIX风格的文件访问机制,用户能够在基于HAL的文件系统中访问文件:(1)可以使用newlibC库中的文件I/O函数(2)可以使用HAL系统库提供的UNIX风格的文件I/O函数工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/3112基于HAL的NIOSII系统应用程序开发4)文件系统HAL提供支持UNIX风格的文件访问机制,用户能够在基于HAL的文件系统中访问文件:(3)HAL将一个子文件系统注册为HAL文件系统的一个挂载点(mountpoint);(4)HAL文件系统没有当前目录的概念,访问文件时必须使用绝对路径;(5)HAL文件系统允许通过UNIX风格的路径名管理字符型设备,HAL将字符型设备注册为HAL文件系统的节点。工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/3113基于HAL的NIOSII系统应用程序开发4)文件系统从只读zip文件子系统ozipfs读取字符:使用newlibC库中的文件I/O函数工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/3114基于HAL的NIOSII系统应用程序开发5)对字符型设备的访问(1)使用标准输入、标准输出和标准错误通道访问字符型设备用户可以通过在系统库属性设置中将标准输入、标准输出和标准错误通道与某一特定的字符型设备关联起来发送字符到标准输出stdout相关联的设备工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/3115基于HAL的NIOSII系统应用程序开发5)对字符型设备的访问(2)使用通用的访问文件的方式访问字符型设备写字符到UART1工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/3116基于HAL的NIOSII系统应用程序开发6)定时器设备的使用HALAPI提供了两种定时器设备的驱动程序:系统时钟驱动程序:支持报警功能,用于调度程序时间戳驱动程序:支持高精度时间测量使用定时器设备,系统硬件中必须包含定时器外设,某个定时器外设不能同时作为系统时钟和时间戳工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/3117基于HAL的NIOSII系统应用程序开发6)定时器设备的使用(1)系统时钟驱动程序用户通过在NIOSIIIDE的系统库属性中设置来指定系统时钟的定时器外设。针对系统时钟,HAL提供的标准UNIX函数包括:gettimeofday():获得当前时间settimeofday():设置当前时间times():获得已经发生的ticks数目alt_nticks():获得系统时钟的当前值(系统复位后经历的时间)alt_ticks_per_second():获得系统时钟的速率工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/3118基于HAL的NIOSII系统应用程序开发6)定时器设备的使用(1)系统时钟驱动程序基于系统时钟的报警注册:在指定的时刻执行某个函数可以通过调用alt_alarm_stop()取消一个报警。工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/3119基于HAL的NIOSII系统应用程序开发6)定时器设备的使用(2)时间戳驱动程序时间戳测量比系统时钟精度高的时间间隔,HAL只支持一个时间戳驱动程序,用户可以在NIOSIIIDE的系统库属性中指定时间戳设备的定时器外设。时间戳驱动程序相关的函数包括:alt_timestamp_start():启动时间戳计数器alt_timestamp():返回时间戳计数器的当前值alt_timestamp_start():alt_timestamp()之后的调用,复位计数器为0alt_timestamp_freq():获得时间戳计数器的速率(一般为系统主频)工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/3120基于HAL的NIOSII系统应用程序开发7)FLASH设备的使用HAL对FLASH设备的支持包括:(1)提供写FLASH的HALAPI:FLASH存储器的存储协议一般比较特殊(2)提供读FLASH的HALAPI:大多数FLASH的读操作可将FLASH看成简单的存储器,无需调用HALAPI,但访问具有特殊读数据协议的FLASH时(如EPCSFLASH),必须调用HALAPI。HALAPI提供两种层次的FLASH访问:简单的FLASH访问和精细的FLASH访问工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/3121基于HAL的NIOSII系统应用程序开发7)FLASH设备的使用简单FLASH访问:函数写缓冲数据到FLASH和从FLASH读数据都是以分区(block)的层次进行的,写FLASH时,若缓冲器比一个完整的分区小,函数会擦除整个分区。Alt_flash_open_dev():打开FLASH设备,获得FLASH设备的文件句柄alt_write_flash():写数据到FLASH设备(会先擦除一个分区,导致不期望的数据擦除)工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/3122基于HAL的NIOSII系统应用程序开发7)FLASH设备的使用简单FLASH访问:函数写缓冲数据到FLASH和从FLASH读数据都是以分区(block)的层次进行的,写FLASH时,若缓冲器比一个完整的分区小,函数会擦除整个分区。alt_read_flash():从FLASH设备读数据alt_flash_close_dev():关闭一个FLASH设备工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/3123基于HAL的NIOSII系统应用程序开发7)FLASH设备的使用精细FLASH访问:函数写缓冲数据到FLASH和从FLASH读数据都是以缓冲器的层次进行的,写FLASH时,若缓冲器比一个完整的分区小,函数保留之前存在于FLASH中的新写数据单元之上和之下的数据。精细FLASH访问是将写FLASH过程自动化了:从FLASH器件的本质来说,用户是不能清除一个分区的单独地址的,用户要改变一个分区内特定位置的内容而不改变分区内其他位置的内容,只能是先读出分区的整个内容到缓冲器中,在缓冲器中改变相应的内容,将整个分区擦除,最后将整个缓冲器内容写到FLASH的整个分区中。工程学院自动化及测控系OCEANUNIVERSITYOFCHINA2019/8/3124基于HAL的NIOSII系统应用程序开发7)FLASH设备的使用精细FLASH访问的相关函数:alt_get_flash_info():获
本文标题:嵌入式技术概述_NIOSII处理器系统的软件设计流程和方法(二)
链接地址:https://www.777doc.com/doc-650710 .html