3895|2

15

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

Cyclone V开发板试用报告三 简单的按键中断 [复制链接]

上周Altera推出了Quartus II 12.1版本的设计套件。我第一时间安装完成,新版软件SDIIPCyclone V的支持又上了一个台阶,Triple-Speed模式能使用了。28nm的器件库还没有完备,下一阶段估计还会通过SP来增加。
这次的试用笔记相对比较简单,介绍一下如何搭建一个简单的Qsys系统,并如何使用按键中断。做这么一个工作,是因为发现论坛里关注这次试用报告的人不多,我估计大多数路过的人都是FPGA新手,所以写这么一个入门的笔记。
Qsys作为SOPC Builder的升级,势必会取代SOPCBuilder,所以在新的设计中,建议采用Qsys
这次搭建的一个简单的片上系统,主要由以下几个模块构成:
1.      首先添加Clock Source,重命名为clk_in,选择已知时钟频率 50MHz.
2.      添加Nios II cpu,选择coreNiosII/e模式,别的先保留作为默认,改名为niosii.
3.      添加On-chip Memory,大小为102400 bytes,重命名为onchip_mem.
4.      添加jtag-uart,使用参数默认。
5.      添加PIO,位宽选择3,方向选择输入,选中同步捕捉,沿为下降沿,使能单比特置位。选中IRQ,类型为EDGE.
6.      导出刚刚添加的PIO的管脚,在Conduit Endpoint栏里输入pb.
7.      将onchip_memniosii的数据和指令总线相连,在niosii选项里设置reset地址。
8.      配置所有模块的时钟为clk_in.
9.      连接niosiidata master到别的模块,并连上IRQ.
10.  自动生成基地址和创建全局复位连接。
硬件编译下载后,需要编写中断处理软件。
#include
#include
#include
#include "system.h"
#include "sys/alt_irq.h"
// 定义全局变量以储存边沿捕获值
volatile int edge_capture;
void push_button_isr(void *context)
{
   /* Cast context to edge_capture's type. Itis important that this be
    * declared volatile toavoid unwanted compiler optimization. */
   volatile int* edge_capture_ptr = (volatile int*) context;
   /*在下面的语句中0x00代表是数据寄存器  0x01代表是方向寄存器  0x02代表是中断掩码器 0x03代表是边沿捕获寄存器*/
   /* Store the value in the Button's edgecapture register in *context. */
   *edge_capture_ptr = IORD(PUSH_BUTTON_BASE,3);
   /* 点亮相应的LED */
   IOWR(LED_BASE,0,std);
   /* 清除边沿捕获寄存器 */
   IOWR(PUSH_BUTTON_BASE,3,0x07);
}
void push_button_init()
{
   /* Recast the edge_capture pointer to matchthe alt_irq_register() function
    * prototype. */
   void* edge_capture_ptr = (void*) &edge_capture;
    /* Enableall 3 button interrupts. */
    IOWR(PUSH_BUTTON_BASE, 2, 0x07);
    /* Resetthe edge capture register. */
    IOWR(PUSH_BUTTON_BASE, 3, 0x07);
    /*Register the interrupt handler. */
   alt_ic_isr_register(PUSH_BUTTON_IRQ_INTERRUPT_CONTROLLER_ID,PUSH_BUTTON_IRQ, push_button_isr, edge_capture_ptr, NULL );
}
int main()
{
  printf("Hello fromNios II!\n");
  usleep(delay);
  push_button_init();
   while(1)
   {
   };
  return 0;
}
此帖出自FPGA/CPLD论坛

最新回复

我也关注!  详情 回复 发表于 2012-11-26 09:59
点赞 关注
 

回复
举报

755

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
不错不错,楼主什么时候开始折腾PCI-E接口呢?
此帖出自FPGA/CPLD论坛
 
 

回复

5979

帖子

8

TA的资源

版主

板凳
 
我也关注!
此帖出自FPGA/CPLD论坛
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表