LoRa终端节点开发之旅⑤ - LoRa关键驱动文件SX1276.c(1)

LoRa终端节点开发之旅⑤ - - LoRa关键驱动文件SX1276.c(1)

  • 5.1 前言
  • 5.2 配置函数
  • 5.3 中断函数
    • void SX1276OnDio0Irq( void* context );
    • void SX1276OnDio1Irq( void* context );
    • void SX1276OnDio2Irq( void* context );
    • void SX1276OnDio3Irq( void* context );
    • void SX1276OnDio4Irq( void* context );
    • void SX1276OnDio5Irq( void* context );
  • 5.4 超时中断函数
    • void SX1276OnTimeoutIrq( void* context );
    • uint32_t SX1276GetTimeOnAir( RadioModems_t modem, uint8_t pktLen );
  • 5.5 模式设置函数
    • void SX1276SetSleep( void );
    • void SX1276SetStby( void );
    • void SX1276SetRx( uint32_t timeout );
    • void SX1276SetTx( uint32_t timeout );

5.1 前言

经过前面的枯燥笔记学习,相信你除了有一个可编译的工程,为了更深一步了解LoRa,我们一起走进SX1276文件,走进LoRa的基本驱动。

5.2 配置函数

void SX1276SetRxConfig( RadioModems_t modem, uint32_t bandwidth,
uint32_t datarate, uint8_t coderate,
uint32_t bandwidthAfc, uint16_t preambleLen,
uint16_t symbTimeout, bool fixLen,
uint8_t payloadLen,
bool crcOn, bool freqHopOn, uint8_t hopPeriod,
bool iqInverted, bool rxContinuous );
void SX1276SetTxConfig( RadioModems_t modem, int8_t power, uint32_t fdev,
uint32_t bandwidth, uint32_t datarate,
uint8_t coderate, uint16_t preambleLen,
bool fixLen, bool crcOn, bool freqHopOn,
uint8_t hopPeriod, bool iqInverted, uint32_t timeout )
这两个驱动程序也是LoRa最基本的驱动程序,通过这两个函数,能把LoRa芯片(SX1276)进行发送/接收的基本配置,有所不同,但可通过上个篇章慢慢继续参数对比

5.3 中断函数

void SX1276OnDio0Irq( void* context );

void SX1276OnDio1Irq( void* context );

void SX1276OnDio2Irq( void* context );

void SX1276OnDio3Irq( void* context );

void SX1276OnDio4Irq( void* context );

void SX1276OnDio5Irq( void* context );

这五个中断函数包含了中断响应机制SyncAddress、Preamble、TxReady、RxReady等等…
依据LoRa不同的工作模式,DIO中断机制也有所不同。
LoRa终端节点开发之旅⑤ - LoRa关键驱动文件SX1276.c(1)_第1张图片
LoRa芯片的FSK模式和LoRa模式,其相关的DIO中断配置在寄存器这里地方
在这里插入图片描述
实际上,它在这个官方驱动里面,包含了一个默认用法,存在函数里面void SX1272SetRx( uint32_t timeout );如:

 SX1272Write( REG_DIOMAPPING1, ( SX1272Read( REG_DIOMAPPING1 ) & RFLR_DIOMAPPING1_DIO0_MASK & RFLR_DIOMAPPING1_DIO2_MASK  ) | RFLR_DIOMAPPING1_DIO0_00 | RFLR_DIOMAPPING1_DIO2_00 );

详情里面的几个宏的定义,可以自己追踪。

5.4 超时中断函数

void SX1276OnTimeoutIrq( void* context );

uint32_t SX1276GetTimeOnAir( RadioModems_t modem, uint8_t pktLen );

5.5 模式设置函数

void SX1276SetSleep( void );

设置芯片进入睡眠模式,芯片进入睡眠后,功耗极低,1ua左右;

void SX1276SetStby( void );

设置芯片进入标准模式,芯片计入睡眠模式后,无法接收数据或者发送数据,可由这个函数唤醒

void SX1276SetRx( uint32_t timeout );

void SX1276SetTx( uint32_t timeout );

设置发送/接收超时时间,在该时间内,若没完成发送/接收,将无法再发送/接收,需要重新设置该函数

你可能感兴趣的:(LoRa终端节点开发之旅)