树莓派移植SX1278 LoRa通信--使用wiringPi 移植GPIO中断

一、SX1278 数字接口状态映射

从官方文档可知sx1278的数字接口状态映射明细,移植的代码中主要用查询的方式来判断在连续模式下是否接收和发送完成,因此只需要用到DIO0。如果要用到CAD,则需要DIO1管脚。

发送时:DioMapping1寄存器写入01,查询DIO0是否TxDone(管脚拉高,上升沿)。

接受时:DioMapping1寄存器写入00,查询DIO0是否RxDone(管脚拉高,上升沿)。

二、移植树莓派的WiringPi的GPIO中断

wiringPi 库支持GPIO中断操作,而且很简单。提供的GPIO外部中断源类型可以是以下几种:

  • INT_EDGE_FALLING:下降沿
  • INT_EDGE_RISING:上升沿
  • INT_EDGE_BOTH: 可上升沿也可以下降沿
  • INT_EDGE_SETUP:保持原有的GPIO初始方式

使用时用wiringPiISR函数进行注册。

函数原型:

               int  wiringPiISR (int pin, int mode, void (*function)(void)) ;

参数说明:

  •         pin:wiringPi定义的管脚号
  •         mode:外部中断源类型,上升沿、下降沿等
  •         function:中断回调函数的指针,即中断发生时需要执行的函数

具体操作步骤如下:

1、定义SX1278 DIO0的管脚

#define DIO0_PIN  23

2、管脚的初始化和中断函数注册

/*!
* \brief   Initialize RasperryPi GPIO which connects to Sx1278 DIO0 with WiringPi driver
* \para    none
* \retval  none
*/
void LoRa_GPIO_Init(void)				
{wiringPiSetup();	pinMode(DIO0_PIN, INPUT);pullUpDnControl (DIO0_PIN, PUD_DOWN);wiringPiISR(DIO0_PIN,INT_EDGE_RISING,&EXTI0_IRQHandler);
}

主要是设置DIO0_PIN为输入模式,设置下拉,然后注册外部中断函数EXT0_IRQHandler.

3、实现中断标志查询操作

/*!
* \brief   Sx1278 DIO0 interrupt callback to deal with LoRa statemachine
* \para    none
* \retval  none
*/
void EXTI0_IRQHandler(void)
{LoRaHandler();
}

至此,移植完毕。

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

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

相关文章

VMware View 与 Citrix Xendesktop 管理大比拼

一篇写得非常不错的博文,从管理角度来对比虚拟桌面产品的差异,而这一点往往被代理商和用户忽略,值得花时间看看。 大部分用户决定使用桌面虚拟化的最大原因是简化管理。我深刻的记得2006年在X福记用户那推补丁管理软件时,结…

matlab 画箱线图boxplot简单用法

代码示例: data1rand(5,1);%列向量 data2rand(5,1);%列向量 data3rand(5,1);%列向量 data[data1,data2,data3]; boxplot(data,Labels,{data1,data2,data3}); 更多请参考: matlab官网文档:https://www.mathworks.com/help/stats/boxplot.htm…

“FormCRUD.csProj.FormMain.Name”隐藏了继承的成员“System.Windows.Forms.Control.Name”。如果是有意隐藏,请使用关键字 new。...

“FormCRUD.csProj.FormMain.Name”隐藏了继承的成员“System.Windows.Forms.Control.Name”。如果是有意隐藏,请使用关键字 new。 一旦运行就显示:“FormCRUD.csProj.FormMain.Name”隐藏了继承的成员“System.Windows.Forms.Control.Name”。如果是有意…

VC++文件监控(一) ReadDirectoryChangesW

From: http://www.cnblogs.com/doublesnke/archive/2011/08/16/2141374.html VC实施文件监控:实例和详解 相关帮助: http://hi.baidu.com/jiahaosoft/blog/item/b441d1218eebece0d6cae274.html 我这里只介绍采用ReadDirectoryChangesW对文件目录实施监控 关键代码…

深度学习--Matlab使用LSTM长短期记忆网络对负荷进行分类

一、概述 关于LSTM同系列的前一篇文章写的是利用LSTM网络对电力负荷进行预测【LSTM预测】,其本质是sequence-to-sequence problems,序列到序列的预测应用。这里做一下sequence-to-label classification problems,序列到标签的分类应用【LSTM…

VC跨进程数据(结构体)传递-WM_COPYDATA

两个测试程序,都是MFC基于对话框的应用程序,一个是发送者,一个是接收者。 两个程序都使用同一个结构体: typedef struct {char imsi[20];char options[512]; }_tagResult;发送者:按钮点击事件: void CCa…

咨询的真相8:咨询业的“前世今生”

第四节 咨询业的奶酪究竟有多大 2001年,又是从美国,传来了一本风靡全球的畅销书,讲的是四个老鼠和一块奶酪的故事。从此,奶酪就成了众人争抢之物的代名词。美国人的创新精神不得不佩服,忒俗的一个道理经他们仅从形式上…

带界面的OCX制作实例

制作一个有界面的OCX,并进行测试。代码下载 一、制作一个有界面的OCX: 设置该对话框的属性(关键噢): 给添加的对话框资源关联一个类CDlgTest,基类是:CDialog,如下: 给CO…

从淘宝数据结构来看电子商务中商品属性设计

淘宝名词解释 产品 和 商品的区别: 淘宝标准化产品,由类目关键属性唯一确定。如:手机类目,关键属性是品牌和型号,Nokia N95就是一个产品,nokia是品牌,N95是型号。产品除了关键属性还包括一般信息、销售属性和非关键属性…

linux串口驱动分析

linux串口驱动分析硬件资源及描述 s3c2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行 I/O(SIO)端口,每个端口都可以在中断模式或 DMA 模式下操作。UART 使用系统时钟可以支持最高 115.2Kbps 的波特率。每…

Linux 进程通信 -- 信号

一、概述 信号用于保持进程间的通信,可以备发送到一个进程或者一组进程,发送给进程的这个唯一信息通常是标志信号的一个数。信号可从键盘终端产生、虚拟内存中非法访问系统资源等情况下产生。信号异步发生,收到信号的进程可以采取某种动作或…

简单理解Socket

TCP/IP 要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准&…

write() vs. writev()

From: http://www.cppblog.com/whoami17/archive/2009/05/10/82452.html 今天突然想比较一下 write() 和 writev() 的性能, 网上google了半天, 竟然没有发现一点有关的数据信息, 自己就测试了一下。 平台如下: CentOS 5.2 Lin…

linux下GPRS模块ppp拨号上网

交叉编译器:arm-linux-gcc-4.5.4 Linux内核版本:Linux-3.0 主机操作系统:Centos 6.5 开发板:FL2440 GPRS:SIM900A 在开发SIM900模块之前,开发板已经加载了linux内核以及文件系统&#xf…

高级I/O(七)--readv和writev函数

From: http://blog.chinaunix.net/uid-26822401-id-3158225.html readv和write函数让我们在单个函数调用里从多个不连续的缓冲里读入或写出。这些操作被称为分散读&#xff08;scatter read&#xff09;和集合写&#xff08;gather write&#xff09;。 #include <sys/uio…

Linux下如何定位Java进程CPU利用率过高原因

首先通过Top命令查看占用CPU较高的进程PID&#xff0c;执行Top之后按1可以查看每个核占用比例 1 top这里由于我是用的虚拟机&#xff0c;即使我的Java进程占用CPU很高也只是占的虚拟机的&#xff0c;而对整个机器的CPU来说占的并不高。这里我们找到了pid7957 然后我们在根据pi…

【iOS开发】企业版证书($299)In-House方式发布指南

一、明确几个概念 1、企业版IDP&#xff1a;即iOS Development Enterprise Program。注意是$299&#xff0f;Year那种&#xff0c;并不是$99/Year的那种。 2、In House&#xff1a;是只企业内部发布&#xff0c;仅限企业内部人员使用。 二、In-House方式特点 1、不能发布到Appl…

RMSE、MAPE、准确率、召回率、F1、ROC、AUC总结

RMSE(root mean square error)均方根误差 单纯统计误差的值。 MAPE(mean absolute percentage error) 平均百分比误差 存在一个和原始数据相比较的过程。 准确率&#xff08;precision&#xff09;P&#xff1a; PTP/(TPFP) TP(true positive) FP(false positive) P是代表预…

hdu 5317 RGCDQ (2015多校第三场第2题)素数打表+前缀和相减求后缀(DP)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid5317 题意&#xff1a;F(x) 表示x的不同质因子的个数结果是求L&#xff0c;R区间中最大的gcd( F(i) , F(j) )&#xff0c;i、j在L&#xff0c;R区间内。 思路&#xff1a;因为2<L < R<1000000&#xf…

MATLAB 中RMSE和MAPE的计算方法

RMSE&#xff1a;均方根误差 matlab计算方法&#xff1a; rmse sqrt(mean((YPred-Obverval).^2)); MAPE&#xff1a;平均百分比误差 matlab计算方法&#xff1a; meap mean(abs((observed - predicted)./observed))*100;