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.rhkb.cn/news/180494.html

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

相关文章

AD教程(六)现有元件模型的调用

AD教程&#xff08;六&#xff09;现有元件模型的调用 导入现有原理图 Altium Schematic Document (.SchDoc) 直接拖入AD即可 直接用现有原理图生成原理图库 点击设计&#xff0c;选择生成原理图库&#xff0c;进入归类设置界面&#xff08;用原理图直接生成原理图库&#xf…

如何实现多租户系统

shigen日更文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 不知道为什么&#xff0c;最近老是有一些失眠&#xff0c;凌晨睡&#xff0c;两点半还在醒着。脑子里想着自己生…

Linux flock和fcntl函数详解

文章目录 flock函数描述返回值和错误码笔记 fcntl函数描述复制文件描述符文件描述标志文件状态标志 咨询锁强制锁管理信号租赁文件和目录变更通知改变管道容量 返回值错误备注遗留问题 flock函数 主要功能是在已打开的文件应用或者删除共享锁或者独占锁。sys/file.h声明了这个…

使用Postman工具做接口测试 —— 环境变量与请求参数格式!

引言 在上一篇笔记我们主要介绍了接口测试的基础知识与基本功能&#xff0c;本章主要介绍如何使用postman做接口测试。 配置环境变量和全局变量 环境变量和全局变量 环境管理中还可以点击“Global”添加全局变量&#xff0c;环境变量只有当选择了该环境时才生效&#xff0c;…

centos9 stream 下 rabbitmq高可用集群搭建及使用

RabbitMQ是一种常用的消息队列系统&#xff0c;可以快速搭建一个高可用的集群环境&#xff0c;以提高系统的弹性和可靠性。下面是搭建RabbitMQ集群的步骤&#xff1a; 基于centos9 stream系统 1. 安装Erlang和RabbitMQ 首先需要在所有节点上安装Erlang和RabbitMQ。建议使用官…

VueJs各个版本— 判断当前是开发、生产环境

VueJs各个版本— 判断当前是开发、生产环境 文章目录 VueJs各个版本— 判断当前是开发、生产环境vue项目分类VueCLI21&#xff0c;判断样例2&#xff0c;判断原理 Vue CLI 3 和 Vue CLI 41&#xff0c;判断样例2, 判断原理手动设置-json文件手动设置- .env 文件单个 .env 文件多…

SpringBoot-SpringCache缓存

文章目录 Spring Cache 介绍常用注解 Spring Cache 介绍 Spring Cache 是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring Cache 提供了一层抽象&#xff0c;底层可以切换不同的缓存实现&#xff0c;…

shell脚本代码混淆

文章目录 起因安装 Bashfuscator安装BashfuscatorBashfuscator的使用 起因 很多时候我并不希望自己的shell脚本被别人看到&#xff0c;于是我在想有没有什么玩意可以把代码加密而又正常执行&#xff0c;于是我想到了代码混淆&#xff0c;简单来看一下&#xff1a; 现在我的目…

JavaEE平台技术——预备知识(Maven、Docker)

JavaEE平台技术——预备知识&#xff08;Maven、Docker&#xff09; 1. Maven2. Docker 在观看这个之前&#xff0c;大家请查阅前序内容。 &#x1f600;JavaEE的渊源 &#x1f600;&#x1f600;JavaEE平台技术——预备知识&#xff08;Web、Sevlet、Tomcat&#xff09; 1. M…

Git 内容学习

一、Git 的理解 Git是一个分布式版本控制系统&#xff08;Distributed Version Control System&#xff0c;简称 DVCS&#xff09;&#xff0c;用于对项目源代码进行管理和跟踪变更。分为两种类型的仓库&#xff1a;本地仓库和远程仓库。 二、Git 的工作流程 详解如下&#x…

高性能渲染——详解Html Canvas的优势与性能

本文由葡萄城技术团队原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 一、什么是Canvas 想必学习前端的同学们对Canvas 都不陌生&#xff0c;它是 HTML5 新增的“画布”元素&#x…

GPT引发智能AI时代潮流

最近GPT概念爆火&#xff0c;许多行业开始竞相发展AI &#xff0c;工作就业也将面临跳转&#xff0c;目前测试就业形势就分为了两大类&#xff0c;一类是测试行业如功能、性能、自动化综合性人才就业技能需求&#xff0c;另一类便是AI测试行业的需求普遍增长&#xff0c;原本由…

一键混剪软件、根据模板批量剪辑、多种分割、多种合并、多种混剪、文案提取、文字转语音等

在这个短视频时代&#xff0c;视频剪辑已经成为了一个炙手可热的行业。但是&#xff0c;对于大多数人来说&#xff0c;视频剪辑是一项既复杂又繁琐的工作。不过&#xff0c;现在有了我们的新伙伴——视频闪闪&#xff0c;一键混剪软件&#xff0c;您将迎来全新的视频剪辑体验&a…

axios 实现请求重试

前景提要&#xff1a; ts 简易封装 axios&#xff0c;统一 API 实现在 config 中配置开关拦截器 请求重试的核心是可以重放请求&#xff0c;具体实现就是在 axios 中&#xff0c;拿到当前请求的 config 对象&#xff0c;再用 axios 实例&#xff0c;就能重放请求。 在无感刷新…

HCIA数据通信——路由协议

数据通信——网络层&#xff08;OSPF基础特性&#xff09;_咕噜跳的博客-CSDN博客 数据通信——网络层&#xff08;RIP与BGP&#xff09;_咕噜跳的博客-CSDN博客 上述是之前写的理论知识部分&#xff0c;懒得在实验中再次提及了。这次做RIP协议以及OSPF协议。不过RIP协议不常用…

Zabbix如何监控腾讯云NAT网关

1、NAT网关介绍 NAT 网关&#xff08;NAT Gateway&#xff09;是一种支持 IP 地址转换服务&#xff0c;提供网络地址转换能力&#xff0c;主要包括SNAT&#xff08;Source Network Address Translation&#xff0c;源网络地址转换&#xff09;和DNAT&#xff08;Destination N…

通过在Z平面放置零极点的来设计数字滤波器

文章来源地址&#xff1a;https://www.yii666.com/blog/393376.html 通过在Z平面放置零极点的来设计数字滤波器 要求&#xff1a;设计一款高通滤波器&#xff0c;用在音频信号处理过程中&#xff0c;滤掉100Hz以下的信号。 实现方法&#xff1a;通过在Z平面放置零极点的来设…

由于flutter_app依赖于flutter_swiper>=0.0.2,不支持零安全,版本解决失败。

参考 dart3.0使用flutter_swiper报错记录 flutter_swiper package - All Versions从官网的信息可以看到 Dart3版本不兼容 最小兼容的Dart SDK版本需要2.0 Flutter SDK 版本列表Flutter SDK 版本列表 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 说明&#xff1a;因…

青翼科技-国产化ARM系列TES720D-KIT

板卡概述 TES720D-KIT是专门针对我司TES720D&#xff08;基于复旦微FMQL20S400的全国产化ARM核心板&#xff09;的一套开发套件&#xff0c;它包含1个TES720D核心板&#xff0c;加上一个TES720D-EXT扩展底板。 FMQL20S400是复旦微电子研制的全可编程融合芯片&#xff0c;在单…

Envoy XDS协议学习

Envoy xds学习 资料地址 envoy官网资料连接 接口说明 xds分为增量接口和全量接口SotW&#xff1a;state of the world 即全量的数据Incremental&#xff1a; 增量的数据 具体接口 Listener: Listener Discovery Service (LDS) SotW: ListenerDiscoveryService.StreamList…