一、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();
}
至此,移植完毕。