目录

1.中断简介

中断的优先级数字越小优先级越大,这是它内部的15个

外部的有140个但用不了那么多

​编辑

WEAK

NVIC 的访问地址是 0xE000_E000

NVIC结构体里的寄存器

优先级的定义

2.优先级分组

3.优先级设置

4.中断屏蔽寄存器

FreeRTOS中断配置

注意


1.中断简介

中断是微控制器一个很常见的特性,中断由硬件产生,当中断产生之后CPU就会中断当前的流程而去处理中断服务,Cortex-M 内核的MCU提供了一个用于中断管理的嵌套向量中断控制器NVIC。
Cotex-M3和M4的NVIC最多支持240个IRQ(中断请求),1个不可屏蔽中断(NM)),1个Systick(滴答定时器)定时器中断和多个系统异常。

与中断相关的寄存器都在NVIC和SCB中。

中断的优先级数字越小优先级越大,这是它内部的15个

__Vectors向量中断表 

外部的有240个但用不了那么多

WEAK

WEAK函数就是已经定义了的,我过我们重写,他就不会调用这里面的函数了,就会调用我们自己写的函数(32里的printf重定向说到)

NVIC 的访问地址是 0xE000_E000

NVIC的地址就是0xE000E000加上偏移地址0x0100,

NVIC结构体里的寄存器

这些寄存器都是跟中断相关

优先级的定义

在 CM3 中,优先级对于异常来说很关键的,它会影响一个异常是否能被响应,以及何
时可以响应。优先级的数值越小,则优先级越高。CM3 支持中断嵌套,使得高优先级异常
会抢占(preempt)低优先级异常。有 3 个系统异常:复位,NMI 以及硬 fault,它们有固定的
优先级,并且它们的优先级号是负数,从而高于所有其它异常。所有其它异常的优先级则都
是可编程的(但不能编程为负数)。
原则上,CM3 支持 3 个固定的高优先级和多达 256 级的可编程优先级,并且支持 128
级抢占

优先级寄存器是由  __IO uint8_t  IP[240]; 决定的,最多有240个外部中断

 正常我们用4位用来表达优先级4567,它这里举例用3个

2.优先级分组

为了使抢占机能变得更加可控,CM3还把256级优先级按位分
成高低两段,分别是抢占优先级和亚优先级,MSB所在的位段(左边
的)对应抢占优先级,而LSB所在的位段(右边的)对应亚优先级。
分组位置 表达抢占优先级的位段表达亚优先级的位段

优先级分组通过寄存器AIRCR设置(地址为OXEOOOEDOC)

7:1意思是说第7位到第1位都表示抢占优先级,第0位表示亚优先级,下面以此类推,所以我们最多用128来表示抢占优先级

如果我们要使用4位的话,低四位不用,我们要左移4位才是我们最终的优先级

对应上表76543,这5中情况

寄存器AIRCR地址就是这么来的

优先级分组实际上是调用 SCB->AIRCR 控制优先级分组,通过寄存器来进行设定

3.优先级设置

对于外设中断优先级的设置可以通过奇存器:
OXE000 E400 ~ OXEOOOE4EF
系统异常中断通过寄存器
OXE000 ED18 ~ OXE000ED23

4.中断屏蔽寄存器

详细可查

中断屏蔽寄存器有3个:
1.PRIMASK
2.PAULTMASK
3.BASEPRI
用于中断屏蔽的特殊寄存器
PRIMASK, FAULTMASK 和 BASEPRI这三个寄存器,可以参考上面链接,大致了解这三个中断屏蔽寄存器。
BASEPRI寄存器可以只屏蔽低于某一阈值的优先级中断,FreeRTOS的开关中断就是通过BASEPRI这个寄存器实现。
想屏蔽某一阈值之下的优先级,直接将优先级写进寄存器即可,写入0就停止屏蔽中断

freeRTOS使用第三个

关闭中断和开启中断,

关闭

 用的出最高优先级去关闭

使能中断,vPortSetBASEPRI( 0 )有一个形参0,把0传进去,把0写进basepri里

这两个寄存器不是freertos用

FreeRTOS中断配置

我们用四位配置中断优先级,所以中断优先级配置都要8 - configPRIO_BITS左移四位

在FreeRTOS 中 0-4 的优先级 不受它的管理 5-15 才是它的管理范围

configLIBRARY_LOWEST_INTERRUPT_PRIORITY

此宏是用来设置最低优先级,前面说了,STM32优先级使用了4位,而且STM32配置的使用组4,也就是4位都是抢占优先级。因此优先级数就是16个,最低优先级那就是15。所以此宏就是15

configLIBRARY_MAX_sYSCALL_INTERRUPT_PRIORITY

此宏用来设置FreeRTOS系统可管理的最大优先级,讲解BASEPRI寄存器说的那个阈值优先级,这个大家可以自由设置,这里我设置为了5。也就是高于5的优先级(优先级数小于5)不归FrecRTOS管理!

注意

在mian函数的开始和结束是有临界段的,临界段里面其实就是调用了中断屏蔽的语句,临界段打开,临界段关闭,main函数里面的程序才能运行

FreeRTOS Cortex-M 中断管理相关推荐

  1. 10.FreeRTOS学习笔记-中断管理

    FreeRTOS 的中断管理支持: 开/关中断. 恢复中断. 中断使能. 中断屏蔽. 可选择系统管理的中断优先级 中断管理的运作机制 当中断产生时,处理机将按如下的顺序执行: 保存当前处理机状态信息 ...

  2. 学习正点原子讲解FreeRTOS中断管理心得和cortex-M3权威指南笔记

    1.一个任务恢复运行: (1)恢复一个任务的运行:将一个任务从挂起态恢复到就绪态,只有通过函数vTaskSuspend()设置为挂起态的任务才能使用vTaskResume()恢复,函数原型为void ...

  3. (四)STM32F407总线架构、时钟系统配置相关的函数,IO 引脚复用器和映射,NVIC中断管理,寄存器地址映射

    基础知识 一.GPIO输入输出各种模式 二.STM32F407总线架构 三.STM32F407时钟系统 (1) STM32F4 时钟树概述 (2)STM32F4 时钟初始化配置 (3)STM32F4 ...

  4. nrf52840 gpiote如何配置中断输入_STM32第四章外部中断管理

    点击上方"果果小师弟",选择"置顶/星标公众号"干货福利,第一时间送达!STM32F4 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32F4 ...

  5. 【Linux 内核】Linux 内核体系架构 ( 进程调度 | 内存管理 | 中断管理 | 设备管理 | 文件系统 )

    文章目录 一.进程调度 二.内存管理 三.中断管理 四.设备管理 五.文件系统 一.进程调度 进程调度 : 进程 是 系统中 进行 资源分配 的 基本单位 ; 每个进程 在 运行时 , 都 感觉自己占 ...

  6. FreeRTOS 之五 动态内存管理(heap_1.c)详解

    写在前面   写这篇文章时,网上已经有了铺天盖地的文章来介绍 FreeRTOS 的动态内存.之所以还去写这篇博文,主要还是记录自己的学习过程.结合源代码一步一步分析一下FreeRTOS究竟是怎么实现的 ...

  7. Linux中的中断管理机制

    1.中断相关基础知识介绍 1.1.中断产生背景 假设现在CPU需要去获取一个键盘的时间,如果处理器发出一个请求信号之后一直在轮询键盘的响应,由于键盘响应速度比处理器慢得多并且需要等待用户输入,这对于C ...

  8. 11.FreeRTOS学习笔记-内存管理

    几种内存分配算法的比较 heap_1.c 管理方案是 FreeRTOS 提供所有内存管理方案中最简单的一个,它只能申请内存而不能进行内存释放,并且申请内存的时间是一个常量 heap_2.c方案支持释放 ...

  9. LiteOS 中断管理

    参考: [野火]物联网操作系统 LiteOS 开发实战指南 Huawei LiteOS | 中文网 9. 中断管理 9.1 概况 9.1.1 基本概念 中断:指CPU正在处理某件事的时候,外部发生了某 ...

最新文章

  1. 与有利集团总公司,同携手•共辉煌
  2. 处理图片(updated)
  3. 超好用的27个谷歌Chrome浏览器使用技巧
  4. golang 格式化时间成datetime
  5. android gms包
  6. SPSS导入excel文件时,保留4位小数点
  7. 电子知识|电源管理芯片
  8. 自学4年多 Github 上斩获 90k Star! 聊聊自学习编程的正确姿势!
  9. 西南大学计算机辅助设计试题,西南大学 1906 课程名称:(9123)《计算机辅助设计》机考 答案-奥...
  10. 如何在PowerPoint中将自定义模板设置为默认模板
  11. vaild-palindrome
  12. 企业短信防火墙应用-爱侬「北京市家政服务龙头企业」
  13. 如何在 Matplotlib 中绘制垂直线
  14. 不同需求下,CPU怎么选?
  15. uni-app 设置APP应用跳转到系统设置页
  16. urlrewriter 的用法
  17. LOJ6001 - 「网络流 24 题」太空飞行计划
  18. 从零开始实现k线图走势图绘制(iOS理论篇)
  19. Linux中sysstat服务,Linux系统维护常用工具sysstat
  20. 苹果手机怎么清理缓存_【优化】苹果清理缓存垃圾终极方案丨还你干净手机

热门文章

  1. webpack打包优化
  2. html样式 css一些常用属性与style内部样式表
  3. Python 输入圆的半径,求圆的直径、周长和面积
  4. 网站被DDOS攻击怎么办?防护经验!
  5. 更新Ubuntu系统报错: Err http://mirrors.163.com lenny Relese.gpg Temporary failure resolving 'mirro
  6. 初识Spring Boot框架
  7. javascript数组的入门之遍历数组
  8. Error: L6406E: No space in execution regions with .ANY selector matching os_core.o(.bss).
  9. WSGI的理解(转载)
  10. 74道高级Java面试合集,java开发模式面试题