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

相关推荐
zzywxc7871 天前
AI在金融、医疗、教育、制造业等领域的落地案例
人工智能·机器学习·金融·prompt·流程图
趣学习2 天前
A043基于博途西门子1200PLC自动售货机系统仿真A043自动售货机+S71200+HMI+主电路图+外部接线图+流程图+IO分配表
毕业设计·流程图·课程设计·plc·西门子
kebeiovo4 天前
项目必备流程图,类图,E-R图实例速通
开发语言·r语言·流程图
晋人在秦 老K4 天前
入梦工具箱怎么检测硬件?3步完成CPU-Z跑分测试 硬件检测总出错?图吧工具箱免费功能实测 draw.io 部署指南:私有化流程图服务搭建教程
测试工具·流程图·工具·draw.io
zzywxc7874 天前
AI在金融、医疗、教育、制造业等领域的落地案例(含代码、流程图、Prompt示例与图表)
人工智能·spring·机器学习·金融·数据挖掘·prompt·流程图
ui小新7 天前
什么是流程图:流程六要素、三大结构及绘制规范总结
流程图·设计工具·流程图设计
小道士写程序7 天前
如何简单理解状态机、流程图和时序图
java·开发语言·流程图
zzywxc7877 天前
深入探讨AI三大领域的核心技术、实践方法以及未来发展趋势,结合具体代码示例、流程图和Prompt工程实践,全面展示AI编程的强大能力。
人工智能·spring·机器学习·ios·prompt·流程图·ai编程
皆过客,揽星河8 天前
c语言程序之魂——算法(练习题,流程图,程序源码)
c语言·算法·流程图·源码·辗转相除法·c语言程序设计
晓风残月淡8 天前
Mermaid流程图更改样式的方法
css·流程图·css3