打印

Cyclone V开发板试用报告三 简单的按键中断

[复制链接]
2313|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qingniao966|  楼主 | 2012-11-26 15:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上周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 <stdio.h>
#include <io.h>
#include <unistd.h>
#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;
}

相关帖子

沙发
qingniao966|  楼主 | 2012-11-26 15:38 | 只看该作者
猴哥别生气。

使用特权

评论回复
板凳
GoldSunMonkey| | 2012-11-26 20:13 | 只看该作者
猴哥别生气。
qingniao966 发表于 2012-11-26 15:38
我恨你,但是我没办法阻止你。

使用特权

评论回复
地板
GoldSunMonkey| | 2012-11-26 20:13 | 只看该作者
;P

使用特权

评论回复
5
gtekled| | 2012-11-27 16:31 | 只看该作者
来学习下!

使用特权

评论回复
6
GoldSunMonkey| | 2012-11-27 18:08 | 只看该作者
来学习下!
gtekled 发表于 2012-11-27 16:31
快学XILINX 啊

使用特权

评论回复
7
王紫豪| | 2012-11-28 18:03 | 只看该作者
人类已经无法阻止楼主的脚步了

使用特权

评论回复
8
Tianya283| | 2012-11-28 20:53 | 只看该作者
人类已经无法阻止楼主的脚步了
王紫豪 发表于 2012-11-28 18:03
你又来气猴哥

使用特权

评论回复
9
GoldSunMonkey| | 2012-11-28 21:13 | 只看该作者
人类已经无法阻止楼主的脚步了
王紫豪 发表于 2012-11-28 18:03
天天气我啊。

使用特权

评论回复
10
王紫豪| | 2012-11-28 23:27 | 只看该作者
天天气我啊。
GoldSunMonkey 发表于 2012-11-28 21:13

来,啵一个~~

使用特权

评论回复
11
LMQQ| | 2012-11-29 20:06 | 只看该作者
谢谢啦。

使用特权

评论回复
12
LMQQ| | 2012-11-29 20:06 | 只看该作者
来,啵一个~~
王紫豪 发表于 2012-11-28 23:27
猴哥,很幸福

使用特权

评论回复
13
GoldSunMonkey| | 2012-11-29 20:19 | 只看该作者
来,啵一个~~
王紫豪 发表于 2012-11-28 23:27
我太幸福了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

143

帖子

0

粉丝