编程知识 购物 网址 新闻 笑话 | 软件 日历 阅读 图书馆 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
   -> 领域驱动设计 -> 嵌套的向量式中断控制器(NVIC) -> 正文阅读

[领域驱动设计]嵌套的向量式中断控制器(NVIC)

几个基本概念:
1.ARM cortex_m3 内核支持 256 个中断(16 个内核+240 外部)和可编程 256 级中断优先级的设置,与其相关的中断控制和中断优先级控制寄存器(NVIC、SYSTICK 等)也都属于cortex_m3 内核的部分。其中,STM32 目前支持的中断共为 84 个(16 个内核+68 个外部) ,和 16 级可编程中断优先级的设置(仅使用中断优先级设置 8bit 中的高 4 位) 。
2.嵌套向量中断控制器( NVIC ) 和处理器核的接口紧密相连,可以实现低延迟的中断处理和高效地处理晚到的中断。
3.NVIC 共支持 1 至 240 个外部中断输入(通常外部中断写作 IRQs) 。具体的数值由芯片厂商在设计芯片时决定。此外,NVIC 还支持一个“永垂不朽”的不可屏蔽中断(NMI)输入。NMI 的实际功能亦由芯片制造商决定。在某些情况下,NMI 无法由外部中断源控制。
4.NVIC 的访问地址是 0xE000_E000。 所有 NVIC 的中断控制/状态寄存器都只能在特权级下访问。 不过有一个例外——软件触发中断寄存器可以在用户级下访问以产生软件中断。 所有的中断控制/状态寄存器均可按字/半字/字节的方式访问。 此外, 有几个中断屏蔽寄存器也与中断控制密切相关,它们属于“特殊功能寄存器” ,只能通过 MRS/MSR及 CPS 来访问。
5.每个外部中断都在 NVIC 的下列寄存器中“挂号” :
使能与除能寄存器 悬起与“解悬”寄存器 优先级寄存器 活动状态寄存器、另外,下列寄存器也对中断处理有重大影响 异常掩蔽寄存器(PRIMASK, FAULTMASK 以及 BASEPRI) 向量表偏移量寄存器 软件触发中断寄存器 优先级分组位段
对于中断优先级分组
中断优先级控制位还必须分成 2 组看:从高位开始,前面是定义抢先式优先级的位,后面用于定义子优先级。4bit 的分组组合可以有以下几种形式:


在一个系统/工程中,通常只使用上面 5 种分配情况的一种,具体采用哪一种,需要在初始化时写入到一个 32 位寄存器 AIRC(Application Interrupt and Reset Control Register)的第[10:8]这 3 个位中。这 3 个 bit 位有专门的称呼:PRIGROUP(具体写操作后面介绍) 。比如你将 0x05(即上表中的编号)写到 AIRC 的[10:8]中,那么也就规定了你的系统中只有 4 个抢先式优先级,相同的抢先式优先级下还可以有 4 个不同级别的子优先级。
PS:对这4位进行分组,根据“分步用乘法”的规律,不管怎样(2^2 * 2^2 = 4 * 4 = 16 或者2^^4 = 16等)都是满足16位优先级的说法。
如:
中断分组设置函数
        在 sys.c 里面只有一个函数就是 void NVIC_Configuration()中断配置函数,在这个函数里面我们只调用了固件库的中断分组配置函数,这只整个系统的中断分组为组别 2.这个函数在系统初始化的时候调用即可,并且永远只需要调用一次。
void NVIC_Configuration(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置 NVIC 中断分组 2:2 位抢占//优先级,2 位响应优先级
}
  领域驱动设计 最新文章
领域驱动设计的基础知识总结
海西 · 云交付 DevOps实践落地方案
多服务器终端交互利器
《静儿的服务治理私房菜》服务治理和架构
服务治理概述
美团.点评服务治理框架
ASP.NET Zero
1.领域驱动简介.2.领域.子域.限界上下文.3.
东麓庄园系统开发
东麓庄园系统开发
上一篇文章      下一篇文章      查看所有文章
加:2015-11-16 19:31:12  更:2017-05-13 23:00:30 
 
360图书馆 软件开发资料 购物精选 新闻资讯 Chinese Culture 三丰软件 开发 中国文化 阅读网 日历 万年历 2019年11日历
2019-11-13 1:12:39
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程知识