ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

中断与DMA

2021-04-12 11:34:28  阅读:452  来源: 互联网

标签:DMA 优先级 中断 内存 寄存器 EXTI


中断

Cortex-M3

《ARM Cortex-M3权威指南》中定义:
编号为 1-15 的对应系统异常,大于等于 16 的则全是外部中断。除了个别异常的优先级被定死外,其它异常的优先级都是可编程的。

所有能打断正常执行流的事件都称为异常
复位,NMI 和硬 fault无论何时出现,都立即无条件抢占所有优先级可编程的“平民异常”。

在这里插入图片描述

可联系 startup_stm32xx.s文件来理解

256 个优先级和 128 个抢占级

CM3 还把 256 级优先级按位分成高低两段,分别是抢占优先级和亚优先级。
NVIC 中有一个寄存器是“应用程序中断及复位控制寄存器”((AIRCR),一个位段名为“优先级组”。该位段的值对应每一个优先级可配置的异常——把其优先级分为对应组别形式的两个位段。

亚优先级至少是 1 个位。因此抢占优先级最多是 7 个位,造成了最多只有 128 级抢占的现象。
在这里插入图片描述

抢占优先级决定了抢占行为:当系统正在响应某异常 L 时,如果来了抢占优先级更高的异常 H,则 H 可以抢占 L。亚优先级则处理“内务”:当抢占优先级相同的异常有不止一个
悬起时,就优先响应亚优先级最高的异常。
在这里插入图片描述
CM3 允许从比特 7 处分组,此时所有的位都表达亚优先级,没有任何位表达抢占优先级,因而所有优先级可编程的异常之间就不会发生抢占。

悬起pending

如果一个发生的异常不能被即刻响应,就称它被“悬起”(pending)。不过,少数 fault
异常是不允许被悬起的。一个异常被悬起的原因,可能是系统当前正在执行一个更高优先级
异常的服务例程,或者因相关掩蔽位的设置导致该异常被除能。对于每个异常源,在被悬起
的情况下,都会有一个对应的“悬起状态寄存器”保存其异常请求,直到该异常能够执行为
止,这与传统的 ARM 是完全不同的.
在这里插入图片描述
在这里插入图片描述
中断向量偏移寄存器

中断

中断的类型

硬件中断选择
(1)配置20个中断线的屏蔽位(EXTI_IMR)
(2)配置所选中断线的触发选择位(EXTI_RTSR和EXTI_FTSR)
(3) 配置对应到外部中断控制器(EXTI)的NVIC中断通道的使能和屏蔽位

硬件事件选择
(1)配置20个事件线的屏蔽位(EXTI_EMR)
(2)配置事件线的触发选择位(EXTI_RTSR和EXTI_FTSR)

软件中断/事件的选择
(1)配置20个中断/事件线屏蔽位(EXTI_IMR, EXTI_EMR)
(2)设置软件中断寄存器的请求位(EXTI_SWIER)

中断结构

在这里插入图片描述
具体的寄存器映射
在这里插入图片描述
除了配合GPIO功能复用的16根,还有7根特殊【16-22】
PVD output【连到EXTI的电源电压检测(PVD)中断】
RTC Alarm event
USB OTG FS Wakeup event
Ethernet Wakeup event
USB OTG HS (configured in FS) Wakeup event
RTC Tamper and TimeStamp events
the RTC Wakeup event

DMA

DMA

STM32F207 有两个DMA控制器,总共有16个流(每个控制器8个),每个流专门用于管理来自一个或多个外围设备的内存访问请求。 每个流总共可以有8个可能的通道请求,来自外围设备的8个请求(TIM、ADC、SPI、I2C等。) 独立地连接到每个通道。
在这里插入图片描述

通道映射

在这里插入图片描述

思考:只有DMA2控制器能够执行内存到内存的传输,当使用内存到内存模式时,不允许使用循环和直接模式?
在这里插入图片描述

源传输和目标传输

每个流可以配置为执行
常规类型事务:内存到外围设备、外围设备到内存或内存到内存的传输
双缓冲器类型事务:使用两个内存指针对内存进行双缓冲区传输(当DMA从/写入缓冲区时,应用程序可以写入/读取到/从其他缓冲区)。 要传输的数据量(高达65535)是可编程的,并且与请求连接到外围的DMA传输的外围设备的源宽度有关源传输和目标传输都可以在整个4GB区域中寻址外围设备和内存,地址由0x0000到0x FFFF组成。 该方向是使用DMA_SxCR寄存器中的DIR[1:0]位配置的,并提供三种可能性:内存到外围、外围到内存或内存到内存传输。
闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标。对应有三种:peripheral-to-memory、 memory-to-peripheral、memory-to-memory
在这里插入图片描述
在这里插入图片描述

寄存器

中断状态寄存器和中断标志清除寄存器

DMA有两个中断状态寄存器,分别是DMA high interrupt status register (DMA_HISR)、DMA low interrupt status register (DMA_LISR)。两个都是被硬件赋值的只读寄存器,可以通过对DMA_LIFCR、DMA_HIFCR两个寄存器中相应的位赋值进而改变。
TCIFx: Stream x transfer complete interrupt flag (x = 3…0)对应CTCIFx位
HTIFx: Stream x half transfer interrupt flag (x=3…0)
TEIFx: Stream x transfer error interrupt flag (x=3…0)
DMEIFx: Stream x direct mode error interrupt flag (x=3…0)
FEIFx: Stream x FIFO error interrupt flag (x=3…0)

通道x配置DMA stream x configuration register (DMA_SxCR) (x = 0…7)

优先级管理分为两个阶段:
软件:每个流优先级都可以在DMA_SxCR寄存器中配置,有四个级别,DMA_SxCR寄存器中的PL[1:0]。
硬件:如果两个请求具有相同的软件优先级,则数字较低的流比数字较高的流优先。 例如,流2优先于流4。

每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错)
外设和存储器的传输数据量可以通过DMA_CCRx寄存器中的PSIZE和MSIZE位编程。
DMA中断状态寄存器(DMA_ISR)

标签:DMA,优先级,中断,内存,寄存器,EXTI
来源: https://blog.csdn.net/weixin_43342290/article/details/109715511

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有