带32位MCU和高精度ADC的SoC产品(二)-32位adc芯片

01前 言

在开发指南(一)中我们介绍了示例程序的整体框架,从本章开始将会对使用到的模块进行详细介绍。本章我们主要对按键中断的一种简单用法进行讲解,参考应用手册第6、7章节。

02按键中断

因为外部中断和按键中断都被复用在GPIO上(KEY0~KEY6对应P00~P06),要优先设置GPIO为输入状态,而GPIO、外部中断和按键中断都属于外设功能,所以第一步还是先打开相应的外设时钟使能,接着初始化GPIO00~06的状态为输入上拉,然后进行按键中断配置初始化,最后打开按键中断使能,如下图1:

带32位MCU和高精度ADC的SoC产品(二)-32位adc芯片

图1.按键中断配置初始化

按键中断初始化时,首先要写入正确的向量号,使能对应向量号的中断,然后根据应用需要配置中断优先级和优先级阈值。一般在程序中有多个中断使用时需要考虑中断优先级问题,在本示例程序SD93F115-JBS_TEST.zip中,中断优先级和阈值都设置为最高(因为我们是通过按键中断去选择需要执行的测试项,所以我们认为按键中断的优先级和阈值必须都是最高的),配置完成后便可打开按键中断使能,设置按键KEY0~KEY6作为按键输入。

按键中断基本配置完成后,就需要编写按键中断服务函数了。我们在lib的SD931X_it.c中找到按键中断对应的中断函数入口,编写按键中断服务函数(其他中断可在对应的中断函数中进行编写),如下图2:

带32位MCU和高精度ADC的SoC产品(二)-32位adc芯片

图2.按键中断服务函数

进入按键中断服务函数,第一步先清除中断标志位,避免因忘记清除标志位导致系统反复进入中断(无论KEY0~6中的哪个按键触发的中断,都会置起KEYIF标志位);第二步是消抖,防止按键误触发(LCD显示会在后续章节进行说明);第三步便可通过读取GPIO0的输入数据寄存器GPIO0_IDR,去判断哪一个或哪几个按键处于按下状态(因为IO是被上拉的状态,所以在无按键按下时,寄存器结果应为0x7F,有按键按下时对应位为0)。

若寄存器结果与定义的键值Key0-Key6相同(见图3键值定义),则将对应测试项的标志位置1,其他测试项的标志位置0,否则程序直接退出中断。按键中断执行完成后,程序会跳出中断继续执行图4的while循环,而在循环中,我们通过不断监测各测试项的标志位是否置1来验证是否有按键按下,如此便可通过简单的按键操作进入不同测试项。

带32位MCU和高精度ADC的SoC产品(二)-32位adc芯片

图3.键值定义

带32位MCU和高精度ADC的SoC产品(二)-32位adc芯片

图4.while循环

03开发问题简析

开发阶段使用按键中断或其他中断遇到最多的问题就是中断不响应,要重点关注外设时钟是否打开、中断使能是否打开、对应模拟功能是否开启以及中断标志位是否判断正确。

04总 结

本文介绍了一种按键中断的简单用法,对按键中断的初始化和中断服务函数的编写的流程进行简单介绍。

示例程序:

SD93F115-JBS_TEST.zip

审核编辑:汤梓红

免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:带32位MCU和高精度ADC的SoC产品(二)-32位adc芯片 https://www.yhzz.com.cn/a/7442.html

上一篇 2023-04-18 01:14:11
下一篇 2023-04-18 01:20:23

相关推荐

联系云恒

在线留言: 我要留言
客服热线:400-600-0310
工作时间:周一至周六,08:30-17:30,节假日休息。