历史上的今天
返回首页

历史上的今天

今天是:2024年09月20日(星期五)

正在发生

2018年09月20日 | stm32f407之NVIC

2018-09-20 来源:eefocus

五、NVIC


       中断向量嵌套控制器是用来管理所有中断和事件的,包括中断的使能和除能,中断的优先级。这个是属于内核的东西,所以ST的参考手册上对它的描述较少,但他又是十分重要的东西,要了解它就要看ARM的《Cortex™-M4 Devices Generic User Guide》。

 

相关寄存器

译自《Cortex™-M4 Devices Generic UserGuide》,若有错误,请以原文为准。

 

中断使能寄存器NVIC_ISER[8]

中断使能寄存器共有8个,ISER[0]设置0~31号中断的使能,ISER[1]设置32~63号中断的使能,如此类推。以下以ISER[0]为例:


[31:0] SETENA中断设置使能位。
写:
0 =无影响
1 =使能中断。
读:
0 =中断是禁止的
1=中断已经被使能

如果要使能0号中断,就向该寄存器的0位写1,如果要使能38号中断,就向NVIC_ISER[1]的6位写1,如此类推,至于哪个中断对应哪个中断号,请参见参考手册《RM0090 Reference manual》中的第9章Table 30. Vector table的Position一列。

 

 

 

中断除能寄存器NVIC_ICER[8]

中断除能寄存器共有8个,ICER[0]设置0~31号中断除能,ICER[1]设置32~63号中断的使能,如此类推。以下以ICER[0]为例:


[31:0] SETENA中断设置使能位。
写:
0 =无影响
1 =除能中断。
读:
0 =中断是禁止的
1=中断已经被使能

以下寄存器均为8个,仅以***R[0]为例

 

 

 

中断挂起设置寄存器NVIC_ISPR[8]


[31:0]SETPEND中断挂起设置位。
写:
0 =无影响
1 =改变中断状态为挂起。
读:
0 =中断没有挂起
1 =中断正在等待处理。

 

 

 

解除中断挂起寄存器NVIC_ICPR[8]


[31:0] CLRPEND中断清除挂起位。
写:
0 =无影响
1 =删除中断的挂起状态。
读:
0 =没有挂起的中断
1 =中断正在等待处理。

 

 

 

中断激活位寄存器NVIC_IABR[8]


[31:0]中断活跃的标志:
0 =中断不活跃
1 =中断活跃。

如果相应的中断的状态是作为一个活跃的或活跃和正被挂起的,读该位将会读出1。

 

 

 

 

中断优先级寄存器NVIC_IPR[60]


       中断优先级寄存器为60个32位寄存器,st的结构体中用了240个8位的字节数组NVIC->IP[240]来映射,每一个对应一个中断的优先级。

ARM的中断优先级分两种,抢占优先级和响应优先级。

        具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。

         当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

        中断优先级分组就是把优先级寄存器分割,分开哪几位是响应优先级,哪几位是抢占优先级。至于怎样设置分组,就要看一个不属于NVIC的寄存器了。

 

 

 

应用中断和复位控制寄存器SCB_AIRCR


在这里我们需要看的是[31:16]位和[10:8]位,[31:16]位是识别码,用以保护此寄存器不会被意外修改,[10:8]位就是中断优先级分组的设置位。

[31:16]

写:VECTKEYSTAT
读:VECTKEY
RW注册键:
读为0xFA05
写入时,要写0x05FA到 VECTKEY,否则写入将被忽略。

 

[10:8]中断优先级

每一个ARM的M4中断优先级设计为可编程的8位,具体到stm32f4就只留给用户4位共16级的可编程优先级,其中低4位已被占用。也就是说stm32f4的优先级分组情况如下表所示:

[10:8]

分割点

抢占优先级位

响应优先级位

抢占优先级数

响应优先级数

0b011

xxxx

[7:4]

none

16

1

0b100

xxx.y

[7:5]

[4]

8

2

0b101

xx.yy

[7:6]

[5:4]

4

4

0b110

x.yyy

[7]

[6:4]

2

8

0b111

yyyy

none

[7:4]

1

16

 

 

 

最后一个NVIC的寄存器

软件触发中断寄存器NVIC_STIR


当SCB_CCR的USERSETMPEND位为1时,无特权的用户程序才能写此寄存器。

[31:9]保留。
[8:0] INTID  ID号中断触发,
范围0-239。例如,0x03的指定中断IRQ3触发。


推荐阅读

史海拾趣

DAQ Electronics LLC公司的发展小趣事

随着技术的不断成熟和产品线的丰富,DAQ Electronics LLC公司开始积极拓展市场。公司通过与科研机构、高校以及企业建立合作关系,将数据采集技术应用于更多领域。在科学研究领域,DAQ Electronics LLC公司的数据采集设备为实验数据的准确获取提供了有力保障;在工业生产领域,其设备则帮助企业实现了对生产过程的实时监控和数据分析。

巨盛电子(Chesen)公司的发展小趣事

随着环保意识的提高,消费者对环保产品的需求也越来越高。巨盛电子(Chesen)积极响应环保号召,将环保理念融入产品设计和生产过程中。公司采用环保材料、优化生产工艺、加强废弃物处理等措施,减少了对环境的污染。同时,公司还积极开展环保宣传活动,提高了消费者对环保产品的认识和接受度。这些举措不仅塑造了巨盛电子的环保品牌形象,还为企业赢得了更多消费者的支持。

HDK(北陆电气)公司的发展小趣事

随着国内市场的饱和,巨盛电子(Chesen)开始寻求国际化发展。公司制定了一系列国际化战略,包括拓展海外市场、建立海外生产基地、与国际品牌合作等。通过这些努力,巨盛电子成功进入了欧美、东南亚等市场,实现了品牌的全球化布局。同时,公司还积极与国际品牌合作,共同开发新产品,提高了品牌知名度和市场份额。

FTDI公司的发展小趣事

随着环保意识的提高,消费者对环保产品的需求也越来越高。巨盛电子(Chesen)积极响应环保号召,将环保理念融入产品设计和生产过程中。公司采用环保材料、优化生产工艺、加强废弃物处理等措施,减少了对环境的污染。同时,公司还积极开展环保宣传活动,提高了消费者对环保产品的认识和接受度。这些举措不仅塑造了巨盛电子的环保品牌形象,还为企业赢得了更多消费者的支持。

DDP Engineered LED Solutions公司的发展小趣事

DDP Engineered LED Solutions公司自创立之初,便以技术创新作为公司发展的核心动力。在公司成立的早期,研发团队深入LED照明领域,通过不断实验和改进,成功开发出了一系列高效、稳定的LED照明产品。这些产品不仅具有出色的照明效果,而且具有较长的使用寿命和较低的能耗,迅速在市场上获得了认可。随着技术的不断迭代,DDP不断推出符合市场需求的创新产品,逐渐在电子行业LED照明领域崭露头角。

华宇创公司的发展小趣事

为了进一步扩大市场份额,华宇创开始积极拓展国内外市场。公司参加了多场国际电子展和博览会,与全球各地的客户建立了广泛的联系。同时,华宇创还与国际知名电子企业建立了战略合作关系,共同研发新技术、新产品。这些国际合作不仅为华宇创带来了更多的商业机会,也提升了公司在国际市场的地位和影响力。

问答坊 | AI 解惑

人民币找人做东西

我想用一台电脑去控制另一台电脑的键盘和鼠标事件。用电脑A控制电脑B,电脑A就象电脑B的键盘和鼠标一样。在电脑A上发出指令通过您做的这个单片机发到电脑B上去执行。电脑A上可以装任何软件。但电脑B上不行任何软件。在电脑A 上我是用我做VB做的一个 ...…

查看全部问答>

初学嵌入式开发ARM的学习方法(转载)

这个题目很大,给人一种感觉我好像很成功,其实不然。实际上自己水平不高,甚至很低,但是做过了一些曲折的学习道路,同时把自己真实的学习历程表达出来,希望对后来者有借鉴的意义,甚幸!     工作三年、几成废人!      我2000年毕业 ...…

查看全部问答>

请教

请教各位, AD片子采集的输入电压0~5V(也就是说AD片子需要5V供电的),而与其通过I2C通讯的MCU是3V供电,这样可以直接连接使用吗? [ 本帖最后由 chixuetao 于 2009-10-8 10:32 编辑 ]…

查看全部问答>

Wince 5.0 上编写的程序如何打包?用C#写的?

有两个,一个是Program Files 文件夹,一个是应用程序文件夹。 分别代表什么什么意思,可以可以给我讲一下…

查看全部问答>

Windows Embedded CE 6.0 FATFS 无法加载,CF卡内容无法显示

我用CF卡做启动盘,在一些少数小品牌的CF卡上启动后能在根目录下看到\\Hard Disk。 但在Sandisk、Kingston这样的大品牌的CF卡,却只能启动而不能在根目录下看到Hard Disk。 我在调试模式下,使用不同的CF卡,用Eboot方式下载镜像启动,从VS2005的 ...…

查看全部问答>

求助:关于pxa270实现4级灰度控制的驱动程序

我们使用PXA270平台,wince 5.0操作系统。客户提供了一片单色LCD,4bit输入,每1个bit代表1个点,每个点都有ON/OFF两种状态。分辨率640*480。LCD中内置了一颗Max5484来控制灰度。客户要求我们做到4bpp,16级灰度。 但是Max5484这个芯片只能调整整 ...…

查看全部问答>

浏览器的思想

各位高手:     我最近要写一个浏览器(c语言,gtk ,linux),有没有写过的阿,给个提示呀 …

查看全部问答>

帮忙啊

有哪位好心人把windows live id号码借我用一下啊,我要下载个wdk,最近注册了好几次都没有成功,是不是不开放注册了?…

查看全部问答>

基于RL78G14的便携心率仪创意进度帖-进度-7、利用Interval Timer实现相位差脉冲输出

我的系统要实现两个互为90度相位差的PWM输出,考虑来去,决定用板子IC内的12-bit Interval Timer 来实现, Interval Timer时钟选用外部低速时钟,设定比较值为32,使能中断, 初始化部分如下 /* supply IT clock RTC and 12bit interval timer ena ...…

查看全部问答>