【驱动篇】龙芯LS2K0300之红外驱动

实验目标

编写HX1838红外接收器驱动,根据接收的波形脉冲解码红外按键键值

模块连接

模块连接:VCC接Pin 2,GND接Pin1,DATA接Pin16

在这里插入图片描述

驱动代码

HX1838 GPIO初始化,申请中断,注意:GPIO48默认是给i2c0使用的,使用前记得注释掉i2c0设备树节点

#define CODE_SIZE 4
#define HX1838_IO 48
#define TIME_UNIT 140
#define GPIO_VALUE gpio_get_value(HX1838_IO)static int __init hx1838_init(void)
{int ret;int irq = gpio_to_irq(HX1838_IO);printk("irq : %d\n", irq);gpio_request(HX1838_IO, "hx1838-gpio");gpio_direction_input(HX1838_IO);ret = request_irq(irq, irq_callback, IRQF_TRIGGER_FALLING, "hx1838-irq", NULL);if (ret < 0)goto LABEL;return 0;LABEL:gpio_free(HX1838_IO);return ret;
}

中断处理函数,解码格式:地址码 + 地址码反码 + 数据码 + 数据码反码,13.5ms为前导波形信号,第56行需要注意数据取反默认是32位的(需要强制转换)

typedef unsigned char uchar;static uchar array[CODE_SIZE];irqreturn_t irq_callback(int irqno, void *arg)
{unsigned char j,k,N=0;udelay(15 * TIME_UNIT);if (GPIO_VALUE == 1){// printk("111\n");return IRQ_HANDLED;}while (!GPIO_VALUE)  {udelay(TIME_UNIT);}                                       for (j=0; j < 4; j++)                                          {for (k = 0; k < 8; k++)                                {while (GPIO_VALUE)                                  {udelay(TIME_UNIT);}while (!GPIO_VALUE)                                {udelay(TIME_UNIT);}while (GPIO_VALUE)                                  {udelay(TIME_UNIT);N++;           if (N >= 30){// printk("222\n");return IRQ_HANDLED;}                                              } array[j] = array[j] >> 1;                            if(N >= 8){array[j] = array[j] | 0x80;                     }  N = 0;}}      if(array[2] != (unsigned char)(~array[3])){// printk("333\n");return IRQ_HANDLED;}printk("%d,%d,%d,%d\n", array[0], array[1], array[2], array[3]);return IRQ_HANDLED;
}

完整驱动代码

#include <linux/init.h>
#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/gpio.h>#define CODE_SIZE 4
#define HX1838_IO 48
#define TIME_UNIT 140
#define GPIO_VALUE gpio_get_value(HX1838_IO)typedef unsigned char uchar;static uchar array[CODE_SIZE];irqreturn_t irq_callback(int irqno, void *arg)
{unsigned char j,k,N=0;udelay(15 * TIME_UNIT);if (GPIO_VALUE == 1){// printk("111\n");return IRQ_HANDLED;}while (!GPIO_VALUE)  {udelay(TIME_UNIT);}                                       for (j=0; j < 4; j++)                                          {for (k = 0; k < 8; k++)                                {while (GPIO_VALUE)                                  {udelay(TIME_UNIT);}while (!GPIO_VALUE)                                {udelay(TIME_UNIT);}while (GPIO_VALUE)                                  {udelay(TIME_UNIT);N++;           if (N >= 30){// printk("222\n");return IRQ_HANDLED;}                                              } array[j] = array[j] >> 1;                            if(N >= 8){array[j] = array[j] | 0x80;                     }  N = 0;}}      if(array[2] != (unsigned char)(~array[3])){// printk("333\n");return IRQ_HANDLED;}printk("%d,%d,%d,%d\n", array[0], array[1], array[2], array[3]);return IRQ_HANDLED;
}static int __init hx1838_init(void)
{int ret;int irq = gpio_to_irq(HX1838_IO);printk("irq : %d\n", irq);gpio_request(HX1838_IO, "hx1838-gpio");gpio_direction_input(HX1838_IO);ret = request_irq(irq, irq_callback, IRQF_TRIGGER_FALLING, "hx1838-irq", NULL);if (ret < 0)goto LABEL;return 0;LABEL:gpio_free(HX1838_IO);return ret;
}static void __exit hx1838_exit(void)
{free_irq(gpio_to_irq(HX1838_IO), NULL);gpio_free(HX1838_IO);
}module_init(hx1838_init);
module_exit(hx1838_exit);MODULE_LICENSE("GPL");

Makefile文件

obj-m += irda.o 
KDIR:=/home/asensing/loongson/linux-4.19
ARCH=loongarch 
CROSS_COMPILE=loongarch64-linux-gnu-
PWD?=$(shell pwd) 
all:make -C $(KDIR) M=$(PWD) modules 

构建脚本

export PATH=$PATH:/home/asensing/loongson/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.3-1/bin
make -j8
# loongarch64-linux-gnu-gcc test.c -o test
FILE=$PWD/$(basename $PWD).ko
scp $FILE root@192.168.137.232:/home/root

实验效果

装载驱动模块,然后在红外遥控器下按下按键,可以看到打印的红外解码数据:地址及其反码,数据及其反码

在这里插入图片描述

参考

本次代码根据51单片机程序移植:HX1838红外无线遥控模块51单片机程序 - 51单片机 (51hei.com)

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

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

相关文章

2023-2024华为ICT大赛中国区 实践赛网络赛道 全国总决赛 理论部分真题

Part1 数通模块(10题)&#xff1a; 1、如图所示&#xff0c;某园区部署了IPv6进行业务测试&#xff0c;该网络中有4台路由器&#xff0c;运行OSPFv3实现网络的互联互通&#xff0c;以下关于该OSPFv3网络产生的LSA的描述&#xff0c;错误的是哪一项?(单选题) A.R1的LSDB中将存在…

Appium adb 获取appActivity

方法一&#xff08;最简单有效的方法&#xff09; 通过cmd命令&#xff0c;前提是先打开手机中你要获取包名的APP adb devices -l 获取连接设备详细信息 adb shell dumpsys activity | grep mFocusedActivity 有时获取到的不是真实的Activity 方法二 adb shell monkey -p …

【瑞吉外卖 | day01】项目介绍+后台登录退出功能

文章目录 瑞吉外卖 — day011. 所需知识2. 软件开发整体介绍2.1 软件开发流程2.2 角色分工2.3 软件环境 3. 瑞吉外卖项目介绍3.1 项目介绍3.2 产品原型展示3.3 技术选型3.4 功能架构3.5 角色 4. 开发环境搭建4.1 数据库环境搭建4.2 Maven项目构建 5. 后台系统登录功能5.1 创建需…

会声会影2024破解版下载 让视频编辑更简单、更有趣

在数字时代&#xff0c;视频已经成为我们生活中不可或缺的一部分。无论是记录生活、分享快乐&#xff0c;还是宣传产品、传递信息&#xff0c;视频都扮演着重要的角色。然而&#xff0c;对于很多人来说&#xff0c;视频编辑却是一个让人望而却步的领域。复杂的软件操作、繁琐的…

容器安全:等保合规性的基石

随着云计算和微服务架构的蓬勃发展&#xff0c;容器技术已经成为现代IT基础设施不可或缺的一部分。在网络安全等级保护制度&#xff08;等保&#xff09;的框架下&#xff0c;容器安全的要求日益凸显&#xff0c;成为等保合规性的基石。本文将深入探讨容器安全在等保中的重要性…

爽!强化学习+注意力机制,吞吐量提升了10多倍!

通过引入注意力机制&#xff0c;强化学习模型不仅能够更加高效地处理复杂的环境和任务&#xff0c;还能在学习和决策过程中实现更高的精度和适应性。 因此这种结合迅速成为了各大领域的研究热点&#xff0c;而且已经在实际应用中有了显著的性能提升。比如分散式强化学习框架SA…

在嵌入式商用里面哪款RTOS(实时操作系统)比较多人用?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 传统的RTOS和嵌入式Linu…

Qt中使用MySQL数据库详解,好用的模块类封装

本文将详细介绍如何在Qt应用程序中集成MySQL数据库&#xff0c;并封装实现好用的mysql数据库操作类。包括环境准备、连接数据库、执行查询及异常处理等关键步骤&#xff0c;同时包含mysql驱动的编译。分享给有需要的小伙伴&#xff0c;喜欢的可以点击收藏。 目录 环境准备 项…

javaSE期末练习题

文章目录 前言一、程序控制1.顺序结构问题描述解题思路题解 2.选择结构2.1 题1问题描述解题思路题解 2.1 题2问题描述解题思路题解 3.循环结构3.1 阶乘的求取问题描述解题思路题解 3.2 水仙花数问题描述解题思路题解 二、数组三、类与对象1.类与对象1.1圆类问题描述解题思路题解…

从云原生视角看 AI 原生应用架构的实践

本文核心观点&#xff1a; 基于大模型的 AI 原生应用将越来越多&#xff0c;容器和微服务为代表的云原生技术将加速渗透传统业务。API 是 AI 原生应用的一等公民&#xff0c;并引入了更多流量&#xff0c;催生企业新的生命力和想象空间。AI 原生应用对网关的需求超越了传统的路…

使用myCobot和OAK-D OpenCV DepthAI摄像头制作一个可以在眼前始终享受视频的手机支架!

引言 由于YouTube和Netflix的出现&#xff0c;我们开始躺着看手机。然而&#xff0c;长时间用手拿着手机会让人感到疲劳。这次我们制作了一个可以在你眼前保持适当距离并调整位置的自动移动手机支架&#xff0c;让你无需用手拿着手机。请务必试试&#xff01; 准备工作 这次我们…

电脑文件自动备份:构建坚不可摧的数据防护网

在数字化浪潮的推动下&#xff0c;电脑已成为我们日常生活和工作中不可或缺的一部分&#xff0c;它承载着海量的个人信息、工作文档、学习资料等重要数据。然而&#xff0c;随着数据量的不断膨胀&#xff0c;数据安全问题也日益严峻。硬盘故障、系统崩溃、病毒攻击、人为误操作…

【中项第三版】系统集成项目管理工程师 | 第 2 章 信息技术发展

前言 第2章对应的内容大概率仅考察选择题&#xff0c;通读教程&#xff0c;速战速决。选择题分值预计在2-5分&#xff0c;属于必考的知识点。 2.1 信息技术及其发展 信息技术是在信息科学的基本原理和方法下的关于一切信息的产生、信息的传输、信息的发送、信息的接收等应用技…

2Python的Pandas:读取数据

1.读取Excel文件 1.1.读取数据 import pandas as pd# Excel 文件的 URL 或本地路径 url "https://www.gairuo.com/file/data/dataset/team.xlsx"# 使用 Pandas 的 read_excel 函数读取数据 try:df pd.read_excel(url)print(df.head()) # 打印 DataFrame 的前几行…

k8s公网集群安装(1.23.0)

网上搜到的公网搭建k8s都不太一致, 要么说的太复杂, 要么镜像无法下载, 所以写了一个简洁版,小白也能一次搭建成功 使用的都是centos7,k8s版本为1.23.0 使用二台机器搭建的, 三台也是一样的思路1.所有节点分别设置对应主机名 hostnamectl set-hostname master hostnamectl set…

简述设计模式-代理模式

概述 代理模式&#xff1a;一个类代表另一个类的功能。代理模式通过引入一个代理对象来控制对员对象的访问。 举个例子&#xff0c;就像明星都有经纪公司&#xff0c;商业合作都是直接和经济公司沟通&#xff0c;不会直接和明星沟通。 律师和委托人就是代理关系&#xff0c;…

如何找BMS算法、BMS软件的实习

之前一直忙&#xff0c;好久没有更新了&#xff0c;今天就来写一篇文章来介绍如何找BMS方向的实习&#xff0c;以及需要具备哪些条件&#xff0c;我的实习经历都是在读研阶段找的&#xff0c;读研期间两段的实习经历再加上最高影响因子9.4分的论文&#xff0c;我的秋招可以说是…

C - Popcorn(abs358)

题意&#xff1a;有n个摊子&#xff0c;m个爆米花&#xff0c;想花费最少去的店铺买到所有的口味的爆米花&#xff0c;找到每一列都为‘o’的最少行数。 分析&#xff1a;用dfs寻找最少路径 #include<bits/stdc.h> using namespace std; typedef long long ll; char x;…

后台运行大师:HarmonyOS 3.0中如何轻松设置APP常驻后台

有不少人想要让某些常用的APP直接挂在后台&#xff0c;减少应用程序自动关闭的情况。这种需求&#xff0c;其实就是希望APP能够“保持在后台运行”。 本篇文章用14张图片、7大步骤&#xff0c;讲解手机如何将某个APP保持在后台运行。图片直接使用的是华为手机HarmonyOS 3.0的手…

ComfyUI教程,如何在 ComfyUI 中如何制作高质量白底图,一篇文章教会你!

前言 做电商的朋友都知道&#xff0c;一般平台都会有白底图的要求&#xff0c;在上传白底图后&#xff0c;商品在首页分类页、搜索分类页、品牌馆、电器城等场景中会有更多的露出机会&#xff0c;可能会获得更多的用户流量。 制作白底图本质就是要先抠图&#xff0c;一些抠图…