RadioIrqProcess函数详细分析与流程图

RadioIrqProcess函数详细分析与流程图

函数功能分析

RadioIrqProcess函数是SX126x LoRa模块的中断处理核心函数,负责检测和处理所有来自LoRa模块的中断事件。该函数通过轮询方式检查DIO引脚状态,而不是使用中断驱动方式。

函数执行流程

  1. 检查DIO引脚状态:通过读取DIO引脚电平判断是否有中断发生
  2. 获取中断状态:读取SX126x的中断状态寄存器
  3. 清除中断标志:清除所有中断标志位
  4. 处理各类中断事件:根据中断状态寄存器的值,调用相应的回调函数

详细流程图

否 是 是 否 是 否 是 否 是 否 TX模式 是 否 RX模式 是 否 是 否 开始RadioIrqProcess DIO引脚为高电平? 退出函数 设置IrqFired = false 读取中断状态寄存器irqRegs 清除所有中断标志 检查中断类型 TX_DONE RadioEvents->TxDone != NULL? 调用TxDone回调 RX_DONE RadioEvents->RxDone != NULL? 读取Payload和状态 调用RxDone回调 CRC_ERROR RadioEvents->RxError != NULL? 调用RxError回调 CAD_DONE RadioEvents->CadDone != NULL? 检查活动检测标志 调用CadDone回调 RX_TX_TIMEOUT 检查当前操作模式 RadioEvents->TxTimeout != NULL? 调用TxTimeout回调 PREAMBLE_DETECTED RadioEvents->RxTimeout != NULL? 调用RxTimeout回调 SYNCWORD_VALID HEADER_VALID HEADER_ERROR RadioEvents->RxTimeout != NULL? 调用RxTimeout回调 所有中断处理完成 退出函数

中断类型详细说明

1. TX_DONE (发送完成)

  • 触发条件:数据包发送完成
  • 处理动作 :调用TxDone回调函数
  • 应用场景:发送数据后切换到接收模式等待响应

2. RX_DONE (接收完成)

  • 触发条件:成功接收到数据包
  • 处理动作
    • 读取接收到的数据 payload
    • 获取数据包状态(RSSI, SNR等)
    • 调用RxDone回调函数
  • 应用场景:处理网关的响应数据

3. CRC_ERROR (CRC错误)

  • 触发条件:接收到的数据包CRC校验失败
  • 处理动作 :调用RxError回调函数
  • 应用场景:处理接收错误,可能重试或放弃

4. CAD_DONE (信道活动检测完成)

  • 触发条件:信道活动检测操作完成
  • 处理动作
    • 检查是否检测到活动
    • 调用CadDone回调函数
  • 应用场景:LoRaWAN中的CAD功能,检测信道是否空闲

5. RX_TX_TIMEOUT (收发超时)

  • 触发条件:接收或发送操作超时
  • 处理动作
    • 根据当前操作模式(TX或RX)
    • 调用相应的超时回调函数
  • 应用场景:处理发送或接收超时情况

6. PREAMBLE_DETECTED (前导码检测)

  • 触发条件:检测到前导码
  • 处理动作:无操作(可添加自定义处理)
  • 应用场景:高级应用中可以用于信号检测统计

7. SYNCWORD_VALID (同步字有效)

  • 触发条件:同步字匹配成功
  • 处理动作:无操作(可添加自定义处理)
  • 应用场景:验证数据包的有效性

8. HEADER_VALID (包头有效)

  • 触发条件:包头CRC校验成功
  • 处理动作:无操作(可添加自定义处理)
  • 应用场景:验证包头的完整性

9. HEADER_ERROR (包头错误)

  • 触发条件:包头CRC校验失败
  • 处理动作 :调用RxTimeout回调函数
  • 应用场景:处理包头错误,视为接收超时

与系统流程的整合

在您描述的系统流程中,RadioIrqProcess函数将在主循环中被频繁调用,用于处理LoRa模块的各种中断事件:

  1. Alarm A中断:读取传感器数据 → 进入Stop模式
  2. Alarm B中断:唤醒系统 → 发送数据 → 等待响应
  3. 主循环 :不断调用RadioIrqProcess处理LoRa中断
  4. 中断处理
    • 如果是TX_DONE,切换到接收模式
    • 如果是RX_DONE,处理响应并进入Stop模式
    • 如果是超时或错误,直接进入Stop模式

注意事项

  1. 轮询方式:当前实现使用轮询DIO引脚的方式,而不是真正的中断驱动
  2. 性能考虑:频繁调用此函数可能会增加CPU负载,在低功耗应用中需要注意
  3. 中断标志清除:函数会清除所有中断标志,确保不会重复处理同一中断
  4. 回调函数检查:每次调用回调函数前都会检查是否为NULL,避免空指针异常
  5. SPI操作:函数内部包含SPI读写操作,确保SPI配置正确且无冲突

这种设计使得LoRa模块的中断处理可以与主循环很好地集成,同时保持代码的清晰性和可维护性。

相关推荐
AscendKing3 小时前
开源白板工具(SaaS),一体化白板,包含思维导图、流程图、自由画等
开源·流程图·好好学电脑·hhxdn.com
程思扬12 小时前
开源 + 实时 + 无网络限制:Excalidraw 是流程图协作新选择
网络·人工智能·阿里云·ai·开源·流程图
程途拾光15812 小时前
用流程图优化工作流:快速识别冗余环节,提升效率
大数据·论文阅读·人工智能·流程图·论文笔记
SHIPKING3932 天前
【python】全流程图文安装教程
流程图
Crazy Struggle4 天前
WPF 如何支撑一个灵活的流程图编辑器?
.net·wpf·流程图
Macbethad4 天前
用流程图去描述一个蓝牙BLE数字钥匙的初始化连接过程
服务器·网络·流程图
GIS学姐嘉欣5 天前
常见二三维GIS数据分类及处理流程图
流程图·gis·webgis
qiaochuanbiao6 天前
三种方式修改AI生成的流程图,实现无损放大
流程图
GIS开发特训营13 天前
常见二三维GIS数据分类及处理流程图
学习·流程图·gis·gis开发·webgis
JZC_xiaozhong20 天前
OA 审批流与业务流程引擎区别:企业流程自动化进阶
运维·自动化·流程图·bpm·业务流程管理·流程设计可视化·流程监控