tft每日頭條

 > 科技

 > 怎樣知道0038接收器的引腳功能

怎樣知道0038接收器的引腳功能

科技 更新时间:2024-09-29 05:31:59

  怎樣知道0038接收器的引腳功能(HS0038紅外線接收器的編程)(1)

  來源:百問網_嵌入式Linux wiki_jz2440 新1期視頻維基教程 (視頻文字版)

  作者:韋東山

  本文字數:1687,閱讀時長:2分鐘

  先打印出原始數據

  irda_raw.c irda_raw.h

  獲取電平極性方式,當前引腳極性電平取反

  #include ../../s3c2440_soc.h #include irda_raw.h /* IRDA引腳 : EINT1/GPF1 */ static unsigned long long g_last_time = 0; /* * 配置GPIO, 注冊中斷 * 在中斷處理函數裡: 記錄中斷發生的時間, 跟上次中斷的時間比較, 計算出脈沖寬度 讀取引腳極性 把數據放入環型緩沖區 */ /* 先實現GPIO的基本操作 */ static void irda_data_cfg_as_eint(void) { /* 配置為中斷引腳 */ GPFCON GPFCON |= (2 /* 設置中斷觸發方式: 雙邊沿觸發 */ EXTINT0 |= (7 /* eint1 */ } static int irda_data_get(void) { /*如果bit1 等于1就表明高電平,返回1 */ if (GPFDAT 1)) return 1; else return 0; } /*irda中斷處理函數*/ void irda_irq(int irq) { /* 在中斷處理函數裡: 記錄中斷發生的時間, 跟上次中斷的時間比較, 計算出脈沖寬度 讀取引腳極性 把數據放入環型緩沖區 */ irda_raw_event event; /*獲得當前時間并賦值給cur*/ unsigned long long cur = get_system_time_us(); /*上次時間和這次時間的差值,也就是周期*/ event.duration = delta_time_us(g_last_time, cur); /*獲取引腳極性*/ event.pol = !irda_data_get(); /*我們需要環形緩沖區的函數放入環形緩沖區 */ ir_event_put( /*更新時間*/ g_last_time = cur; } /* 注冊中斷 仿照之前的按鍵中斷程序 */ void irda_init(void) { /*1. 配置為中斷引腳 * 2. 配置為雙邊沿觸發 */ irda_data_cfg_as_eint(); /*注冊中斷*/ register_irq(1, irda_irq); } /*測試原始數據*/ void irda_raw_test(void) { irda_raw_event event; unsigned long long pre = 0, cur; irda_init(); while (1) { /*如果從喚醒緩沖區讀到數據,就把它打印出來*/ if (0 == ir_event_get(&event)) { cur = get_system_time_us(); /*如果這次時間和上次時間相差遠的話,就打印回車換行*/ if (delta_time_us(pre, cur) 1000000) printf(\n\r pre = cur; /*使用三目運算符來判斷pol是高電平還是低電平*/ printf(%s %d us | , event.pol? hight : low, event.duration); } } }

  irda_raw.h定義極性和脈沖寬度結構體

  #ifndef _IRDA_RAW_H #define _IRDA_RAW_H typedef struct irda_raw_event { int pol; /* 極性 */ int duration; /* 脈沖寬度, us */ }irda_raw_event, *p_irda_raw_event; #endif /* _IRDA_RAW_H */

  測試代碼 修改main.c 在main主函數中增加

  irda_rae_test();

  修改Makefile 增加

  objs = sensors/irda/irda_raw.o

  編譯執行

  怎樣知道0038接收器的引腳功能(HS0038紅外線接收器的編程)(2)

  一開始時間很長是因為一上電的時候高電平,值打印的特别大,說明有問題

  irda中斷函數中沒有更新上一次的時間

  /*更新時間*/ g_last_time = cur;

  再次更新

  怎樣知道0038接收器的引腳功能(HS0038紅外線接收器的編程)(3)

  時間和數據格式符合時序要求

  「新品首發」STM32MP157開發闆火爆預售!首批僅300套

  ,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved