按键
LED控制
开发板 小梅哥AC620
软件 quartus 13.1

2个按键,当按键0按下时,LED灯开始闪烁;当按键1按下时,LED灯停止闪烁。
使用一个PIO 这个PIO设置为6位(4个LED+2个按键)
PIO设置为bidir型 位宽为6位
能够捕获边沿下降沿
能够产生中断、边沿中断
要求使能单独位的设置和清零
使能边沿捕获寄存器的单独位清零

顶层代码PL部分

module nios_pio_led(clk,rst_n,key,key_gnd,led
);input clk;input rst_n;output key_gnd;inout [1:0]key;inout [3:0]led;assign key_gnd = 0;mysystem u0 (.clk_clk        (clk),       //     clk.clk.reset_reset_n  (rst_n),   //   reset.reset_n.pio_led_export ({key,led})       // pio_led.export);endmodule

PS部分

#include "stdio.h"
#include "system.h"
#include "alt_types.h"
#include "altera_avalon_pio_regs.h"
#include "sys/alt_irq.h"alt_u8 led_enable=0;
alt_u32 i,data;alt_isr_func isr(void)//中断服务函数
{IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LED_BASE, 0x00);   //关闭按键中断data=IORD_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LED_BASE);if(data&0x20)  //这样写的原因是无法确定低4位的值led_enable=0;else if(data&0x10)  //停止按键按下led_enable=1;else{led_enable=0;}IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LED_BASE,0X30);//清除边缘捕获寄存器IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LED_BASE,0X30);//开中断return 0;
}
int main(void)
{char *p;IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_LED_BASE, 0x0f);  //设置低4位为输出,高2位为输入alt_ic_isr_register( PIO_LED_IRQ_INTERRUPT_CONTROLLER_ID,  PIO_LED_IRQ,  isr, p, 0);//注册中断函数IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_LED_BASE, 0x30);    //清零所有的捕获位IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LED_BASE, 0x30);  //打开按键中断while(1){if(led_enable==1){while(i<=500000){i++;}IOWR_ALTERA_AVALON_PIO_CLEAR_BITS(PIO_LED_BASE,0x8);//低电平,LED4小灯点亮,i=0;while(i<=500000){i++;}i=0;IOWR_ALTERA_AVALON_PIO_SET_BITS(PIO_LED_BASE,0x8);//第3位置位,高电平,LED4小灯熄灭}else if(led_enable==0){IOWR_ALTERA_AVALON_PIO_SET_BITS(PIO_LED_BASE,0xF);//第3位置位,高电平,LED4小灯熄灭}}return 0;
}

实验效果

  • 矩阵键盘说明


矩阵键盘有两组,共有8跟信号线,其中COL每一列的四个按键的一端连接起来,而ROW则将每一行的4个按键的一端连接起来,通过4行4列的8根信号线,总共能够管理16个按键。用4个IO得到了16个按键。

可看出,我们把COL0接地,按键按下为0,不按为1.(后续再继续学习如何学习电路原理图)

中断的头文件,在sys路径下面

划线定义i,要注意了,我们下面是500000,大于了u8类型,所以这也是个坑,一定要注意自己定义的数是否够用。


定义方向,这也很是个坑,我原先就没有找出是什么原因导致错误,后来弄了半天才想到,inout的方向没有设置,默认是输出的。
然后注册中断函数,每一个元素前面,不用再次声明数据类型

这里消耗时间是while,不是if判断,if是并行的选择,不是顺序

以上分别是全速运行、step into step over step return
并且可以看到变量
还可以设置断点。
另外如果出错,记得,在run configure 里面重新refresh 一下blaster

SOPC第四课 按键中断相关推荐

  1. esp32外部中断_玩转 ESP32 + Arduino (四) 电容按键 霍尔传感器 外部中断 延时 脉冲检测...

    一. 电容输入 touchRead(pin) 及电容输入中断touchAttachInterrupt(pin, TSR , threshold) ESP32专门提供了电容触摸传感器的功能, 共有T0, ...

  2. 字符设备驱动(四)按键中断

    目录 字符设备驱动(四)按键中断 硬件IO 程序设计 中断配置 中断关闭 中断函数 共享中断号 测试 完整的程序 title: 字符设备驱动(四)按键中断 tags: linux date: 2018 ...

  3. 玩转 ESP32 + Arduino (四) 电容按键 霍尔传感器 外部中断 延时 脉冲检测

    一. 电容输入 touchRead(pin) 及电容输入中断touchAttachInterrupt(pin, TSR , threshold) ESP32专门提供了电容触摸传感器的功能, 共有T0, ...

  4. Linux 探索之旅 | 第三部分第四课:后台运行及合并多个终端

    -- 作者 谢恩铭 转载请注明出处 内容简介 第三部分第四课:后台运行及合并多个终端 第三部分第五课预告:延时执行,唯慢不破 后台运行及合并多个终端 上一课 Linux探索之旅 | 第三部分第三课:监 ...

  5. NeHe OpenGL第二十四课:扩展

    NeHe OpenGL第二十四课:扩展 扩展,剪裁和TGA图像文件的加载: 在这一课里,你将学会如何读取你显卡支持的OpenGL的扩展,并在你指定的剪裁区域把它显示出来.   这个教程有一些难度,但它 ...

  6. 第四课 脱壳必备知识要点及方法

    第四课  脱壳必备知识要点及方法 今天所要讲的是这高级篇中最为关键,最为重要的一课,希望大家能认真学习,反复推敲,举一反三学习脱壳的各种方法,当然有的时候可能需要几种方法一起使用,今后我们也会一点一点 ...

  7. 【C++探索之旅】第一部分第四课:内存,变量和引用

    内容简介 1.第一部分第四课:内存,变量和引用 2.第一部分第五课预告:简易计算器 内存,变量和引用 上一课<[C++探索之旅]第一部分第三课:第一个C++程序>中,我们已经学习了如何创建 ...

  8. 从ARM裸机看驱动之按键中断方式控制LED(一)

    硬件环境:Samsung Cortex-A9 Exynos4412 BSP + JTAG ARM 仿真器 软件环境:Eclipse ================================== ...

  9. 第四课:如何安装树莓派系统

    第一课:什么是树莓派 第二课:基于树莓派的10个经典项目 第三课:购买您的第一个树莓派 第四课:如何安装树莓派系统 第五课:树莓派C语言编程手册 第六课:树莓派led控制 第七课:树莓派按键控制 第八 ...

最新文章

  1. html5 drap 文件夹,带有显示ID的Html5 drap and drop问题
  2. 【TCP/IP 协议】 TCP/IP 基础
  3. Java集合篇:集合细节:为集合指定初始容量、asList的缺陷、subList的缺陷
  4. Linux 系统应用编程——网络编程(基础篇)
  5. 时区日期处理及定时 (NSDate,NSCalendar,NSTimer,NSTimeZone) -- IOS(实例)
  6. CV Code | 计算机视觉开源周报20191002期
  7. MYSQ--SHOW PROFILE Syntax and useing
  8. 家庭NAS存储服务器给我们带来了什么
  9. silverlight 3 blend3最新版本 破解方法
  10. 5月8号--华为正式推出新企业标识
  11. C++11的std::is_same和std::decay使用与源码解析
  12. 计算机应届生面试,计算机应届生面试技巧
  13. 1867最短路径问题(SPFA)
  14. Oracle什么时候创建索引最好
  15. Adaptive Personalized Federated Learning 论文解读+代码解析
  16. 如何对PDF文档进行数字签名
  17. NYNU_ACM 实验室招新月赛题解
  18. My_sum函数进化
  19. MongoDB详细介绍
  20. Resetting a lost Admin password

热门文章

  1. Linux界面自动化测试框架不完全汇总
  2. 分布式搜索引擎ElasticSearch+Kibana (Marvel插件安装详解)
  3. Java编程思想笔记(持有对象)
  4. JVM-class文件完全解析-方法表集合
  5. 【转】安全测试自学路线图
  6. Android实现富文本时遇到的一些问题(2)字体效果的保存
  7. UA MATH636 信息论8 线性纠错码的解码算法
  8. GIS空间数据结构 - 矢量和栅格
  9. C#二维和多维数组编程实例
  10. 图解SQL Server 安全函数的使用