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

这篇具有很好参考价值的文章主要介绍了基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

开启GPIO5对应的时钟

设置引脚复用

设置GPIO5_IO1输入模式

设置检测电平

部分代码

button.c

led.c

main.c


基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入,单片机,嵌入式硬件

 基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入,单片机,嵌入式硬件

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

SNVS_TAMPER1对应实际的引脚是GPIO5_IO1

 基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入,单片机,嵌入式硬件基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入,单片机,嵌入式硬件

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

基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入,单片机,嵌入式硬件

开启GPIO5对应的时钟

基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入,单片机,嵌入式硬件

 基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入,单片机,嵌入式硬件

设置引脚复用

基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入,单片机,嵌入式硬件

基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入,单片机,嵌入式硬件

 

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

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

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

所以设置复用为GPIO5

基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入,单片机,嵌入式硬件

第一行代码 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输入模式

基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入,单片机,嵌入式硬件

基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入,单片机,嵌入式硬件

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

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

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

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

设置检测电平

基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入,单片机,嵌入式硬件

 基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入,单片机,嵌入式硬件

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

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

这里配置为输入,返回外部信号的值。根据原理,按下按键高电平,值为1,寄存器存储在第一位的值是1,所以这时与1左移一位进行对比可以验证是否按下按键。文章来源地址https://www.toymoban.com/news/detail-660477.html

部分代码

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;    

}

到了这里,关于基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式linux项目之智能仓储(基于正点原子IMX6ULL开发板)

    提示:该项目根据华清远见智能仓储项目改版,将他的A9开发板换成了自己的IMX6ULL开发板。同时等我将该项目整个流程完成之后,会为大家附上适配正点原子linux开发板的全部代码 (代码资料和视频教程私聊) 视频教程 相应课程配套源码 本人其他项目链接基于linux的智能仓储项

    2024年01月16日
    浏览(52)
  • IMX6ULL裸机篇之RTC实验-时间错误问题

    我这里用的开发板上芯片是 IMX6ULL,但是,由于恩智浦提供的 IMX6ULL芯片的参考手册关于 RTC章节的不全面。所以,实际在开发时使用了 《IMX6UL参考手册》。 对参考手册的理解如下: LPSRTCMR 寄存器 与 LPSRTCLR 寄存器是存时间的两个寄存器。即用两个寄存器来存时间。 读取SRTC的

    2024年02月06日
    浏览(32)
  • IMX6ULL裸机篇之I2C协议

    I2C 是最常用的通信接口,众多的传感器都会提供 I2C 接口来和主控相连。 比如摄像头、 加速度计、触摸屏等。 I.MX6U-ALPHA开发板 使用 I2C1 接口连接了一个距离传感器 AP3216C ,本章我们就来学习如何使用 I.MX6U 的 I2C 接口来驱动 AP3216C ,读取 AP3216C 的传感器数据。 I2C 是很常见的

    2024年02月08日
    浏览(70)
  • IMX6ULL裸机篇之DDR3参数配置分析

    上一篇博文进行了 DDR参数的初始化,通过一个 execl表进行配置,生成脚本文件。文章网址如下: IMX6ULL裸机篇之DDR3初始化_凌雪舞的博客-CSDN博客 本文对 DDR的参数配置进行详细的说明。即对 \\\"Register Configuration\\\"页面参数的配置 进行说明。 开发板上的DDR3L 内存芯片型号是 NT5CC

    2024年02月05日
    浏览(29)
  • IMX6ULL裸机篇之中断实验-通用中断驱动说明二

    本文是 IMX6ULL 裸机篇---中断实验 。旨在用 C 语言编写一套简单的中断驱动框架代码。 在 start.S 文件中,我们在中断服务函数 IRQ_Handler 中调用了 C 函数 system_irqhandler 来处 理具体的中断。 本实验会认识中断控制器: GIC控制器。 I.MX6U(Cortex-A)的中断控制器,关于 GIC 的详细内容

    2023年04月24日
    浏览(43)
  • 【IMX6ULL驱动开发学习】02.IMX6ULL烧写Linux系统

    由于我买的是正点原子的IMX6ULL阿尔法开发板,但是我是看韦东山老师视频学习的驱动 所以这里我烧录的方法是按照韦东山老师的课程来的 这里给出烧写Linux系统用到的工具 链接:https://pan.baidu.com/s/1bD-xxn3K8xQAVkJSaJmTzQ 提取码:af6w 下载解压后,可以看到烧写工具 烧写Linux系统

    2024年02月13日
    浏览(43)
  • 基于IMX6ULL的智能车载终端项目(代码开源)_imx6ull 开源 linux 项目 车载终端

    1.4 车载终端:杂项功能 车载终端是一个非常复杂且常用的装置,随着电车与自动驾驶技术的不断升级迭代,需求也与日俱增!我们往往需要在终端上附加许许多多其他的功能,比如:智能家居联动、车内环境监测、天气预报与网上浏览等! 作者强调:考虑到篇幅有限,作者

    2024年04月08日
    浏览(38)
  • 【IMX6ULL驱动开发学习】11.Linux之SPI驱动

    参考:驱动程序开发:SPI设备驱动_spi驱动_邓家文007的博客-CSDN博客 目录 一、SPI驱动简介 1.1 SPI架构概述 1.2 SPI适配器(控制器)数据结构 1.2 SPI设备数据结构 1.3 SIP设备驱动 1.4 接口函数  二、SPI驱动模板 SPI驱动框架和I2C驱动框架是十分相似的,不同的是因为SPI是通过片选引

    2024年02月11日
    浏览(38)
  • 【IMX6ULL驱动开发学习】12.Linux驱动之设备树

    承接上一篇博客 【IMX6ULL驱动开发学习】11.驱动设计之面向对象_分层思想(学习设备树过渡部分) 代码获取: https://gitee.com/chenshao777/imx6-ull_-drivers 我后面将三个层合并了(实际上只有前两层),合并成一个dev_drv.c了,暂时没有加GPIO操作,只是个框架 合并前的代码在 11.butt

    2024年02月13日
    浏览(35)
  • 【基于IMX6ULL开发板开机摄像头的自启动】

    这里简述项目相关背景: 最近在准备暑期实习和秋招,准备一个Camera项目,涉及调试内核、优化开机——从启动到获取第一帧图像的时间,硬件平台为 正点原子IMX6ULL开发板 ,摄像头为 OV5640 ,内核基于正点原子出厂linux源码,根文件系统暂时选择正点原子出厂文件系统 首先

    2024年02月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包