01前 言
在开发指南(一)中我们介绍了示例程序的整体框架,从本章开始将会对使用到的模块进行详细介绍。本章我们主要对按键中断的一种简单用法进行讲解,参考应用手册第6、7章节。
02按键中断
因为外部中断和按键中断都被复用在GPIO上(KEY0~KEY6对应P00~P06),要优先设置GPIO为输入状态,而GPIO、外部中断和按键中断都属于外设功能,所以第一步还是先打开相应的外设时钟使能,接着初始化GPIO00~06的状态为输入上拉,然后进行按键中断配置初始化,最后打开按键中断使能,如下图1:
图1.按键中断配置初始化
按键中断初始化时,首先要写入正确的向量号,使能对应向量号的中断,然后根据应用需要配置中断优先级和优先级阈值。一般在程序中有多个中断使用时需要考虑中断优先级问题,在本示例程序SD93F115-JBS_TEST.zip中,中断优先级和阈值都设置为最高(因为我们是通过按键中断去选择需要执行的测试项,所以我们认为按键中断的优先级和阈值必须都是最高的),配置完成后便可打开按键中断使能,设置按键KEY0~KEY6作为按键输入。
按键中断基本配置完成后,就需要编写按键中断服务函数了。我们在lib的SD931X_it.c中找到按键中断对应的中断函数入口,编写按键中断服务函数(其他中断可在对应的中断函数中进行编写),如下图2:
图2.按键中断服务函数
进入按键中断服务函数,第一步先清除中断标志位,避免因忘记清除标志位导致系统反复进入中断(无论KEY0~6中的哪个按键触发的中断,都会置起KEYIF标志位);第二步是消抖,防止按键误触发(LCD显示会在后续章节进行说明);第三步便可通过读取GPIO0的输入数据寄存器GPIO0_IDR,去判断哪一个或哪几个按键处于按下状态(因为IO是被上拉的状态,所以在无按键按下时,寄存器结果应为0x7F,有按键按下时对应位为0)。
若寄存器结果与定义的键值Key0-Key6相同(见图3键值定义),则将对应测试项的标志位置1,其他测试项的标志位置0,否则程序直接退出中断。按键中断执行完成后,程序会跳出中断继续执行图4的while循环,而在循环中,我们通过不断监测各测试项的标志位是否置1来验证是否有按键按下,如此便可通过简单的按键操作进入不同测试项。
图3.键值定义
图4.while循环
03开发问题简析
开发阶段使用按键中断或其他中断遇到最多的问题就是中断不响应,要重点关注外设时钟是否打开、中断使能是否打开、对应interwetten与威廉的赔率体系
功能是否开启以及中断标志位是否判断正确。
04总 结
本文介绍了一种按键中断的简单用法,对按键中断的初始化和中断服务函数的编写的流程进行简单介绍。
示例程序:
SD93F115-JBS_TEST.zip
审核编辑:汤梓红
-
mcu
+关注
关注
146文章
17083浏览量
350740 -
adc
+关注
关注
98文章
6481浏览量
544311 -
GPIO
+关注
关注
16文章
1199浏览量
52018
发布评论请先 登录
相关推荐
带32位MCU和高精度ADC的SoC产品(三)

带32位MCU和高精度ADC的SoC产品-SD93F系列开发指南(八)

鼎盛合科技芯片CSU18M88,SOC芯片集成高精度ADC和LCD显示模块
基于高精度24位ADC的电子血压计方案
高精度ADC,高精度ADC是什么意思
ADuC816:MicroConverter®,带嵌入式闪存MCU的双通道16位ADC产品手册

ADuC832:带嵌入式62 kB闪存MCU的MicroConverter、12位ADC和DAC产品手册

24Bit ADC高精度低功耗MCU 医疗级别设备参考设计(附上高精确算法+电路原理图)
基于DT5M4765系列(MCU带24位高精度ADC+LCD驱动)开发的便携式血氧仪

24位高精度ADC MCT1247产品介绍

评论