Files
autosar_standard_spec_v4.4/BSWGeneral/AUTOSAR_EXP_InterruptHandlingExplanation.md
T

284 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. 介绍与文档目的
2. 缩略语与简称
3. 相关文档
4. 中断配置概述
5. 中断操作概述
6. 中断操作步骤
7. 中断配置
8. 总结
---
## 1 介绍与文档目的
本文档**解释** AUTOSAR 中断处理的机制和概念。它**不是规范**,而是说明性文档,帮助读者理解 AUTOSAR 如何处理中断。
读者应熟悉:
- OSEK/VDX OS 概念
- AUTOSAR 分层架构
- 微控制器中断机制
---
## 2 缩略语与简称
| 缩略语 | 描述 |
|--------|------|
| ISR | Interrupt Service Routine(中断服务例程) |
| Cat1 | Category 1 interruptOS 不感知的中断) |
| Cat2 | Category 2 interruptOS 感知的中断) |
| 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 中断配置涉及**三个层级**:
1. **硬件层**:微控制器的中断控制器(如 NVIC、INTC)
2. **驱动层**:设备驱动(ICU 驱动、Port 驱动等)
3. **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 当硬件请求中断时
1. 硬件自动保存 **部分上下文**(如 PC、SR
2. 跳转到 ISR 入口(无 OS 中介)
3. ISR 内部保存必要的寄存器(编译器/手写)
4. 执行 ISR 主体
- 读取/清除外设中断标志
- 处理中断
5. ISR 内部恢复寄存器
6. 中断返回
**Cat1 ISR 限制**
- 不可调用 OS 服务
- 不可调用任何 OS API
- 不可等待/阻塞
- 应**保持极短**(如 5-10 微秒)
- 不可访问 OS 管理的资源(任务、事件、信号量等)
### 6.2 处理 Cat2 中断
#### 6.2.1 初始状态
- 中断向量已配置(由 OS 启动时设置)
- ISR 由 OS 管理
- 中断优先级已分配
#### 6.2.2 当硬件请求中断时
1. 硬件自动保存 **部分上下文**PC、SR、关键寄存器)
2. 跳转到 OS 提供的 ISR 入口
3. **OS 保存完整上下文**(所有寄存器)
4. OS 调用用户注册的 ISR 函数
5. 执行 ISR 主体
- 允许调用有限的 OS 服务
6. OS 恢复完整上下文
7. 中断返回
**Cat2 ISR 允许的 OS 服务**
- `ActivateTask`
- `SetEvent`
- `GetResource`
- `ReleaseResource`
- `GetAlarm`
- `IncrementCounter`
- `TerminateApplication`(受限)
**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 可以**中断** Cat2Cat1 优先级更高)
- Cat2 之间按 OS 优先级嵌套
- Cat1 之间按硬件优先级嵌套
---
## 8 关键概念总结
| 概念 | 说明 |
|------|------|
| **Cat1** | 直接由硬件处理,绕过 OS。**不可调用 OS 服务**。极低延迟。 |
| **Cat2** | 由 OS 包装,**可调用受限 OS 服务**。常规外设中断首选。 |
| **中断优先级** | Cat1 > Cat2。Cat1 中断可中断 Cat2 ISR。 |
| **ISR 长度** | Cat1 应 < 10μsCat2 应 < 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 批量翻译*