树莓派移植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();
}

至此,移植完毕。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值