第7章Nios-II-常用外设编程课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第7章Nios-II-常用外设编程课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Nios II 常用 外设 编程 课件
- 资源描述:
-
1、第7章 Nios II 常用外设编程本章介绍了本章介绍了Nios II处理器常用外围设备处理器常用外围设备(Peripherals)内核的特点、配置以及软件编程,供大家在使用这些外设内核的特点、配置以及软件编程,供大家在使用这些外设定制定制Nios II系统时查阅。这些外设都是以系统时查阅。这些外设都是以IP核的形式提供核的形式提供给用户的给用户的,用户可以根据实际需要把这些用户可以根据实际需要把这些IP核集成到核集成到Nios II系统中去。系统中去。主要介绍:主要介绍:硬件结构;硬件结构;内核的特性核接口;内核的特性核接口;SOPC Builder中各内核的配置选项;中各内核的配置选项;软
2、件编程。软件编程。主要内容主要内容7.1 并行输入/输出内核并行输入并行输入/输出内核输出内核(PIO内核内核)提供提供Avalon从控制器从控制器端口和通用端口和通用I/O口口间的存储器映射接口。间的存储器映射接口。PIO内核提供简内核提供简单的单的I/O访问用户逻辑或外部设备,例如:访问用户逻辑或外部设备,例如:控制控制LED 读取开关量读取开关量 控制显示设备控制显示设备 配置并且与片外设备通信配置并且与片外设备通信说明:说明:1.1.SOPC BuilderSOPC Builder中提供了中提供了PIOPIO内核,可以很容易将内核,可以很容易将PIOPIO内核集成到内核集成到SOPC
3、BuilderSOPC Builder生成的生成的系统中。系统中。2.2.通用通用I/OI/O端口既连接到片内逻辑又连接到外部设备的端口既连接到片内逻辑又连接到外部设备的FPGA I/OFPGA I/O管脚。管脚。7.1 并行输入/输出内核PIO内核简介内核简介最多最多32个个I/O端端口口CPU内核PIO内核内核寄存器Nios II 系统系统PIO内核Pio31Pio30Pio29Pio3Pio2Pio1Pio0Pio7Pio6Pio5Pio4Pio3Pio2Pio1Pio0PIO内核端口数端口数可设置可设置每个Avalon接口的PIO内核可提供32个I/O端口且端口数可设置,用户可以添加一
4、个或多个PIO内核。CPU通过I/O寄存器控制I/O端口的行为。I/O口可以配置为输入、输出和三态,还可以用来检测电平事件和边沿事件。CPU通过寄通过寄存器控制存器控制I/O端口行端口行为为PIO内核结构框图内核结构框图7.1 并行输入/输出内核PIO内核寄存器描述内核寄存器描述偏移量寄存器名称R/W(n-1)2100数据寄数据寄存器存器读访问R读入输入引脚上的逻辑电平值写访问W向PIO输出口写入新值1方向寄存器方向寄存器R/W控制每个I/O口的输入输出方向。0:输入;1:输出。2中断屏蔽寄存器中断屏蔽寄存器 R/W使能或禁止每个输入端口的IRQ。1:中断使能;0:禁止中断。3边沿捕获寄存器边
5、沿捕获寄存器 R/W 当边沿事件发生时对应位置1。注:注:该寄存器是否存在取决于硬件的配置。如果该寄存器不存在,那么读寄存器将返回未定义的值,该寄存器是否存在取决于硬件的配置。如果该寄存器不存在,那么读寄存器将返回未定义的值,写寄存器无效。写寄存器无效。写任意值到边沿捕获寄存器将清除所有位为写任意值到边沿捕获寄存器将清除所有位为0 0。“该寄存器是否存在取决于硬件的配置。如果该寄存器不存在,那么读寄存器将返回未定义的值,写寄存器无效。”CPU读读/写写PIO接口的映射寄存器控制接口的映射寄存器控制PIO的各个端口的各个端口四个寄存器四个寄存器:data、direction、interruptm
6、ask和和edgecapture7.1 并行输入/输出内核双击 PIO内核配置选项7.1 并行输入/输出内核 PIO内核配置选项Basic Settings 选项卡I/O口宽度口宽度:可设置为132的任何整数值。Direction中文描述Bidirectional(tri-state)ports双向(三态)端口Input ports only仅为输入端口Output ports only仅为输出端口Both input and output ports输入和输出端口7.1 并行输入/输出内核 PIO内核配置选项Basic Settings 选项卡Direction中文描述Bidirection
7、al(tri-state)ports双向(三态)端口Input ports only仅为输入端口Output ports only仅为输出端口Both input and output ports输入和输出端口7.1 并行输入/输出内核 PIO内核配置选项Input Options 选项卡边沿捕获寄存器中断寄存器Rising Edge:上升沿:上升沿Falling Edge:下降沿:下降沿Either Edge:上升或下降沿上升或下降沿Level:输入为高电平且中断使能,:输入为高电平且中断使能,则则PIO内核产生一个内核产生一个IRQ。Edge:边沿捕获寄存器相应位为:边沿捕获寄存器相应位为
8、1且且中断使能,则中断使能,则PIO内核产生一内核产生一个个IRQ。说明:当指定类型的边沿在输入端口出现时,边沿捕获寄存器对应位置1。说明:中断只有高电平中断,如果希望低电平时中断,则需在该I/O输入引脚前加一个“非”门。7.1 并行输入/输出内核 PIO内核配置选项Simulation 选项卡当需要对外进行仿真时,当需要对外进行仿真时,要设置要设置simulation选项选项卡。卡。7.1 并行输入/输出内核软件编程软件编程PIO内核提供了对硬件进行寄存器级访问的文件。Altera_avalon_pio_regs.h该文件定义了内核的寄存器映射并提供硬件设备访问宏定义。可通过阅读上述文件以熟
9、悉PIO设备的软件访问方法,但不应该修改文件。3.3.软件编程软件编程PIO内核不是内核不是HAL支持的通用设备模型,不能通过支持的通用设备模型,不能通过HAL API或或ANSI C 标准库来访问标准库来访问 Altera提供了提供了PIO的寄存器头文件的寄存器头文件altera_avalon_pio_regs.h。文件定义其寄存器映射,文件定义其寄存器映射,提供了对底层硬件的符号化访问方法提供了对底层硬件的符号化访问方法。PIO 内核的设备信息在内核的设备信息在system.h 中中实验实验3 3 实验目的:熟悉实验目的:熟悉NiosII PIO设备的访问方法设备的访问方法#include
10、 system.h#include altera_avalon_pio_regs.h#include alt_types.h“int main(void)_attribute_(weak,alias(alt_main);int alt_main(void)alt_u8 led=0 x2;alt_u8 dir=0;volatile int i;while(1)if(led&0 x81)/led为边缘情况为边缘情况1或或8的时候,改方向的时候,改方向 dir=(dir 0 x1);if(dir)led=led 1;else led=led 1;IOWR_ALTERA_AVALON_PIO_DATA
11、(LED_PIO_BASE,led);/led值值写入写入PIO i=0;while(i200000)i+;/延时延时 return 0;此处:定义此处:定义main的的别名为别名为alt_main#include system.h“#define LED_PIO_NAME/dev/led_pio#define LED_PIO_BASE 0 x06424110 .#include altera_avalon_pio_regs.h“#define IORD_ALTERA_AVALON_PIO_DATA(base)IORD(base,0)#define IOWR_ALTERA_AVALON_PIO
12、_DATA(base,data)IOWR(base,0,data)#include alt_types.h“typedef signed char alt_8;.例:红色发放二极管LEDR在LEDR上输出显示data数据的C/C+语句格式为:IOWR _ALTERA_AVALON_PIO_DATA(LED_RED_BASE,data)或者:或者:7.1 并行输入/输出内核IOWR_ALTERA_AVALON_PIO_DATA(0 x00B81090,data)IOWR(LED_RED_BASE,0,data)IOWR(0 x00B81090,0,data)例:例:编写编写 C/C+程序,让程序
13、,让DE2开发板上的开发板上的18只红色发光二极只红色发光二极管管LEDR17LEDR0依次向左移位发光。依次向左移位发光。#include“count_binary.h”int alt_main(void)int i,data;data=0 x01;for(i=0;i18;i+)IOWR(LEDR_BASE,0,data);data=1;usleep(100000);2)电平开关)电平开关SW 有有18只电平开关只电平开关SW17SW0,在硬件设备命名为,在硬件设备命名为SWITCH_PIO,电,电平开关的定义在平开关的定义在system.h头文件中。头文件中。电平开关的编程电平开关的编程
14、用变量用变量key读取电平开关读取电平开关SW上的数据的上的数据的C/C+语句格式为语句格式为:key=IORD_ALTERA_AVALON_PIO_DATA(SWITCH_PIO_BASE)或:或:key=IORD(SWITCH_PIO_BASE,0);例:例:编写编写 C/C+程序,用变量程序,用变量key读取读取DE2开发板上的开发板上的18只电只电平开关上的数据,并用七段数码管显示读出的数据。平开关上的数据,并用七段数码管显示读出的数据。#include“count_binary.h”int alt_main(void)int key;key=IORD(SWITCH_PIO_BASE,
15、0);IOWR(SEG7_DISPLAY_BASE,0,key);3)按钮按钮BUTTON 有有4只按钮只按钮KEY3KEY0,在硬件设备命名为,在硬件设备命名为BUTTON_PIO,按钮,按钮BUTTON的定义在的定义在system.h头文件中。头文件中。按钮按钮BUTTON的编程的编程 用变量用变量key读取按钮读取按钮BUTTON上的数据的上的数据的C/C+语句格式为:语句格式为:key=IORD_ALTERA_AVALON_PIO_DATA(BUTTON_PIO_BASE)或:或:key=IORD(BUTTON_PIO_BASE,0);异常处理异常处理v异常异常是指程序离开正常流程的一
16、种控制上的切换。是指程序离开正常流程的一种控制上的切换。v异常可能由需要立即响应的处理器内部或者外部设备异常可能由需要立即响应的处理器内部或者外部设备的某一事件引起。的某一事件引起。v异常处理异常处理指响应异常所进行的处理,并且返回到异常指响应异常所进行的处理,并且返回到异常产生之前程序执行的状态。产生之前程序执行的状态。异常不是异常不是bug!bug!v 学习学习重点重点:处理硬件中断请求处理硬件中断请求 使用使用HAL注册用户定义的中断服务程序(注册用户定义的中断服务程序(Interrupt Service RoutineISR)来处理硬件中断请求。)来处理硬件中断请求。v Nios II
17、处理器异常分类如下:处理器异常分类如下:n 硬件中断硬件中断n 软件陷阱软件陷阱n 未实现的指令未实现的指令n 其他异常其他异常v 所有的异常所有的异常(硬件和软件)由位于异常地址硬件和软件)由位于异常地址(exception address)的异常程序来处理。的异常程序来处理。v 异常地址在系统创建时指定,软件编程人员不用直接访问异常处异常地址在系统创建时指定,软件编程人员不用直接访问异常处 理地址,编写程序也不需要知道该地址。理地址,编写程序也不需要知道该地址。1.硬件中断硬件中断v NIOS处理器支持处理器支持32个外部中断源,中断号越小,优先级越高个外部中断源,中断号越小,优先级越高v
18、 处理硬件中断的流程处理硬件中断的流程n 来自外设的请求硬件中断的信号(来自外设的请求硬件中断的信号(interrupt request)n 保存保存Nios II处理器寄存器(处理器寄存器(context switch)n 禁止硬件中断禁止硬件中断n 将控制权交到将控制权交到Nios II处理器异常地址处理器异常地址(exception handler)n 跳转到异常处理地址后执行跳转到异常处理地址后执行异常处理程序异常处理程序,处理器开始执行,处理器开始执行一段一段HAL系统代码,判断中断源和中断优先级,然后再转跳到系统代码,判断中断源和中断优先级,然后再转跳到相应的用户的相应的用户的中断
19、服务程序(中断服务程序(ISR)中。即发生异常后,异常处中。即发生异常后,异常处理除理除ISR外的所有工作都由外的所有工作都由HAL系统库代码自动完成。系统库代码自动完成。【context】:语境:语境使用HAL开发应用程序 nHAL与异常处理异常处理过程和中断服务程序异常处理过程和中断服务程序(1)中断服务程序的编写和注册方法)中断服务程序的编写和注册方法 n HAL的的ISR APIv Nios II IDE创建系统库工程时,包含了所有需要的创建系统库工程时,包含了所有需要的ISR。用户不必去写用户不必去写HAL ISR,除非用户要和定制的外设通信。,除非用户要和定制的外设通信。v HAL
20、 API定义了很多函数管理硬件中断,如:定义了很多函数管理硬件中断,如:alt_irq_register()alt_irq_disable()alt_irq_enable()v 用用HAL API编写用户的编写用户的ISR,步骤:,步骤:1.编写特定设备中断的编写特定设备中断的ISR。2.调用调用alt_irq_register()函数来注册函数来注册ISR。n 编写用户的编写用户的ISR v 用户编写的用户编写的ISR必须符合必须符合alt_irq_register()函数的原型函数的原型v 注意:编写的注意:编写的ISR中不能使用中不能使用ANSI C标准库中标准库中I/O有关操作,有关操
21、作,不要调用不要调用printf(),可能使系统死锁,可能使系统死锁第一个参数:中断上下文指针第一个参数:中断上下文指针(向向ISR传递语境信息的指针传递语境信息的指针)第二个参数:中断号第二个参数:中断号,在在system.h中声明,例如:中声明,例如:PIO_IRQvoid isr_name(void*context,alt_u32 id)n 注册用户的注册用户的ISR,向,向HAL层传递中断服务程序信息层传递中断服务程序信息v注意:使用该函数需包含注意:使用该函数需包含”sys/alt_irq.h”头文件头文件第一个参数为中断号第一个参数为中断号;(alt_u32在在alt_types.
22、h定义为定义为unsigned long)第二个参数为中断上下文指针;第二个参数为中断上下文指针;第三个参数是中断服务函数的指针。(可直接用函数名字)第三个参数是中断服务函数的指针。(可直接用函数名字)v中断发生时,系统中断发生时,系统回调用户注册的中断服务程序回调用户注册的中断服务程序,传入的,传入的第一个参数即为用户调用第一个参数即为用户调用alt_irq_register时传入的中断上下时传入的中断上下文指针参数;传入的第二个参数为本中断的中断号。文指针参数;传入的第二个参数为本中断的中断号。alt_irq_register(alt_u32 id,void*context,void(*i
23、sr)(void*,alt_u32)n Button PIO以以中断中断的形式与应用程序的形式与应用程序 通信,设备的初始化程序比较特殊,也是整个软件设计的难点通信,设备的初始化程序比较特殊,也是整个软件设计的难点(2)举例)举例中断编程中断编程(实验实验5 PIO外部中断实验外部中断实验)static void handle_button_interrupts(void*context,alt_u32 id)/*清中断捕获寄存器清中断捕获寄存器*/IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0);/*通知外部有中断事件发生通知外部有中断事件
24、发生*/done+;n 编写用户的编写用户的ISR 采用中断方式时还需要对按钮进行开放中断、复位边沿捕获寄存器和登记中采用中断方式时还需要对按钮进行开放中断、复位边沿捕获寄存器和登记中断源的初始化处理。按钮初始化过程语句如下:断源的初始化处理。按钮初始化过程语句如下:static void init_button_pio()void*edge_capture_ptr=(void*)&edge_capture;/*开放全部开放全部4个按钮的中断个按钮的中断*/IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE,0 xf);/*复位边沿捕获寄存器复位边沿
25、捕获寄存器*/IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0 x0);/*登记中断源登记中断源*/alt_irq_register(BUTTON_PIO_IRQ,edge_capture_ptr,handle_button_interrupts);n 注册用户的注册用户的ISR(初始化)初始化)n提高处理性能的措施(1)从软件上改善处理性能从软件上改善处理性能1.1.把无关紧要的以及影响中断执行性能的事情放在中断服务程序之外处理把无关紧要的以及影响中断执行性能的事情放在中断服务程序之外处理,尽量使中断服务程序精简;,尽量使中断服务程序精简;2
展开阅读全文