




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五节 定制 Nios II Avalon用户外设,利用SOPC Builder的组件编辑器,可创建和编辑用户的Avalon外设。,一个Avalon外设(组件)的典型构成: 硬件描述文件(HDL模块) 软件文件(定义组件寄存器映像的C语言头文件以及相应的驱动程序) 组件描述文件(class.ptf):由组件编辑器自动生成,定义组件的结构,为SOPC Builder提供系统集成时所需要的信息。,例:设计一个Avalon从外设,实现PWM功能。,总体设计,计数值duty时,输出out为1; 计数值duty时,输出out为0。,Verilog HDL描述,Quartus II仿真验证,注意:实际计数
2、周期=count+1,占空比如何计算?,在SOPC Builder中添加用户IP,在已建立的SOPC设计中,添加用户IP。双击进入SOPC Builder,已建立的SOPC系统结构,由此进入用户逻辑编辑器,若需要,在此添加HAL有关文件。例如:寄存器映射头文件,驱动程序,demo例程等。,基于Avalon的用户逻辑(从设备)硬件结构,基于Avalon用户逻辑(从设备)的相关软件设计,请同学总结 开发Avalon用户从设备(用户IP)的基本步骤,参考1Nios II嵌入式软核SOPC设计原理及应用 P445,参考2SOPC嵌入式系统基础教程 P291,第六节 Nios II 软件开发,一、Nio
3、s II IDE为软件开发提供四个主要功能:,调试器,通过JTAG调试模块与目标硬件相连。,基本调试功能运行控制、调用堆栈查看、软件断点、反汇编代 码查看、调试信息查看、指令集仿真器。,高级调试功能硬件断点调试ROM或闪存中的代码、数据触发、 指令跟踪。,闪存编程器,烧写CFI接口的闪存器件,烧写主动串行配置器件EPCS,二、硬件抽象层(HAL)系统库,当用户在Nios II IDE中创建一个新的软件工程时,根据与之绑定的Nios II硬件系统(PTF文件),自动生成HAL库。,即:Nios II IDE和SOPC Builder紧密相关。 硬件配置变化PTF文件自动变化HAL库自动变化。,H
4、AL提供了相关设备的驱动程序,用户只要利用HAL提供的各种函数就可以编写应用程序。,HAL应用程序接口(API)与 ANSI C 标准库综合在一起,可使用printf()、fopen()、fwrite()等类似C语言的库函数来访问硬件设备。,HAL 系统库的结构,HAL系统库的服务 与标准的C函数库集成; 提供对每一个设备的驱动; 提供一致的、标准的应用程序接口; 系统初始化; 设备初始化。,_exit()open() close()opendir() closedir()read() fstat() readdir() getpid()rewinddir() gettimeofday()sd
5、rk() ioctl()settimeofday() isatty()stat() kill()usleep() lseek()wait() write(),用户程序访问硬件设备的方法:,(1)调用C标准库函数;,例如:printf()和fwrite(),(2)调用HAL的API函数;,(3)调用设备驱动程序;,(4)直接访问设备寄存器。,例如:write()、usleep(),例如:alt_avalon_uart_write(),例如:IOWR_ALTERA_AVALON_UART_RXDATA(base,data),HAL为嵌入式系统中最常见外围设备提供了通用的设备模型,它们具有相同的、与
6、硬件细节无关的应用编程接口(API)。,数据宽度及HAL类型定义,ANSI C的数据类型没有非常确切地定义数据宽度,取决于编译器的定义。,HAL使用alt_types.h头文件定义了一套支持ANSI C的数据类型。,HAL数据类型定义,对ANSI C数据类型的支持,HAL对系统启动的支持,启动系统上电复位后到运行main()函数之前,初始 化硬件,构建应用程序运行环境的过程。,Nios II的HAL系统库为用户提供了这段代码,如果用户采用链接器(Linker)的默认设置,则自动链入HAL提供的初始化函数,实现系统的启动和初始化过程。,启动文件位于“.alterakitsnios2compone
7、ntsaltera_nios2HALsrccrt0.s”,程序入口标号“_reset”,功能:,1. 初始化指令Cache,然后调用_start;,2. 初始化数据Cache,把异常向量表装入指令Cache;,3. 设置堆栈指针(SP)和全局指针(GP)寄存器;,4. 把全局变量和静态变量区(_bss_start_bss_end) 清零;,5. 如果没有bootloader,则把可读写数据(.rwdata)、 只读数据(.rodata)和异常向量表装入RAM中;,6. 调用 alt_main(),进一步初始化。,alt_main()对CPU和外设进行初始化,1. 若使用操作系统,调用alt_o
8、s_init()初始化OS;,2. 若使用OS,则初始化访问HAL文件系统的信号量;,3. 初始化中断控制器,开中断;,4. 调用Nios II IDE自动创建并管理的alt_sys_init() 初始化系统设备及软件模块;,5. 将标准输入/输出设备(stdin、stdout、stderr) 映射到输入/输出通道;,6. 使用the_do_ctors()函数调用C+的构造器;,7. 在系统关闭时调用C+解构器;,8. 调用main()函数;,9. 调用exit()函数,执行结束代码。,HAL与异常处理,当异常发生时,跳转到异常处理地址,处理器执行一段由HAL插入的代码。其中包括判断中断源和中
9、断优先级,然后跳转到用户的中断服务子程序(ISR)。,即:除了ISR外,保护现场、查找中断源、恢复现场、中断返回等工作均由HAL系统库代码替用户完成。,为方便用户创建和维护中断服务程序,HAL系统库的alt_irq.h提供中断API函数。,如何使用HAL API函数编写ISR?,第一步:参照下列函数原型编写ISR viod isr_name ( void*context, alt_u32 id ),函数名,全局变量指针,指向传递给ISR的信息。,在system.h中声明的硬件中断号,例如:UART_IRQ,第二步:调用下列API函数注册中断服务程序,int alt_irq_register (
10、alt_u32 id, void*context, void(*isr)(void*, alt_u32),指向ISR的函数指针,中断服务程序主要处理一些高优先级、实时性强的操作,所以,ISR中不能有等待或阻塞性操作。,1. 尽量保持ISR精简; 2. 无关紧要的事件应在ISR之外处理; 3. 尽量避免调用C库函数( 如:printf() ); 4. 尽量避免进行浮点操作; 5. 很多HAL API函数不能在ISR中调用。,ISR的调试,1. 在ISR中设断点。当中断发生时,处理器在断点处 停下,用户可单步调试ISR代码。但此时忽略了其 它硬件中断。,2. 使用sprintf()函数,把关键数据写到内存,然后 触发外部分析程序。,三、与目标系统相关的system.h文件,第一次编译Nio
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 畜禽疫病防控策略-全面剖析
- 游艺设备市场前景-全面剖析
- 电子阅读器软件生态构建研究-全面剖析
- 客户忠诚度模型构建-全面剖析
- 路堤施工施工方案
- 洗染行业供应链优化策略-全面剖析
- 电池寿命延长策略-全面剖析
- 港口客运信息化技术应用-全面剖析
- 大数据在金融风控中的应用-全面剖析
- 五千以内加减混合两步运算单元练习例题带答案
- 2025年境外投资融资顾问服务合同范本3篇
- 2024-2025学年人教新目标英语八年级下册期末综合检测卷(含答案)
- 331金属晶体课件高二化学人教版选择性必修2
- 矿山矿石采购合同模板
- 2024年浪潮数字企业技术有限公司社会招聘(105人)笔试核心备考题库及答案解析
- 第47届世界技能大赛江苏省选拔赛竞赛技术文件-混凝土建筑项目
- 国开2024年《数据库运维》形考1-3
- 劳动合同(模版)4篇
- 137案例黑色三分钟生死一瞬间事故案例文字版
- 药物研发监管的国际协调
- 生猪屠宰兽医卫生检验人员理论考试题及答案
评论
0/150
提交评论