PIO外部中断实验报告_第1页
PIO外部中断实验报告_第2页
PIO外部中断实验报告_第3页
PIO外部中断实验报告_第4页
PIO外部中断实验报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、“SOPC技术综合设计实践”实验报告实验题号 : 实验五项目名称 :PIO外部中断实验系班 : 计科师范系11(1)学号 : 姓名 : 实验日期 : 2014年4月2日指导老师 :一、 实验目的(1)熟悉中断服务程序的编写和注册方法。(2)熟悉程序的调试方法,重点熟悉中断服务程序的调试方法。(3)熟悉NiosII处理外部中断的方法。二、实验内容1.外部中断信号由按键提供,然后将中断事件反映到对应的LED。2.利用边沿捕获寄存器读取按键值,编写中断服务程序将读到的键值输出到LED。即:按键F1按下,对应的LED0点亮。三、实验原理当跳转到异常处理地址后,处理器开始执行一段由HAL插入的代码,判断

2、中断源和中断优先级,然后再转跳到用户的中断服务子程序(ISR)中。即发生异常后,异常处理除ISR外的所有工作都由HAL系统库代码替换用户完成。为了将中断服务子程序的信息告知HAL,用户需要完成ISR的登记工作。向HAL登记ISR的工作可以分为以下两步:(1)编写void isr_name(void *context,alt_u32 id)函数(2)调用alt_irq_register(alt_u32 id,void *context,void(*isr)(void*,alt_u32)函数,向HAL登记ISR。四、SOPC的整个设计流程(附:截取主要的设计图)1. 基于实验3硬件系统(注意:将b

3、utton_pio改为8位, input),修改后,重新generate。2.进行引脚绑定设计端口芯片引脚开发平台模块设计端口芯片引脚开发平台模块clk_inPIN_B13时钟button_pio0PIN_Y11F1led_pio0PIN_AC10LED0button_pio1PIN_AA10F2led_pio1PIN_W11LED1button_pio2PIN_AB10F3led_pio2PIN_W12LED2button_pio3PIN_AE6F4led_pio7PIN_AA11LED3button_pio4PIN_V22F5led_pio3PIN_AE8LED4button_pio5PI

4、N_AF23F6led_pio4PIN_AF8LED5button_pio6PIN_AE23F7led_pio5PIN_AE7LED6button_pio7PIN_AC22F8led_pio6PIN_AF7LED73.编译后,下载.SOF文件4.在IDE平台上,新建一个.C文件,写入程序#include <stdio.h>#include "system.h"#include "altera_avalon_pio_regs.h"#include "alt_types.h"#include "sys/alt_irq

5、.h"#include "priv/alt_busy_sleep.h"#define LEDCON 0xff / #define KEYCON 0xff / alt_u32 done = 0; / 信号量:通知外部中断事件发生/* 功 能:键按下事件中断服务子程序,当键按下时,通过done标志* 告知外界*/static void KeyDown_interrupts(void* context, alt_u32 id) /* 清中断捕获寄存器 */ IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE, 0); /* 通

6、知外部有中断事件发生 */ done+;/* 功 能:初始化LED_PIO为输出,KEY为输入,开中断,清边沿捕获寄存器*/void InitPIO(void) /* 初始化LED_PIO为输出,KEY为输入 */ IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_BASE, LEDCON); IOWR_ALTERA_AVALON_PIO_DIRECTION(BUTTON_PIO_BASE, 0x00); IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE, 0xff);/* 开KEY的中断 */ /*请同学们自己完成*/ I

7、OWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE, 0x00); /* 清边沿捕获寄存器 */ alt_irq_register(BUTTON_PIO_IRQ,NULL,KeyDown_interrupts); /* 注册中断服务子程序 */ /*请同学们自己完成*/* 功 能:等待按键中断,并输出控制相应的LED。*/int main(void) volatile alt_u32 key_state,old_state,new_state;old_state = 0xff;/* 将old_state值写入LED_PIO, 初始化LED全亮*/ /*

8、请同学们自己完成*/IOWR(PIO_BASE,0,old_state); InitPIO(); while(1) if(0 != done) /* 中断事件数量减1 */ done-; alt_busy_sleep(5000); /延时5ms key_state = IORD_ALTERA_AVALON_PIO_DATA(BUTTON_PIO_BASE)&KEYCON; if(key_state = 0xff) /如果是由短暂脉冲引起的中断则忽略 continue; new_state = (old_state key_state); / 按键按下时对应的LED取反 old_stat

9、e = new_state; / 保存LED的状态 IOWR(PIO_BASE,0,new_state); /* 将new_state值写入LED_PIO */ /*请同学们自己完成*/ return(0);5. 生成工程后,RUN后出现结果。实验二1.硬件系统不变,在IDE平台上,新建一个.C文件,写入程序2. 生成工程后,RUN后出现结果。五、实验结果第一个实验成功发现按下对应的开关时对应个数的灯亮。第二个实验不同按键可以点亮不同的灯。六思考题:1. 什么是HAL?HAL,即Hardware Abstraction Layer,硬件抽象层。位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。2. 简述HAL中断服务程序的编写和注册方法;编写ISR函数void isr(void*context,alt_u32id)即中断上下文指针及中断号。注册函数int alt_irq_register(alt_u32id ,void*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论