基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入

news2025/1/19 14:27:08

目录

开启GPIO5对应的时钟

设置引脚复用

设置GPIO5_IO1输入模式

设置检测电平

部分代码

button.c

led.c

main.c


 

在原理图上找到对应的引脚后即可以根据对应的图表找到真正在板字上的引脚,这里的

SNVS_TAMPER1对应实际的引脚是GPIO5_IO1

 

P1357页附近有GPIO5对应的寄存器位置,可以直接跳转

开启GPIO5对应的时钟

 

设置引脚复用

 

注意:当TAMPER引脚用作GPIO时,ALT5模式才有效。这取决于FUSE设置"TAMPER_PIN_DISABLE[1:0]"。

当TAMPER引脚用作GPIO时,以下是复用信息:SNVS_TAMPER1 ==> GPIO5_01

  • 101 ALT5 — 选择复用模式:ALT5复用端口,实例中的GPIO5_IO01,即gpio5
  • 其他保留

所以设置复用为GPIO5

第一行代码 IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01, 0); 设置了引脚 IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01 的复用功能为默认值(0)。也就是说,将该引脚配置为其默认的功能,而不是使用其他的复用模式。

第二行代码 IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01, 0x10B0); 设置了引脚 IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01 的PAD属性。具体的属性值为 0x10B0。

设置GPIO5_IO1输入模式

GPIO方向位。该寄存器的第n位定义了GPIO[n]信号的方向。

注意:GPIO_GDIR仅在I/O MUX中相应位配置为GPIO时,才会影响I/O信号的方向。

  • 0 INPUT — 将GPIO配置为输入。
  • 1 OUTPUT — 将GPIO配置为输出 

第一位设置为0,输入模式

设置检测电平

 

数据位。该寄存器在将信号配置为输出(GDIR[n]=1)时定义了GPIO输出的值。对该寄存器的写入操作会存储在一个寄存器中。当信号被配置为输出(GDIR[n]=1)时,读取GPIO_DR将返回存储在寄存器中的值;当信号被配置为输入(GDIR[n]=0)时,读取GPIO_DR将返回输入信号的值。

注意:为了使GPIO_DR的值与信号连接,必须将I/O复用器配置为GPIO模式。如果禁用了输入路径,则始终返回零值。

这里配置为输入,返回外部信号的值。根据原理,按下按键高电平,值为1,寄存器存储在第一位的值是1,所以这时与1左移一位进行对比可以验证是否按下按键。

部分代码

button.c

# include  "common.h"



/*按键初始化函数*/

void button_init(void)

{

    /*按键初始化*/

    CCM->CCGR1 = 0xffffffff;

    //CCM_CCGR1_CG15(0x3);  //开启GPIO5的时钟



    

    /*设置 绿灯 引脚的复用功能以及PAD属性*/

    IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,0);     

    IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01, 0x10B0); 

    

    /*设置GPIO5_01为输入模式*/

    GPIO5->GDIR &= ~(1<<1);  

}



/*按键状态输出函数*/

int get_button_status(void)

{

    if((GPIO5->DR)&(1<<1))

    {

        delay(0xFF);

         if((GPIO5->DR)&(1<<1))

         {

             return 1;

         }

    }

    return 0;

}

led.c

# include  "common.h"



  /*led初始化函数*/

void rgb_led_init(void)

{

    /*使能GPIO1时钟*/

      CCM->CCGR1 = 0xffffffff;



     /*设置 红灯 引脚的复用功能以及PAD属性*/

    IOMUXC_SetPinMux(IOMUXC_GPIO1_IO04_GPIO1_IO04,0);     

    IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO04_GPIO1_IO04, 0X10B0); 



    /*设置GPIO1_04为输出模式*/

    GPIO1->GDIR |= (1<<4);  



    /*设置GPIO1_04输出电平为高电平*/

    GPIO1->DR |= (1<<4);  



}

main.c

# include  "common.h"



int main()

{

    int i = 0;



    /*初始化led灯和按键*/

    rgb_led_init();

    button_init();



    while(1)

    {

        /*按键按下*/

        if(get_button_status())

        {

            /*翻转红灯状态*/

            if(i == 0)

            {

                red_led_on;

                i = 1;

            }

            else

            {

                red_led_off;

                i = 0;

            }

            while(get_button_status());//等待按键松开

        }

    }



    return 0;    

}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试 - 数字字符串组合倒序 - 正则表达式(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、熟读题意&#xff0c;大概理解为&#xff1a;2、我理解 “-”作为连接符使用时作为字符串的一部分 的意思是&#xff1a;3、解决本题的关键是正则表达式的使用。 五、Java算法源码六、效果展示1、输入2、输出…

142页大型制造企业IT蓝图、信息化系统技术架构规划与实施方案PPT

导读&#xff1a;原文《142页大型制造企业IT蓝图、信息化系统技术架构规划与实施方案PPT》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取…

新能源电动车充电桩控制主板的三大保护功能

新能源电动车充电桩控制主板的三大保护功能 你是否曾经遇到过电动车充电时电流过大&#xff0c;电压不稳定&#xff0c;或者电池过热的情况?这些问题都可能会给你的电动车带来安全隐患。那么&#xff0c;如何避免这些问题的发生呢?让我们一起来探讨一下充电桩控制主板的保护功…

这款编程语言,竟然没有程序员使用,却人丁兴旺

人丁兴旺 现在&#xff0c;编程语言种类繁多&#xff0c;比如Java、Python、C等&#xff0c;每种语言都有其特定的应用场景和优势。 然而&#xff0c;让我们感到惊奇的是&#xff0c;有一款编程语言&#xff0c;它并没有广大的程序员使用&#xff0c;却依然能够在编程世界中独…

初阶C语言-结构体

&#x1f31e; “少年有梦不至于心动&#xff0c;更要付诸行动。” 今天我们一起学习一下结构体的相关内容&#xff01; 结构体 &#x1f388;1.结构体的声明1.1结构的基础知识1.2结构的声明1.3结构成员的类型1.4结构体变量的定义和初始化 &#x1f388;2.结构体成员的访问2.1结…

04-微信小程序常用组件-基础组件

04-微信小程序常用组件-基础组件 文章目录 基础内容icon 图标案例代码 text 文本案例代码 progress 进度条案例代码 微信小程序包含了六大组件&#xff1a; 视图容器、 基础内容、 导航、 表单、 互动和 导航。这些组件可以通过WXML和WXSS进行布局和样式设置&#xff0c…

我还不知道?Android组件化插件化模块化

Android组件化、插件化和模块化是针对Android应用程序开发的一种架构设计思想和开发方式。 组件化&#xff08;Componentization&#xff09;&#xff1a; 组件化是将一个大型的Android应用程序拆分成多个独立的组件&#xff08;Module&#xff09;&#xff0c;每个组件可以独…

SUMO 创建带有停车位的充电站 在停车位上充电

前言 SUMO提供的Charging Station是没有停车位的&#xff0c;车辆只有在通过充电站区域或者停在充电站区域内时才能被充电&#xff0c;这时充电的车辆就会占用道路。然而&#xff0c;真实世界中的情况通常是充电站设在路边&#xff0c;且提供一定量的车位用于停车&#xff0c;…

探索OLED透明屏的多领域应用:技术驱动的未来之窗

OLED透明屏作为一项具有突破性技术的新兴产品&#xff0c;正在各个领域展现无限的可能性。 其独特的透明性和高对比度&#xff0c;使其在智能家居、汽车行业、商业展示、航空航天、教育与培训以及医疗健康等领域中得到广泛应用。 那么&#xff0c;尼伽将详细探讨OLED透明屏在…

程序的DAC检查与LSM简介

程序的DAC检查 在Linux中&#xff0c;程序的DAC&#xff08;Discretionary Access Control&#xff0c;自主访问控制&#xff09;检查是指操作系统对程序执行期间对文件和资源的访问权限进行的检查。 Linux使用一种基于权限的访问控制模型&#xff0c;其中每个文件和资源都与…

Linux学习之iptables过滤规则的使用

cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810&#xff0c;uname -r看到内核版本是3.10.0-957.el7.x86_64&#xff0c;iptables --version可以看到iptables版本是v1.4.21。 iptables -t filter -A INPUT -s 10.0.0.8 -j ACCEPT会在最后一行插入。 10…

借用空数组方法:处理类数组的对象的实用技巧

前言 NodeList 不是一个数组&#xff0c;是一个类似数组的对象 (Like Array Object)。虽然 NodeList 不是一个数组&#xff0c;但是可以使用 forEach() 来迭代。你还可以使用 Array.from() 将其转换为数组。 不过&#xff0c;有些浏览器较为过时&#xff0c;没有实现 NodeList.…

C++项目实战之演讲比赛流程管理系统

演讲比赛流程管理系统 1. 演讲比赛程序需求 1.1 比赛规则 学校举行一场演讲比赛&#xff0c;共有12个人参加。比赛共两轮&#xff0c;第一轮为淘汰赛&#xff0c;第二轮为决赛 每名选手都有对应的编号&#xff0c;如 10001 ~ 10012 比赛方式&#xff1a;分组比赛&#xff0…

git提交代码是用git-merge还是git-rebase呢?

什么是git merge&#xff1f; git merge是我们在git操作中频繁会用到的一个命令&#xff0c;它主要实现的功能便是为我们进行分支代码的合并&#xff0c;也就是将两个或两个以上的开发历史合并在一起的操作。 它有以下两种用途&#xff1a; 更新代码时&#xff0c;整合另一个…

行业资讯丨“燃气智慧化”到底是什么?

文章来源&#xff1a;网络 关键词&#xff1a;智慧燃气、智慧燃气场站、设备设施数字化、数字孪生、工业互联网 带你了解燃气信息化 随着科技的不断进步和信息化的快速发展&#xff0c;各行各业都在积极探索如何将技术应用于业务中&#xff0c;以提高效率和服务质量。 燃气…

Java实现钉钉企业内部应用机器和自定义机器人发送消息

前言 公司让写一个服务监控的功能,当监测到服务停止时,向钉钉群里推送报警信息。之前大概看到钉钉的开放平台的API文档,好像能群发消息的只有机器人。 钉钉开放平台目前提供三种机器人: 企业内部应用机器人 群模板机器人 自定义机器人 本来向用自己比较熟悉的自定义机器人…

初试时间官宣!研招网发布下半年重要时间节点!今日速报来了

距24考研初试还有127天&#xff0c;今天给大家带来初试和报名时间官宣消息、考研报名注意事项、研招网发布的2024考研“保姆级”下半年重要时间节点。有用记得收藏 24考研报名和初试时间官宣 已有学校在招生简章中明确24考研初试时间 初试时间预计为&#xff1a;2023年12月23…

当我们都是那个“和尚”:团队合作中的责任与动力

引言&#xff1a;三个和尚的故事 中国的古老民间故事中&#xff0c;有一个被广为传颂的故事 - 三个和尚的故事。该故事描述了三位和尚居住在远离水源的山上寺庙中。当只有一个和尚时&#xff0c;他每天下山提水&#xff0c;日复一日&#xff0c;从未间断。但当寺庙里有了三个和…

【Java】常见面试题:HTTP/HTTPS、Servlet、Cookie、Linux和JVM

文章目录 1. 抓包工具&#xff08;了解&#xff09;2. 【经典面试题】GET和POST的区别&#xff1a;3. URL中不是也有这个服务器主机的IP和端口吗&#xff0c;为啥还要搞个Host&#xff1f;4. 补充5. HTTP响应状态码6. 总结HTTPS工作过程&#xff08;经典面试题&#xff09;7. H…

后台程序 报错内容:java.sql.SQLException: Java heap space

原因有以下可能&#xff1a; 1、查询没有通过参数&#xff0c;而是直接查询出所有的记录&#xff1b; 2、是由于mysql单个字段存储的内容过大导致堆内存溢出&#xff1b; 3、JVM启动时&#xff0c;JVM堆会自动设置heap size值&#xff0c;值太小导致&#xff1b;