【Cortex-M】System Handler Priority Registers(SHRP)寄存器
摘要:【System Handler Priority Registers(SHRP)】 The SHPR1-SHPR3 registers set the priority level, 0 to 255, of the exception handlers that have configurable
阅读全文
posted @
2022-08-26 20:45
uTank
阅读(193)
推荐(0)
ADS1.2与MDK4.7冲突问题的解决方法
摘要:需要添加2个系统变量。 1、添加环境变量名: ARMCC5LIB 变量值:C:\Keil\ARM\ARMCC\lib(实际Keil安装目录) 2、添加环境变量:ARMCC5INC变量值:C:\Keil\ARM\ARMCC\include(实际Keil安装目录) 添加完后,关闭MDK, 重新打开工程即
阅读全文
posted @
2019-09-16 19:22
uTank
阅读(1176)
推荐(0)
Cortex-M3 咬尾中断 与 晚到中断
摘要:【咬尾中断】在处理器在响应某些异常时,如果又发生其他异常,但它们优先级不够高,则它们会被阻塞。 那么,在当前的异常执行返回后,系统处理悬起的异常时,倘若还是先POP,然后又把POP处理的内容PUSH回去,那么就白白浪费CPU时间了。因此,Cortex-M3不会再POP这些寄存器,而是继续使用上一个异
阅读全文
posted @
2019-08-09 10:16
uTank
阅读(4131)
推荐(1)
Cortex-M3 SVC与PendSV
摘要:【SVC】 SVC(系统服务调用,亦简称系统调用)和PendSV(可悬起系统调用),它们多用在上了操作系统的软件开发中。SVC用于产生系统函数的调用请求。例如,操作系统通常不允许用户程序直接访问硬件,而是通过提供一些系统服务函数,让用户程序使用SVC发出对系统服务函数的调用请求,以这种方法调用它们来
阅读全文
posted @
2019-08-08 19:14
uTank
阅读(2541)
推荐(0)
Cortex-M3 异常中断向量表
摘要:【Cortex-M3异常与中断】 支持10个系统异常和最多240个外部中断; 支持3个固定的高优先级和多达256级的可编程优先级,支持128级抢占; #0~15在Cortex-M3中定义,IRQ#0~239中断由各个芯片厂商定义; 【Cortex-M3异常中断向量表】 向量表定义了中断处理程序的入口
阅读全文
posted @
2019-08-05 17:15
uTank
阅读(2280)
推荐(0)
Cortex-M3 在C中上报入栈的寄存器和各fault状态寄存器
摘要:因为在标准C语音中是不能获取SP指针的。因而,如果想通过C代码来获取入栈的寄存器值,需要配合一小段汇编代码来获取当前的SP值,然后再把这个SP值以参数形式传送给C代码,最后以指针的形式把栈中的各寄存器值输出,同时也可以输出一些想要的各种状态寄存器值。如下: Keil环境汇编封皮: C服务程序,输入为
阅读全文
posted @
2019-07-31 16:01
uTank
阅读(1107)
推荐(1)
Cortex-M3 双堆栈指针(MSP&PSP)
摘要:【双堆栈指针(MSP&PSP)】 Cortex-M3内核中有两个堆栈指针(MSP & PSP),但任何时刻只能使用到其中一个。 复位后处于线程模式特权级,默认使用MSP。 通过SP访问到的是正在使用的那个指针,可以通过MSR/MRS指令访问指定的堆栈指针。 通过设置CONTROL寄存器的bit[1]
阅读全文
posted @
2019-07-29 15:33
uTank
阅读(15111)
推荐(2)
Cortex-M3 异常返回值EXC_RETURN
摘要:【EXC_RETURN】 在进入异常服务程序后,硬件自动更新LR的值为特殊的EXC_RETURN。当程序从异常服务程序返回,把这个EXC_RETURN值送往PC时,就会启动处理器的异常中断返回序列。因为LR的值EXC_RETURN是由硬件自动设置的,所以只要没有特殊需求,就不要改动它。RETURN的
阅读全文
posted @
2019-07-29 11:49
uTank
阅读(4230)
推荐(1)
Cortex-M3 异常中断响应与返回
摘要:【异常/中断响应】Cortex-M3的异常/中断响应序列包括: 入栈:把8个寄存器的值压入栈。 取向量:从向量表中找出对应的服务程序入口地址。 更新寄存器:更新堆栈指针SP,更新连接寄存器LR,更新程序计数器PC 【入栈】响应异常的第一个行动,就是自动保存现场的必要部分:依次把xPSR、PC、LR、
阅读全文
posted @
2019-07-26 17:23
uTank
阅读(2882)
推荐(0)
Cortex-M3 操作模式与特权等级
摘要:Cortex-M3支持2个模式(Handler模式、线程模式)和2个特权等级(特权级、非特权级)。 当处理器处在线程模式时,既可以使用特权级,也可以使用非特权级。 当处理器处在Handler模式时,总是特权级的。 在复位后,处理器进入“线程模式+特权级”。 在“线程模式+非特权级(用户级)”下,禁止
阅读全文
posted @
2019-07-26 11:31
uTank
阅读(5122)
推荐(0)
Cortex-M3 R0~R15寄存器组 & 特殊功能寄存器组
摘要:【R0~R15寄存器组】 Cortex-M3处理器拥有R0~R15的寄存器组,如: 【R0~R12通用寄存器】R0~R12都是32位通用寄存器,用于数据操作。其中: R0~R7为低组寄存器,所有的指令都可以访问。 R8~R12为高组寄存器,只有32位Thumb2指令和很少的16位Thumb指令能访问
阅读全文
posted @
2019-07-24 15:20
uTank
阅读(12126)
推荐(3)
Cortex-M3的一些概念
摘要:【工作模式】 线程模式(Thread mode):处理器复位或异常退出时为此模式。此模式下的代码可以是特权代码也可以是用户代码,通过CONTROL[0]控制。处理模式(Handler mode):出现异常(包括中断)时进入此模式,此模式下所有代码为特权访问。 【代码限权】 特权访问:对处理器资源拥有
阅读全文
posted @
2017-12-01 17:22
uTank
阅读(665)
推荐(0)
驱动开发之基本
摘要:0、先弄明白模块每个管脚的最基本功能; 1、注意模块每个管脚的初始状态电平;失误案例:一款SPI Flash(winbond W25Q32FV)驱动开发,初始化后,读、写、擦除操作都不成功。出现问题:初始化后两个具有控制属性的管脚没有置于正确的电平状态,导致后面Flash的各种操作失败。 2、初始化
阅读全文
posted @
2016-12-10 10:28
uTank
阅读(569)
推荐(0)
一种根据不同阶段注册不同中断服务函数的写法
摘要:一、注册一个硬件中断服务函数irq_handler,作为硬件中断产生后,实际中断服务函数的总入口。 二、中断服务函数irq_handler入口,根据不同的条件调用不同分支 三、定义一个全局的函数指针,作为“Interrupt Virtual Service Routine”,通过注册函数,在不同阶段
阅读全文
posted @
2016-04-26 18:17
uTank
阅读(376)
推荐(0)
ARM处理器模式
摘要:ARM处理器模式 ARM处理器共有7种运行模式: 除了用户模式之外的其他6种处理器模式称为特权模式(Privileged Modes)。在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。其中,除了系统模式外,其他5种特权模式又称为异常模式。 处理器模式可以通过软件控制进行切
阅读全文
posted @
2015-03-09 17:53
uTank
阅读(568)
推荐(0)
ARM异常中断处理
摘要:ARM异常中断处理 在ARM体系中,通常有以下3种方式控制程序的执行流程: 在正常程序执行过程中,每执行一条ARM指令,程序计数器寄存器(PC)的值加4个字节;每执行一条Thumb指令,程序计数器寄存器(PC)的值加2个字节。整个过程是顺序执行。 通过跳转指令,程序可以跳转到特定的地址标号处执行,或
阅读全文
posted @
2015-03-09 16:01
uTank
阅读(2412)
推荐(0)
Cache
摘要:1、Cache中的块与主存储器中的块时按照什么样的规则建立对应关系的?2、在这种对应关系下,主存地址又是如何变换成Cache地址的?Cache信息:1、数据Cache和指令Cache是分开还是统一的?2、Cache的容量、块大小以及相联特性。3、Cache类型是写通的(Write-through)还...
阅读全文
posted @
2014-05-05 11:30
uTank
阅读(329)
推荐(0)