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

相关推荐
学术 学术 Fun2 天前
AI 流程图图片怎样变成可编辑文件?先修文字,再核对逻辑
流程图
学术 学术 Fun3 天前
截图转可编辑 PPT:旧流程图改步骤,不再靠白色方块遮字
powerpoint·流程图
tedcloud1234 天前
Docker Compose 部署 Immich:手机照片自动备份与常见故障排查
运维·前端·docker·容器·智能手机·开源·流程图
weixin_416660076 天前
AI 生成的 Mermaid 流程图和 LaTeX 公式,怎么一起导出到 Word?
人工智能·word·流程图·豆包
一只鹿鹿鹿6 天前
政务外网整体设计方案(PPT)
大数据·数据库·web安全·系统安全·流程图·政务
SunShaoLu7 天前
流程图工具怎么选:5 款产品的技术对比与选型实践
人工智能·职场和发展·流程图·效率工具
weixin_416660079 天前
AI 生成的流程图和公式,怎样一起导出到 Word?附可复用测试样例
word·流程图·markdown·豆包·deepseek
xiami_world10 天前
Xmind、Miro、博思白板AI怎么选?思维导图/流程图自动生成
人工智能·ai·信息可视化·流程图·xmind
微小冷1 个月前
用Mermaid画时序图
运维·流程图·时序图·mermaid·生命线
tedcloud1231 个月前
Wand-Enhancer:如何搭建一套远程开发与测试环境
前端·人工智能·macos·开源·流程图