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模块的中断处理可以与主循环很好地集成,同时保持代码的清晰性和可维护性。

相关推荐
lusasky2 天前
ProcessOn流程图导入WPS:完整解决方案
流程图·wps·processon
J_Xiong01172 天前
【VLNs篇】19:DualVLN(InternNav)模型结构和流程图及生成代码
机器人·流程图
小二·2 天前
AI工程化实战《四》:多模态 RAG 全解——让 AI 看懂 PDF 表格、扫描件与流程图
人工智能·pdf·流程图
热爱专研AI的学妹3 天前
【搭建工作流教程】使用数眼智能 API 搭建 AI 智能体工作流教程(含可视化流程图)
大数据·数据库·人工智能·python·ai·语言模型·流程图
小飞将5 天前
VS code流程图插件mermaid使用
流程图
爱好读书5 天前
AI生成流程图
人工智能·流程图
中维ZWPD6 天前
打破工业软件分类桎梏:ZWPD的实践探索与创新突破
人工智能·3d·流程图
IT界的奇葩8 天前
OAuth2 单点登录流程图
java·流程图·oauth2·单点登录·sso
Jeking2178 天前
进阶流程图绘制工具 Unione Flow Editor-- 击破样式痛点:全维度自定义解决方案
前端·流程图·workflow·unione flow·flow editor·unione cloud
nell_lee8 天前
利用ai快速绘制流程图/流程图自动迁移/快速格式化流程图
流程图