6.9 KiB
6.9 KiB
AUTOSAR 中断处理说明
AUTOSAR CP Release 4.4.0
原文:Explanation of Interrupt Handling within AUTOSAR(文档 ID 307)
翻译状态:已完成 v1
对应原文 PDF:
BSWGeneral/AUTOSAR_EXP_InterruptHandlingExplanation.pdf
文档标识
| 字段 | 值 |
|---|---|
| 文档标题 | AUTOSAR 中断处理说明(Explanation of Interrupt Handling within AUTOSAR) |
| 文档标识号 | 307 |
| 文档状态 | 正式版(Final) |
| 所属标准 | Classic Platform |
| 所属版本 | 4.4.0 |
文档变更历史(节选)
| 日期 | 版本 | 变更说明 |
|---|---|---|
| 2018-10-31 | 4.4.0 | 编辑性修订 |
| 2017-12-08 | 4.3.1 | 编辑性修订 |
| 2016-11-30 | 4.3.0 | 编辑性修订 |
| 2013-03-15 | 4.1.1 | R4.1 定稿 |
| 2007-12-21 | 3.0.1 | 初始发布 |
目录
- 介绍与文档目的
- 缩略语与简称
- 相关文档
- 中断配置概述
- 中断操作概述
- 中断操作步骤
- 中断配置
- 总结
1 介绍与文档目的
本文档解释 AUTOSAR 中断处理的机制和概念。它不是规范,而是说明性文档,帮助读者理解 AUTOSAR 如何处理中断。
读者应熟悉:
- OSEK/VDX OS 概念
- AUTOSAR 分层架构
- 微控制器中断机制
2 缩略语与简称
| 缩略语 | 描述 |
|---|---|
| ISR | Interrupt Service Routine(中断服务例程) |
| Cat1 | Category 1 interrupt(OS 不感知的中断) |
| Cat2 | Category 2 interrupt(OS 感知的中断) |
| OS | Operating System |
| ECU | Electronic Control Unit |
| ICU | Input Capture Unit(输入捕获单元) |
| IRQ | Interrupt Request(中断请求) |
3 相关文档
| 编号 | 名称 |
|---|---|
| [1] | AUTOSAR_EXP_LayeredSoftwareArchitecture |
| [2] | AUTOSAR_SRS_BSWGeneral |
| [3] | AUTOSAR_SWS_OS |
| [4] | AUTOSAR_SWS_ICUDriver |
| [5] | ISO 17356-3 OSEK/VDX OS |
4 中断配置概述
AUTOSAR 中断配置涉及三个层级:
- 硬件层:微控制器的中断控制器(如 NVIC、INTC)
- 驱动层:设备驱动(ICU 驱动、Port 驱动等)
- OS 层:AUTOSAR OS 管理 Cat2 中断
中断源分类
| 中断源 | 示例 | 处理方 |
|---|---|---|
| 微控制器外设 | 定时器、ADC、UART | 设备驱动 |
| 通信控制器 | CAN、LIN、FlexRay | 通信驱动 |
| 外部中断 | GPIO、外部传感器 | ICU 驱动 |
5 中断操作概述
5.1 Cat1 与 Cat2 中断的区别
AUTOSAR 区分两种类型的中断:
| 特性 | Cat1 中断 | Cat2 中断 |
|---|---|---|
| OS 感知 | ❌ 不被 OS 感知 | ✅ 由 OS 管理 |
| ISR 类别 | 不分类 | 类别 2 |
| 可调用 OS 服务 | 仅允许中断使能/禁用 | 可调用受限的 OS 服务 |
| 由谁实现 | 复杂驱动(CDD)或 BSW 模块 | AUTOSAR OS |
| 用途 | 关键、低延迟、硬件紧密耦合 | 一般外设中断 |
| 入口/出口处理 | 直接由硬件/驱动 | 由 OS 提供(保存/恢复上下文) |
核心区别:Cat2 中断由 OS 管理,可以安全地调用 OS 服务;Cat1 中断绕过 OS,必须自己保存上下文。
6 中断操作步骤
6.1 处理 Cat1 中断
6.1.1 初始状态
- 中断向量已配置
- ISR 已安装(绕过 OS)
- 全局中断使能
6.1.2 当硬件请求中断时
- 硬件自动保存 部分上下文(如 PC、SR)
- 跳转到 ISR 入口(无 OS 中介)
- ISR 内部保存必要的寄存器(编译器/手写)
- 执行 ISR 主体
- 读取/清除外设中断标志
- 处理中断
- ISR 内部恢复寄存器
- 中断返回
Cat1 ISR 限制:
- 不可调用 OS 服务
- 不可调用任何 OS API
- 不可等待/阻塞
- 应保持极短(如 5-10 微秒)
- 不可访问 OS 管理的资源(任务、事件、信号量等)
6.2 处理 Cat2 中断
6.2.1 初始状态
- 中断向量已配置(由 OS 启动时设置)
- ISR 由 OS 管理
- 中断优先级已分配
6.2.2 当硬件请求中断时
- 硬件自动保存 部分上下文(PC、SR、关键寄存器)
- 跳转到 OS 提供的 ISR 入口
- OS 保存完整上下文(所有寄存器)
- OS 调用用户注册的 ISR 函数
- 执行 ISR 主体
- 允许调用有限的 OS 服务
- OS 恢复完整上下文
- 中断返回
Cat2 ISR 允许的 OS 服务:
ActivateTaskSetEventGetResourceReleaseResourceGetAlarmIncrementCounterTerminateApplication(受限)
Cat2 ISR 限制:
- 不可调用
Schedule - 不可调用
WaitEvent(任务级) - 不可访问某些 OS 资源
- 仍应保持简短
7 中断配置
7.1 设备驱动配置和代码
7.1.1 中断处理程序的放置
| 中断类型 | 中断处理程序位置 |
|---|---|
| Cat1 | 由 BSW 模块(如 ICU 驱动)实现,放置在驱动 .c 文件中 |
| Cat2 | 由 OS 实现,放置在 OS 配置中(中断向量表) |
7.2 OS 配置
7.2.1 中断向量表
OS 启动时按 Os_Cfg.h 中的配置初始化中断向量表。Cat2 中断的 ISR 由 OS 在启动时注册。
7.2.2 中断优先级
- Cat1:优先级高于所有 Cat2 中断(不受 OS 优先级限制)
- Cat2:优先级由 OS 管理,低于 Cat1
7.2.3 中断嵌套
- Cat1 可以中断 Cat2(Cat1 优先级更高)
- Cat2 之间按 OS 优先级嵌套
- Cat1 之间按硬件优先级嵌套
8 关键概念总结
| 概念 | 说明 |
|---|---|
| Cat1 | 直接由硬件处理,绕过 OS。不可调用 OS 服务。极低延迟。 |
| Cat2 | 由 OS 包装,可调用受限 OS 服务。常规外设中断首选。 |
| 中断优先级 | Cat1 > Cat2。Cat1 中断可中断 Cat2 ISR。 |
| ISR 长度 | Cat1 应 < 10μs;Cat2 应 < 100μs(一般)。 |
| 上下文保存 | Cat1:部分(编译器);Cat2:完整(OS)。 |
| 配置位置 | Cat1 在驱动中;Cat2 在 OS 中。 |
9 中断处理时间线(示例)
Cat2 中断处理时序
硬件事件
↓
[硬件自动保存 PC、SR 等]
↓
[OS 中断入口]
↓
[OS 保存完整上下文]
↓
[调用用户 ISR 主体]
↓ 允许调用受限 OS 服务
├─ 清除中断标志
├─ 读取外设数据
├─ 激活任务 / 设置事件
└─ 释放资源
↓
[OS 恢复完整上下文]
↓
[中断返回]
Cat1 中断处理时序
硬件事件
↓
[硬件自动保存 PC、SR]
↓
[直接跳转到 ISR]
↓
[ISR 内部保存其他寄存器]
↓ 禁止调用 OS 服务
├─ 清除中断标志
└─ 处理中断
↓
[ISR 内部恢复寄存器]
↓
[中断返回]
翻译说明
- 本文档为说明性文档(EXP),非规范
- Cat1/Cat2 中断分类是 AUTOSAR 中断处理的核心概念
- 选择 Cat1 还是 Cat2 取决于:延迟要求、是否需要 OS 服务、是否访问 OS 资源
翻译:opencode-translator / Step 3 P0 批量翻译