vtor

ARM NVIC控制器(基于cortex-M4)

。_饼干妹妹 提交于 2021-02-06 16:55:18
中断控制寄存器映射 中断寄存器的基地址为0xE000E000,所有中断控制/状态寄存器都只能在特权级下访问(除软件触发中断寄存器外),寄存器映射列表见表3-2。也可以参考cortex-m4使用手册,并推荐使用CMSIS函数来访问相关功能。 表3-2 中断寄存器映射 偏移量 名称 位宽 类型 复位值 描述 0x100-0x11C ISER0-ISER7 32 R/W 0x00000000 中断使能寄存器,寄存器0为(IRQ0~IRQ31),以此类推 0x180-0x19C ICER0-ICER7 32 R/W 0x00000000 中断清除使能寄存器,寄存器0为(IRQ0~IRQ31),以此类推 0x200-0x21C ISPR0-ISPR7 32 R/W 0x00000000 中断挂起寄存器,寄存器0为(IRQ0~IRQ31),以此类推 0x280-0x29C ICPR0-ICPR7 32 R/W 0x00000000 中断挂起清除寄存器寄存器0为(IRQ0~IRQ31),以此类推 0x300-0x31C IABR0-IABR7 32 RO 0x00000000 中断活动状态寄存器寄存器0为(IRQ0~IRQ31),以此类推 0x400-0x4EF IPR0-IPR59 32 R/W 0x00000000 中断优先级寄存器0寄存器0为(IRQ0~IRQ3),以此类推 0xD08

结合Keil描述如何编写ARM处理器的Bootloader!

a 夏天 提交于 2020-10-28 16:29:57
之前从应用的角度给大家分享过Bootloader相关的文章,今天从底层原理来给大家描述ARM处理器如何编写Bootloader。 1 关于Bootloader Bootloader顾名思义就是引导加载程序,是在操作系统或应用程序运行之前的一段程序,是在系统上电后执行的一段程序代码。 BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式平台。因此,在嵌入式平台里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对bootloader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。 ---来源百度百科 Bootloader在手机、电脑、众多嵌入式系统中都存在,它的作用有很多,比如:初始化底层应用驱动、加载应用程序、更新应用程序等。 不同的设备,Bootloader可能差异很大,通常来说Bootloader比较依赖底层硬件和实际项目需求。 2 如何编写bootloader bootloader是一段引导加载程序代码,它更新用户的应用程序代码,可以使用很多硬件下载通道(例如USB、网络端口)获得新代码。 在执行引导ROM之后,将执行bootloader程序,并在需要时进行更新,然后执行最终用户应用程序。 引导加载程序和用户应用程序应作为两个独立的Project或Object进行编写和编译,从而产生两个独立且可执行的(bin/hex

STM32固件升级详解(BootLoader)

∥☆過路亽.° 提交于 2020-08-09 01:58:35
基础知识 这里以 KEIL 开发环境和 STM32F103RET6 为例。 上电时单片机首先进入复位中断 Reset_Handler,即汇编文件的复位中断处理函数。 并且有一个中断向量表默认存在于 flash 地址开始处。 为什么说是默认呢?这是因为如果没有特殊要求的话很少会去改中断向量表。实际上这个中断向量表是可以更改的。但是在更改向量表之前必须在地址开始处建立一个向量表,因为在复位后,程序默认(硬件决定的)从flash开始的第一个字读取栈指针,第二字就是复位中断的入口,并根据该指针最终进入复位处理函数中执行相应的函数。如果没有这个中断向量表程序是无法启动的。 那么既然前面说可以重新设定中断向量表的位置,那必然有一个寄存器记录着这张表的位置,这就是 VTOR 寄存器。从《Cortex-M3权威指南》可以看该寄存器的介绍: 并且向量表的偏移量有如下要求: 64*4 是因为一个表项为4字节。 更具体的关于更改向量表的信息查看《Cortex-M3权威指南》。 在复位处理函数中有进入 SystemInit 函数执行,在函数里有一个设置中断向量表的位置的语句。 VECT_TAB_OFFSET 默认情况下就是 0。 因为这是官方库函数,并且上电之后必定进入复位中断函数处理,因此必定会执行重新定位向量表的操作。因此只要修改宏定义就可以重新定位向量表。 先准备两个程序,一个为

痞子衡嵌入式:大话双核i.MXRT1170之Cortex-M7与Cortex-M4互相激活之道

最后都变了- 提交于 2020-04-28 08:34:20
  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是 恩智浦i.MXRT1170上Cortex-M7与Cortex-M4内核互相激活的方法 。   痞子衡最近在深耕i.MXRT1170这颗划时代的MCU,已经写了不少篇相关技术文章,涉及整体特点、Raw NAND启动、FlexRAM模块、ECC特性等,文章写得越多越发觉得i.MXRT1170是座宝矿,值得大家去仔细探索。话不多说,咱们继续挖矿吧,今天痞子衡为大家介绍i.MXRT1170双核间互相激活的方法。 一、双核功能简介   双核是i.MXRT1170除了1GHz主频之外的第二个显著特点,i.MX RT系列也是从RT1170开始首次引入了双核架构。i.MXRT1170包含了一个Cortex-M7内核(1GHz)以及一个Cortex-M4内核(400MHz),超强的Cortex-M7内核专注于音视频识别与处理、千兆以太网通讯控制等复杂任务上;低功耗Cortex-M4内核则做一些相对简单的键盘响应、传感器采集、电机控制等任务,即如下图所示: 二、双核激活方法   i.MXRT1170虽然是双核(Cortex-M7与Cortex-M4),但这两个核并没有确定的主从关系,i.MXRT1170系统设计里每个核都既可以当主核也可以当从核(默认CM7是主核,CM4是从核),用户设置了主从关系之后,芯片上电后先从主核启动

【转贴】一文看懂ARM Cortex-M处理器

老子叫甜甜 提交于 2020-04-24 14:09:33
ARM Cortex-M处理器家族现在有8款处理器成员。在本文中,我们会比较Cortex-M系列处理器之间的产品特性,重点讲述如何根据产品应用选择正确的Cortex-M处理器。本文中会详细的对照Cortex-M 系列处理器的指令集和高级中断处理能力,以及 SoC系统级特性,调试和追踪功能和性能的比较。   1、简介   今天, ARM Cortex-M 处理器家族有8款处理器成员。除此之外,ARM的产品系列还有很多其他的处理器成员。对很多初学者,甚至某些芯片设计经验丰富但是不熟悉ARM系列处理器的设计者来说,也是很容易混淆这些产品的。不同的ARM 处理器有不同的指令集,系统功能和性能。本文会深入展现Cortex-M系列处理器之间的关键区别,以及它们和ARM其他系列处理器的不同。    1.1ARM处理器家族   多年来, ARM已经研发了相当多的不同的处理器产品。 如下图中(图1): ARM 处理器产品分为经典ARM处理器系列和最新的Cortex处理器系列。并且根据应用范围的不同,ARM处理器可以分类成3个系列。   Application Processors(应用处理器)–面向移动计算,智能手机,服务器等市场的的高端处理器。这类处理器运行在很高的时钟频率(超过1GHz),支持像Linux,Android,MS Windows和移动操作系统等完整操作系统需要的内存管理单元(MMU

嵌入式MCU ARM Cortex-M3工作模式与异常

蹲街弑〆低调 提交于 2020-04-17 13:59:15
【推荐阅读】微服务还能火多久?>>> 单片机MCU Cortex-M3是一个32位处理器内核。内部的数据路径是32位的,寄存器是32位的,存储器接口也是32位的。CM3采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,从而提升了性能。下面宇芯电子将介绍关于嵌入式 MCU ARM Cortex-M3工作模式与异常。 一、工作模式 线程模式和手柄模式。 当处理器处在线程状态下时,既可以使用特权级,也可以使用用户级;另一方面, handler模式总是特权级的。在复位后,处理器进入线程模式+特权级。 二、向量表 因为地址 0 处应该存储引导代码,所以它通常映射到 Flash或者是 ROM 器件,并且它们的值不得在运行时改变。然而,为了支持动态重分发中断, CM3 允许向量表重定位——从其它地址处开始定位各异常向量。这些地址对应的区域可以是代码区,但更多是在 RAM 区。在 RAM 区就可以修改向量的入口地址了。为了实现这个功能, NVIC中有一个寄存器,称为“向量表偏移量寄存器”(在地址 0xE000_ED08处),通过修改它的值就能重定位向量表。 向量表偏移量寄存器(VTOR)(地址:0xE000_ED08) 三、异常和中断 Cortex-M3 支持大量异常,包括 16-4-1=11个系统异常,和最多 240 个外部中断——简称