完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、Cortex-M3 处理器内核 vs 基于Cortex-M3的MCU
Cortex-M3 处理器内核是由 ARM 公司设计的,传统意义上的 ARM7/ARM9(简称A7/A9) 也是处理器内核,也是 ARM 公司设计的。 Cortex‐M3处理器内核:故名思意就是单片机(MCU)的核心,是单片机的中央处理单元(CPU) 完整的基于CM3的MCU还需要很多其它组件。在芯片制造商得到CM3处理器内核的使用授权后,它们就可以把CM3内核用在自己的硅片设计中,添加存储器,外设, I/O以及其它功能块。不同厂家设计出的单片机会有不同的配置,包括存储器容量、类型、外设等都各具特色。 二、中断和异常 中断属于异常的一种。所有能打断正常执行流的事件都称为异常 CM3 的所有中断机制都由 NVIC 实现。除了支持 240 条中断之外, NVIC 还支持 16‐4‐1=11 个内 部异常源(保留了 4+1 个档位),可以实现 fault 管理机制。结果, CM3 就有了 256 个预定义的异常类型。其中编号为 1-15 的对应系统异常,大于等于 16 的则全是外部中断。 类型编号为 1-15 的系统异常如表 7.1 所示(注意: 没有编号为 0 的异常),从 16 开始的外部中断类型如表 7.2 所示 虽然 CM3 是支持 240 个外中断的,但具体使用了多少个是由芯片制造商决定。 CM3 还有一个NMI(不可屏蔽中断)输入脚。当它被置为有效( assert)时, NMI 服务例程会无条件地执行。 三、STM32外部中断(EXTI ) STM32F103 是基于 CM3 内核设计的,ST 公司(芯片制造商)在原有 CM3 内核基础上,添加了储如定时器、串口、DMA等外设,最终组合成一个STM32单片机。其中 CM3 内核是整个单片机的核心部分,相当于CPU(大脑) 所以 STM32 根据原有 NVIC 中断,从中选择性添加了部分中断,并重新命名与排序。下图是STM32的中断向量表: 从表中可以看出,STM32 对上文中 CM3 内核的系统异常/外部中断表重新进行了编排和删减,把编号从-3 至 6 的中断向量定义为系统异常。从编号 7 开始将原本 CM3 所描述的外部中断又分成了若干中断类型:外部中断(EXTI)、定时器中断、DMA中断等等。 细心的朋友可能已经发现了这里有一个概念冲突:外部中断。释义如下: CM3 内核描述中的外部中断均是相对于内核而言的,比如串口中断、定时器中断等等都是(内核的)外部中断!而这里提到的STM32的外部中断(EXTI)指的是芯片的外部中断,主要是由芯片外部事件触发的中断,不是内核的外部中断!所以当阅读 STM32 参考手册时,外部中断(EXTI)指的均是芯片外部(IO引脚)事件触发的中断。而当阅读网络文章时,则要注意区分。为了避免混淆,都会加 (EXTI) 以区分。 这里还有一个概念:软件中断 ,下文中再详述。 另外 STM32 是没有 内部中断 这个概念的, 四、中断/事件关系 MCU运行过程,其中会有许多各种各样的事件,比方:管脚电平变化、计数器溢出、DMA空、FIFO非空、AD转换结束、超时、外设使能、初始化等等。 其中有些事件本身是不会导致中断产生的,比方外设使能或部分初始化动作是不会导致中断发生的;有些事件则可能导致中断发生,比方计数器溢出,AD转换结束等,这些就是中断事件。当然这些中断事件最终能否触发后续中断,还需要对中断事件进行配置。 先说结论
这张图的在 STM32中文手册 中是错误的,英文版的是对的。因而网上很多文章此处的配图都有误,我这里重置了。 我们先关注两个寄存器:中断屏蔽寄存器和事件屏蔽寄存器。这两个寄存器决定了从编号1、2、3输入进来的事件最终会输出脉冲发生器(不产生中断)还是 NVIC 中断控制器(产生中断)。从而决定了输入的事件是中断事件还是非中断事件。 MCU参考手册里在谈到事件的触发方式时引入了事件模式和中断模式两个概念。这里的不同模式就是通过控制这两个寄存器实现的。 例子:接下来详细说明 EXIT 执行过程。 上图中信号线上划有一条斜线,旁边标志 19字样的注释,表示相同的这样的中断线路共有19条。EXTI中有一个边沿检测电路(编号②)监视着输入线(编号①),并分别与上升沿和下降沿选择寄存器对比。 如果在这两个寄存器中相应的中断线检测开启了,那么当中断线上有上升沿或者下降沿时边沿检测电路就会产生一个事件触发信号给后继的或门。 除了边沿检测电路的输出外,或门(编号 ③)还接受一个软件中断事件寄存器的输入。 软件中断事件寄存器的存在使得我们可以通过软件的形式直接触发某一个中断线上的事件。 我们可以通过程序控制此处的软件中断事件寄存器,人为的通过或门(编号 ③)输入一个外部事件,从而不需要真实的外部输入,就能产生一个可能触发中断的事件,相当与模拟该中断线上的事件。 诸如ADC、串口、定时器之类产生的中断,就叫 名称+中断,如:定时器中断、串口中断、ADC中断。并不属于这里的软件中断范畴,STM32手册中唯一提到软件中断这个词的就是指这个寄存器,不要混淆了。或门的输出接到了两个与门(编号 ④、⑤)上,一方面与中断屏蔽寄存器求与编号(④)触发中断, 另一方面与事件屏蔽寄存器求与(⑤)触发事件。 中断屏蔽寄存器控制了相应的中断是否开启了,如果开启了中断将会产生一个中断触发信号,置位中断请求寄存器, 同时将中断触发信号提交给中断控制器(NVIC)。 同样的道理,事件屏蔽寄存器控制事件是否开启,如果开启则直接产生一个脉冲通知后继的功能模块处理事件,例如通知DMA读写内存等。 从这张图上我们也可以知道,从外部激励信号来看,中断和事件的产生源都可以是一样的。之所以分成2个部分,因为中断是需要CPU参与的,需要软件的中断服务函数才能完成中断后产生的结果;但是事件,是靠脉冲发生器产生一个脉冲,进而由硬件自动完成这个事件产生的结果,当然相应的联动部件需要先设置好,比如引起DMA操作,AD转换等; 简单举例: 外部I/O触发AD转换,来测量外部物品的重量;相比之下,后者不要软件参与启动AD转换,并且响应速度也更块;要是再使用事件触发DMA操作,就完全不用软件参与(AD转换后操作)就可以完成某些联动任务了。 总结:
|
|
|
|
只有小组成员才能发言,加入小组>>
3318 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9063 浏览 16 评论
4088 浏览 18 评论
1185浏览 3评论
609浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
601浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2337浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1897浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 08:13 , Processed in 1.218518 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号