哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux驅(qū)動開發(fā)-編寫NEC紅外線協(xié)議解碼驅(qū)動

DS小龍哥-嵌入式技術(shù) ? 2022-09-17 15:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

【摘要】 NEC協(xié)議是眾多紅外線協(xié)議中的一種,以前廣泛用在電視機(jī),投影儀設(shè)備里,很早之前經(jīng)常說的萬能電視遙控器就是NEC協(xié)議的;當(dāng)前文章就介紹如何在Linux下通過紅外線接收模塊,編寫一個(gè)NEC協(xié)議的紅外線解碼驅(qū)動,解析遙控器傳輸過來的各種控制指令,完成對應(yīng)的動作響應(yīng);驅(qū)動里用到了外部中斷接收數(shù)據(jù),通過定時(shí)器計(jì)算間隔時(shí)間完成解碼。

1. 紅外線知識點(diǎn)介紹

在光譜中波長自760nm至400um的電磁波稱為紅外線,它是一種不可見光。目前幾乎所有的視頻和音頻設(shè)備都可以通過紅外遙控的方式進(jìn)行遙控,比如電視機(jī)、空調(diào)、影碟機(jī)等,都可以見到紅外遙控的影子。這種技術(shù)應(yīng)用廣泛,相應(yīng)的應(yīng)用器件都十分廉價(jià),因此紅外遙控是我們?nèi)粘TO(shè)備控制的理想方式。

紅外線遙控是目前使用最廣泛的一種通信和遙控手段。由于紅外線遙控裝置具有體積小、功耗低、功能強(qiáng)、
成本低等特點(diǎn),因而,繼彩電、錄像機(jī)之后,在錄音機(jī)、音響設(shè)備、空凋機(jī)以及玩具等其它小型電器裝置上也紛
紛采用紅外線遙控。工業(yè)設(shè)備中,在高壓、輻射、有毒氣體、粉塵等環(huán)境下,采用紅外線遙控不僅完全可靠而且
能有效地隔離電氣干擾。

NEC協(xié)議是眾多紅外線協(xié)議中的一種,以前廣泛用在電視機(jī),投影儀設(shè)備里,很早之前經(jīng)常說的萬能電視遙控器就是NEC協(xié)議的。

當(dāng)前文章就介紹如何在Linux下通過紅外線接收模塊,編寫一個(gè)NEC協(xié)議的紅外線解碼驅(qū)動,解析遙控器傳輸過來的各種控制指令,完成對應(yīng)的動作響應(yīng);驅(qū)動里用到了外部中斷接收數(shù)據(jù),通過定時(shí)器計(jì)算間隔時(shí)間完成解碼。

NEC協(xié)議的特點(diǎn)如下:

單個(gè)碼一共分為5各部分(沒有算重復(fù)碼): 引導(dǎo)碼+用戶碼+用戶反碼+按鍵碼+按鍵反碼

對于接收方_引導(dǎo)碼: 9ms的低電平+4.5ms的高電平。

接收的數(shù)據(jù)是0: 560us低電平+560us高電平

接收的數(shù)據(jù)是1: 560us低電平+1680us高電平

image-20220106112451549image-20220106111805216

2. 硬件環(huán)境

當(dāng)前開發(fā)板采用友善之臂的Tiny4412,CPU三星的EXYNOS4412,最高主頻為1.5GHZ,Linux內(nèi)核版本是3.5。

下面是紅外線接收模塊原理圖:

image-20220106111542287

通過杜邦線接在開發(fā)板的中斷輸入腳上:(GPX1_0接口上,第9個(gè)排針。)

image-20220106112325813

驅(qū)動安裝后,解碼的效果:

image-20220106112527780

3. 案例代碼

驅(qū)動代碼思路: 采用外部中斷接收NEC的數(shù)據(jù),在工作隊(duì)列里完成協(xié)議解析,最終通過printk打印出來。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

static int irq;
#define NEC_INFRARED_GPIO EXYNOS4_GPX1(0)
static struct work_struct work;

/*獲取高電平持續(xù)時(shí)間--us單位*/
static u32 GetTimeH(void)
{
	ktime_t my_time,my_time2;
	unsigned int i,j;
	my_time=ktime_get(); //獲取當(dāng)前時(shí)間
	i=ktime_to_us(my_time); //轉(zhuǎn) us
	while(gpio_get_value(NEC_INFRARED_GPIO)){}
	my_time2=ktime_get(); //獲取當(dāng)前時(shí)間
	j=ktime_to_us(my_time2); //轉(zhuǎn) us
	return j-i;
}

/*獲取低電平持續(xù)時(shí)間--us單位*/
static u32 GetTimeL(void)
{
	ktime_t my_time,my_time2;
	unsigned int i,j;
	my_time=ktime_get(); //獲取當(dāng)前時(shí)間
	i=ktime_to_us(my_time); //轉(zhuǎn) us
	while(gpio_get_value(NEC_INFRARED_GPIO)==0){}
	my_time2=ktime_get(); //獲取當(dāng)前時(shí)間
	j=ktime_to_us(my_time2); //轉(zhuǎn) us
	return j-i;
}

/*
工作函數(shù)
*/
static u8 buf[4];//[0]用戶碼  [1]用戶反碼 [2]按鍵碼  [3]按鍵反碼
static void new_work_func(struct work_struct *work)
{
	u8 data=0;
	u32 time_us;
	/*1. 判斷引導(dǎo)碼*/
	time_us=GetTimeL();
	if(time_us>12000 || time_us <7000)return;  //標(biāo)準(zhǔn)9000
	time_us=GetTimeH();
	if(time_us>6000 || time_us <3000)return;  //標(biāo)準(zhǔn)4500
	/*2. 接收32位數(shù)據(jù)*/
	int i,j;
	for(i=0;i<4;i++)
	{
		for(j=0;j<8;j++)
		{
			time_us=GetTimeL();
			if(time_us>700 || time_us <400)return;  //標(biāo)準(zhǔn)560
			time_us=GetTimeH();
			if(time_us<700 && time_us>400)  // 0 :標(biāo)準(zhǔn)560
			{
				data<<=1;
			}
			else if(time_us<1800 && time_us>1500)  // 1 :標(biāo)準(zhǔn)1680
			{
				data<<=1;
				data|=0x01;
			}
			else
			{
				return;
			}
		}
		buf[i]=data;
	}
	printk("用戶碼:%d,按鍵碼:%d\n",buf[0],buf[2]);
}

/*中斷服務(wù)函數(shù)*/
irqreturn_t nec_irq_handler_func(int irq, void *dev)
{
	/*添加工作到工作隊(duì)列*/
	schedule_work(&work);
	return IRQ_HANDLED;
}

static int __init tiny4412_hello_module_init(void)
{
	/*初始化工作函數(shù)*/
	INIT_WORK(&work,new_work_func);
	/*1. 獲取中斷號*/
	irq=gpio_to_irq(NEC_INFRARED_GPIO);
	/*2. 注冊中斷*/
	request_irq(irq,nec_irq_handler_func,IRQF_TRIGGER_FALLING,"tinyy412_nec",NULL);

    printk("驅(qū)動測試: 驅(qū)動安裝成功\n");
    return 0;
}

static void __exit tiny4412_hello_module_cleanup(void)
{
	free_irq(irq,NULL);
    printk("驅(qū)動測試: 驅(qū)動卸載成功\n");
}

module_init(tiny4412_hello_module_init);    /*驅(qū)動入口--安裝驅(qū)動的時(shí)候執(zhí)行*/
module_exit(tiny4412_hello_module_cleanup); /*驅(qū)動出口--卸載驅(qū)動的時(shí)候執(zhí)行*/

MODULE_LICENSE("GPL");  /*設(shè)置模塊的許可證--GPL*/
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 紅外線
    +關(guān)注

    關(guān)注

    14

    文章

    629

    瀏覽量

    59126
  • NEC
    NEC
    +關(guān)注

    關(guān)注

    0

    文章

    240

    瀏覽量

    101006
  • 解碼
    +關(guān)注

    關(guān)注

    0

    文章

    189

    瀏覽量

    28847
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何理解Linux內(nèi)核中的PCIe驅(qū)動

    我們習(xí)慣了用 Verilog 去死磕 PCIe 的底層協(xié)議狀態(tài)機(jī)。但一旦越過硬件邊界來到操作系統(tǒng)層面,Linux 內(nèi)核是如何接管并驅(qū)動這些 PCI/PCIe 設(shè)備的呢?由于不同的 CPU 架構(gòu)實(shí)現(xiàn)了
    的頭像 發(fā)表于 04-11 17:22 ?1157次閱讀

    紅外遙控 NEC 解碼終于搞懂了!看完直接抄作業(yè)

    從波形抓取到按鍵映射,手把手教你搞定NEC協(xié)議解碼紅外遙控解碼的朋友,有沒有過這種絕望:邏輯分析儀抓了一堆波形,看著像
    的頭像 發(fā)表于 03-26 19:34 ?215次閱讀
    <b class='flag-5'>紅外</b>遙控 <b class='flag-5'>NEC</b> <b class='flag-5'>解碼</b>終于搞懂了!看完直接抄作業(yè)

    Linux內(nèi)核驅(qū)動開發(fā)的技術(shù)核心精要

    嵌入式Linux驅(qū)動開發(fā)是連接硬件與操作系統(tǒng)的關(guān)鍵環(huán)節(jié)。隨著內(nèi)核演進(jìn)(如Linux 6.13)和硬件復(fù)雜度提升,開發(fā)者需掌握并發(fā)控制、中斷分
    發(fā)表于 03-10 13:56

    迅為Hi3403開發(fā)驅(qū)動教程全面上線,開啟嵌入式Linux開發(fā)新篇章!

    迅為iTOP-Hi3403開發(fā)linux驅(qū)動教程全面上線,開啟嵌入式Linux開發(fā)新篇章!
    的頭像 發(fā)表于 12-18 14:23 ?841次閱讀
    迅為Hi3403<b class='flag-5'>開發(fā)</b>板<b class='flag-5'>驅(qū)動</b>教程全面上線,開啟嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>開發(fā)</b>新篇章!

    Linux驅(qū)動開發(fā)的必備知識

    、內(nèi)核模塊編程: 掌握內(nèi)核模塊的編寫、編譯、加載和卸載方法。 了解內(nèi)核模塊的初始化和清理函數(shù)的編寫。 5、設(shè)備驅(qū)動框架: 熟悉字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備等驅(qū)動框架。 能夠根據(jù)
    發(fā)表于 12-04 07:58

    迅為iTOP-3568開發(fā)板?Linux驅(qū)動開發(fā)實(shí)戰(zhàn):menuconfig圖形化配置實(shí)驗(yàn)

    迅為iTOP-3568開發(fā)板?Linux驅(qū)動開發(fā)實(shí)戰(zhàn):menuconfig圖形化配置實(shí)驗(yàn)
    的頭像 發(fā)表于 11-24 15:29 ?898次閱讀
    迅為iTOP-3568<b class='flag-5'>開發(fā)</b>板?<b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>實(shí)戰(zhàn):menuconfig圖形化配置實(shí)驗(yàn)

    【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568開發(fā)Linux驅(qū)動開發(fā)實(shí)戰(zhàn):RK3568內(nèi)核模塊符號導(dǎo)出詳解

    【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568開發(fā)Linux驅(qū)動開發(fā)實(shí)戰(zhàn):RK3568內(nèi)核模塊符號導(dǎo)出詳解
    的頭像 發(fā)表于 11-21 13:25 ?1533次閱讀
    【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568<b class='flag-5'>開發(fā)</b>板<b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>實(shí)戰(zhàn):RK3568內(nèi)核模塊符號導(dǎo)出詳解

    【免費(fèi)送書】成為硬核Linux開發(fā)者:《Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)》

    Linux系統(tǒng)的設(shè)備驅(qū)動開發(fā),一直給人門檻較高的印象,主要因內(nèi)核機(jī)制抽象、需深度理解硬件原理、開發(fā)調(diào)試難度大所致。2021年,一本講解驅(qū)動
    的頭像 發(fā)表于 11-18 08:06 ?1701次閱讀
    【免費(fèi)送書】成為硬核<b class='flag-5'>Linux</b><b class='flag-5'>開發(fā)</b>者:《<b class='flag-5'>Linux</b> 設(shè)備<b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>(第 2 版)》

    【書籍評測活動NO.67】成為硬核Linux開發(fā)者:《Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)》

    開發(fā)設(shè)備驅(qū)動和板級支持包。截至目前,Linux仍是嵌入式系統(tǒng)領(lǐng)域的主流內(nèi)核,幾乎廣泛應(yīng)用于工業(yè)界的所有領(lǐng)域,這主要得益于其功能強(qiáng)大的子系統(tǒng)。因此,約翰·馬迪厄編寫本書,向廣大
    發(fā)表于 11-17 17:52

    迅為3568開發(fā)板從零學(xué)習(xí)Linux驅(qū)動開發(fā):迅為一站式資料包如何讓我效率翻倍

    迅為3568開發(fā)板從零學(xué)習(xí)Linux驅(qū)動開發(fā):迅為一站式資料包如何讓我效率翻倍
    的頭像 發(fā)表于 11-05 11:16 ?503次閱讀
    迅為3568<b class='flag-5'>開發(fā)</b>板從零學(xué)習(xí)<b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>:迅為一站式資料包如何讓我效率翻倍

    應(yīng)用在智能眼鏡紅外線感測領(lǐng)域中的光距感芯片-WH4530A

    接近光傳感芯片是一種可以檢測物體距離和位置的傳感器。它的工作原理基于光電效應(yīng)。當(dāng)某個(gè)物體與接近光傳感器靠近時(shí),傳感器會發(fā)出一束紅外線。
    的頭像 發(fā)表于 08-05 09:26 ?964次閱讀
    應(yīng)用在智能眼鏡<b class='flag-5'>紅外線</b>感測領(lǐng)域中的光距感芯片-WH4530A

    紅外線水分測定儀XKCON-NIR-MA-FV采用近紅外光譜技術(shù)(NIR)對棉纖維的含水率,進(jìn)行又快又準(zhǔn)的無損測量

    紅外線水分測定儀XKCON-NIR-MA-FV將“看不見的棉纖維含水率”變?yōu)椤翱勺x的數(shù)字”,它在紡織企業(yè)的應(yīng)用推動了棉纖維含水率大小的智能化控制。近年來,近紅外線水分測定儀在紡織、造紙、食品、煙草、糧食等眾多行業(yè)的各類場景中應(yīng)用,為企業(yè)的智能化監(jiān)管提供了精確的數(shù)據(jù)支持。
    的頭像 發(fā)表于 07-08 15:47 ?733次閱讀
    近<b class='flag-5'>紅外線</b>水分測定儀XKCON-NIR-MA-FV采用近<b class='flag-5'>紅外</b>光譜技術(shù)(NIR)對棉纖維的含水率,進(jìn)行又快又準(zhǔn)的無損測量

    cyw20829能不能使用紅外線解碼嗎?

    cyw20829能不能使用紅外線解碼
    發(fā)表于 07-03 06:49

    單片機(jī)實(shí)例項(xiàng)目:NEC紅外線協(xié)議編碼與解碼

    單片機(jī)實(shí)例項(xiàng)目:NEC紅外線協(xié)議編碼與解碼,推薦下載!
    發(fā)表于 06-03 22:03

    itop-3568開發(fā)驅(qū)動開發(fā)指南-實(shí)驗(yàn)程序的編寫

    本實(shí)驗(yàn)對應(yīng)的網(wǎng)盤路徑為:iTOP-RK3568 開發(fā)板【底板 V1.7 版本】\\\\03_【iTOP-RK3568開發(fā)板】指南教程\\\\02_Linux 驅(qū)動配套資料\\\\04_
    發(fā)表于 05-19 10:26
    黄梅县| 大同县| 扎兰屯市| 福建省| 丰城市| 清苑县| 红桥区| 防城港市| 莆田市| 江川县| 嘉善县| 神木县| 吉首市| 江华| 义马市| 宁河县| 台前县| 沙湾县| 绩溪县| 西畴县| 峨山| 抚州市| 巴南区| 巴马| 无为县| 安陆市| 白银市| 土默特右旗| 瓦房店市| 临颍县| 罗定市| 石阡县| 台湾省| 吉林市| 太仓市| 渑池县| 韶关市| 广州市| 海口市| 鹤峰县| 紫金县|