找回密码
 注册
关于网站域名变更的通知
查看: 307|回复: 1
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-15 10:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
Cyclone V开发板试用报告—— 简单的按键中断
( g/ j7 ]! Q5 D9 x

' }; N" `9 b& n9 P
这次的试用笔记相对比较简单,介绍一下如何搭建一个简单的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;
}

" Q5 `; _7 P0 z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-3 04:29 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表