insert arm content into kernel/int.md

This commit is contained in:
Yan_yan 2020-11-03 10:17:05 +08:00
parent 3147b35b7a
commit 6b21c509ea
5 changed files with 53 additions and 1 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@ -9,6 +9,11 @@
* [中断处理机制](#riscv_int_process) * [中断处理机制](#riscv_int_process)
* [中断服务程序](#riscv_int_service) * [中断服务程序](#riscv_int_service)
* [中断处理流程](#riscv_int_process2) * [中断处理流程](#riscv_int_process2)
* [ARM CORTEX-M架构的中断和异常](#arm_interrupt)
* [概述](#arm_interrupt_intro)
* [异常处理机制](#arm_interrupt_process_mechnism)
* [中断类型](#arm_int_type)
* [中断控制器](#arm_int_controller)
* [中断函数接口](#riscv_int_api) * [中断函数接口](#riscv_int_api)
* [使用场景](#situation) * [使用场景](#situation)
@ -77,7 +82,7 @@ RISC-V中断控制器如下图所示
![XiUOS RISC-V CONTROLLER](/images/int_riscv_controller.png) ![XiUOS RISC-V CONTROLLER](/images/int_riscv_controller.png)
<span id="riscv_int_process"></span>
### 中断处理机制 ### 中断处理机制
@ -104,6 +109,53 @@ CPU响应中断并进行处理通常经历以下过程保存当前线程
</center> </center>
<span id="arm_interrupt"></span>
## ARM-cortex-M架构的中断和异常
<span id="arm_interrupt_intro"></span>
### 概述
cortex-M提供了一个异常响应系统支持为数众多的系统异常和外部中断。其中编号0-15对应系统异常大于等于16位外部中断。
<span id="arm_interrupt_process_mechnism"></span>
### 异常处理机制
cortex-M支持的异常如下表所示
![ARM CORTEX-M EXCEPTION](/images/arm_exception_table.png)
表格中的SVCall异常属于系统服务调用用于产生系统函数的调用请求该异常必须得到响应例如操作系统不让用户程序直接操作硬件通过一些系统服务函数发出SVC请求触发一个SVC异常然后通过SVC异常服务程序执行
PendSV异常属于可悬挂系统调用它可以像普通中断一样被悬起典型应用是提供线程切换服务。
![ARM PENSV EXAMPLE](/images/arm_pensv_example.png)
1. 任务 A 呼叫 SVC 来请求任务切换(例如,等待某些工作完成)
2. OS 接收到请求,做好上下文切换的准备,并且 pend 一个 PendSV 异常。
3. 当 CPU 退出 SVC 后,它立即进入 PendSV从而执行上下文切换。
4. 当 PendSV 执行完毕后,将返回到任务 B同时进入线程模式。
5. 发生了一个中断,并且中断服务程序开始执行
6. 在 ISR 执行过程中,发生 SysTick 异常,并且抢占了该 ISR。
7. OS 执行必要的操作,然后 pend 起 PendSV 异常以作好上下文切换的准备。
8. 当 SysTick 退出后,回到先前被抢占的 ISR 中ISR 继续执行
9. ISR 执行完毕并退出后PendSV 服务例程开始执行,并且在里面执行上下文切换
10. 当 PendSV 执行完毕后,回到任务 A同时系统再次进入线程模式。
<span id="arm_int_type"></span>
### 中断类型
![ARM INT TYPE](/images/arm_int_type.png)
NVIC共支持1到240个外部中断输入IRQs。另外 NVIC还支持一个不可屏蔽输入中断除了包含控制寄存器和中断控制逻辑外还包含了MPU的控制寄存器、systick定时器以及调试控制。
<span id="arm_int_controller"></span>
### 中断控制器
cortex-M系列包含一个NVIC嵌套中断向量控制器提供硬件嵌套中断服务。在中断发生时NVIC自动取出对应的服务例程入口地址并且直接调用无需软件判定中断源。另外M系列包含一个基本的systick定时器配合NVIC工作用于系统计数。NVIC控制器如下图所示
![NVIC CONTROLLER](/images/arm_nvic_controller.jpg)
<span id="riscv_int_api"></span> <span id="riscv_int_api"></span>
## 中断函数接口 ## 中断函数接口