TQ210——按键


底板上有8个独立按键,可分别使用查询法和中断法控制按键。通过原理图可知:按键按下,GPIO检测到低电平,松开时高电平。

直接查询法程序的实现简单,但是效率很低,CPU一直在查询,啥事也干不了。中断查询法程序的实现较为复杂,但是效率高。

GPIO寄存器(GPH0CON,GPH0DAT),外部中断寄存器(EXT_INT_0_CON,EXT_INT_0_MASK),中断通道选择(VIC0INTSELECT),中断使能(VIC0INTENABLE),中断向量地址(VIC0VECTADDR0,VIC0VECTADDR1),清除中断向量(EXT_INT_0_PEND)

.global _start                                   /*声明一个全局的标号 */
.global key_isr
_start:/* 设置栈,以调用c函数 */ldr   sp, =0x40000000       /* 开总中断       */mrs r0,cpsrbic r0,r0, #0x00000080           /* 清楚第7位,IRQ中断禁止位,写0使能IRQ */msr cpsr,r0bl main                                     /* 跳转到C函数去执行 */halt:b haltkey_isr:/* 计算返回地址:PC的值等于当前执行的地址+8,** 当CPU正要执行某条指令时(还未执行),被中断,** 这是这条刚要执行的指令的地址刚好=PC-4 */sub lr,lr, #4stmfd sp!,{r0-r12, lr}      /* 保护现场 */bl key_handle/* 恢复现场 */ldmfd sp!,{r0-r12, pc}^         /* ^表示把spsr恢复到cpsr */
#define GPC0CON               *((volatileunsigned int *)0xE0200060)
#define GPC0DAT               *((volatileunsigned int *)0xE0200064)#define GPH0CON               *((volatileunsigned int *)0xE0200C00)
#define GPH0DAT               *((volatileunsigned int *)0xE0200C04)#define EXT_INT_0_CON         *((volatileunsigned int *)0xE0200E00)
#define EXT_INT_0_MASK        *((volatileunsigned int *)0xE0200F00)#define VIC0INTSELECT         *((volatileunsigned int *)0xF200000C)
#define VIC0INTENABLE         *((volatileunsigned int *)0xF2000010)#define VIC0VECTADDR0         *((volatileunsigned int *)0xF2000100)
#define VIC0VECTADDR1         *((volatileunsigned int *)0xF2000104)#define VIC0ADDRESS          *((volatile unsigned int*)0xF2000F00)#define EXT_INT_0_PEND       *((volatileunsigned int *)0xE0200F40)extern void key_isr(void);void key_handle()
{     volatileunsigned char key_code = EXT_INT_0_PEND & 0x03;VIC0ADDRESS= 0;                    /* 清中断向量寄存器 */EXT_INT_0_PEND&= ~0x03;   /* 清中断挂起寄存器 */if(key_code == 1)             /* key1 */{GPC0DAT&= ~(0x01 << 3);      /* toggleLED1 */GPC0DAT|= 1 << 3;   /* toggle LED1 */}     else if(key_code == 2)      /* key2 */{GPC0DAT&= ~(0x01 << 4);      /* toggleLED1 */GPC0DAT|= 1 << 4;   /* toggle LED1 */}}int main()
{GPC0CON&= ~(0xFF << 12);GPC0CON |=0x11 << 12;                             /*配置GPC0_3和GPC0_4为输出:LED1和LED2 */GPH0CON |=0xFF << 0;                              /*配置GPH0_0和GPH0_1为外部中断:key1和key2 */EXT_INT_0_CON&= ~(0xFF << 0);EXT_INT_0_CON|= 2 | (2 << 4);                    /*配置EXT_INT[0]和EXT_INT[1]为下降沿触发 */EXT_INT_0_MASK&= ~3;                             /* 取消屏蔽外部中断EXT_INT[0]和EXT_INT[1] */VIC0INTSELECT&= ~3;                              /*选择外部中断EXT_INT[0]和外部中断EXT_INT[1]为IRQ类型的中断 */VIC0INTENABLE|= 3;                               /*使能外部中断EXT_INT[0]和EXT_INT[1] *//* 当EXT_INT[0]触发中断,即用户按下key1时,** CPU就会自动的将VIC0VECTADDR0的值赋给VIC0ADDRESS并跳转到这个地址去执 */VIC0VECTADDR0= (unsigned int)key_isr;VIC0VECTADDR1= (unsigned int)key_isr;while (1);return 0;
}

裸机编程编译的时候一定要加16字节的头信息,编译生成的bin文件通过SD卡或者TFTP的方法下载到开发板。

TQ210——按键(中断查询法)相关推荐

  1. TQ210裸机编程(3)——按键(查询法)

    首先查看TQ210的底板原理图 这次编程只操作KEY1和KEY2,在TQ210核心板原理图中搜索XEINT0 可以看出KEY1和KEY2分别接在S5PV210的GPH0_0和GPH0_1引脚. 这次编 ...

  2. TQ210——S5PV210中断体系

    TQ210--S5PV210中断体系 中断是指 CPU 在执行程序的过程中,遇到异常情况需要处理, CPU停 止当前程序的运行,保存当前程序运行处的必要参数,转去处理这些异常情况, 处理结束后再返回当 ...

  3. MSP430-GRACE 实战(二):按键中断

    文章目录 MSP430-GRACE 实战(二):按键中断 一.开发平台 1.1 硬件平台 1.2 软件平台 二.原理分析 三.GRACE 配置 3.1 新建工程(通用步骤) 3.2 配置时钟(通用步骤 ...

  4. 51单片机实例学习二 按键中断识别、定时器、利用定时器产生乐曲、数摸转换 ADC0804和DAC0832

    六.按键中断识别 [实验任务] 采用中断技术,每按一下按键,计数器加1,并用LED显示出来. [硬件电路] 注意:我们只用4位数码管中的两位. 注意:a接P0.0;b接P0.1;c接P0.3-- 注意 ...

  5. linux驱动开发5 按键中断实验(定时器和中断)

    led:IO的输出 :key:IO的输入 法一:直接读写IO 使用while(1)无限读取,但CPU占用达到了99.6%,所以不行 #include <linux/types.h>#inc ...

  6. hal库开启中断关中断_[STM32]HAL库下GPIO按键中断与去抖问题分析(分析源码解决问题)...

    自上篇文章STM32 非阻塞HAL_UART_ReceiveIT解析与实际应用,具体总结了HAL库下套娃函数中如何看清库函数的脉络,更细致的认识调用的过程,以解决潜在的问题.又又又遇到了新的问题(GP ...

  7. SOPC第四课 按键中断

    按键 LED控制 开发板 小梅哥AC620 软件 quartus 13.1 2个按键,当按键0按下时,LED灯开始闪烁:当按键1按下时,LED灯停止闪烁. 使用一个PIO 这个PIO设置为6位(4个L ...

  8. c语言 执行free函数程序被卡住,FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法...

    FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法 时间:2019-08-10 14:39:47  来源:  作者:  所属栏目:其他服务端 这里将告诉您FreeRT ...

  9. Z-Stack通过按键中断实现长按功能

    一.功能介绍 项目需要实现长按功能,实现按键有2种方式,一种是通过中断.一种KEY_CHANGE事件轮询的方式.由于中断更加的灵敏,这里选择中断的方式.意外的发现,如果开启了中断,那么按键就不会触发K ...

最新文章

  1. 2021年大数据HBase(十四):HBase的原理及其相关的工作机制
  2. mysql集群经常无法truncate_失败的mysql cluster配置-无法顺利转换已有数据
  3. 列出连通集 (25 分)【DFS与BFS模板】
  4. GO语言-基础语法:循环
  5. 矩阵相乘Java版(第一个java程序)
  6. 英特尔放出Linux微代码以修复Meltdown和Spectre漏洞
  7. 数据科学导论--2.理论基础
  8. 全国办公软件高级操作员证书是计算机水平,《办公软件应用高级操作员级课程标准》.doc...
  9. USACO 19 FEB Mowing Mischief P 题解
  10. javascript满天小星星
  11. 【数据分析】分析方法 | 业务知识 | 行业分析
  12. ObjectC快速入门教程(1)--创建类
  13. Unity ILRuntime Debugger使用及常见问题
  14. CenOs安装jdk
  15. 上海2021高考小三门成绩查询,上海高考小三门怎么算分?附上海小三门等级对应分数...
  16. java废弃方法_JAVA9之后废弃newInstance()方法
  17. 调查报告数据分析怎么做?
  18. Qt_show、hide、close、WA_QuitOnClose、destroyed信号
  19. 班主任工作计划计算机中职,班主任工作计划
  20. 陕西计算机专业专科学校排名及分数线,2019-2020陕西专科学校排名及分数线(理科+文科)...

热门文章

  1. iOS开发篇——OC 协议和代理设计模式介绍
  2. FLEX组件AnyChart实例教程.
  3. 学教育成空中楼阁 巨额学费背后却是失业风险
  4. akshare写etf动量滚动策略
  5. linux系统pcb软件下载,开源PCB设计软件KiCad致力于下一个大版本的发布
  6. 转换文档参数_明明2秒可以搞定Word、Excel相互转换,你却用了半小时!真亏了...
  7. python compare excel_python简单操作excle的方法
  8. MFC读取配置文件GetPrivateProfileString
  9. cmdline常用参数
  10. linux内核的一些常识介绍