LP-MSPM0L1306开发板试用体验+2 相同的配方,不同的味道(事件的处理)

[复制链接]
 楼主| 6552918 发表于 2023-10-31 23:29 | 显示全部楼层 |阅读模式
本帖最后由 6552918 于 2023-10-31 23:29 编辑

在看MSPM0 L系列的用户手册是发现,文档中没有中断的章节而是多出了个事件,在ARM的内核文件中对中断和事件都有过描述,但仔细研究MSPM0 L用户手册后发现MSPM0的事件处理要比一般的MCU中的事件和中断要强大很多,有种相同的配方,不同的味道的意思!!!
首先MSPM0把CPU中断,DMA触发,以及外设触发外设,都统称为事件(Event)。触发源称为事件发布者(Event Publisher),相应中断的外设被称为事件订阅者(Event Subscriber)。
020c0dba481cac6f11e7628962528f8e
628fe643b29dd8121870ae1fdb09b1e7
事件结构的路由有三种不同类型,用于将发布者连接到订阅者:CPU 中断事件、 DMA 触发事件和通用事件。
CPU 中断事件
597d388ede8d90eb55d919c36dc8303f
DMA 触发事件
28df9fe55d3447792c52796791717dd2
通用事件
9a6636deaa4386b20aa4ae132878ea68
c5e3670dd95de2c9b1ea53a10aedb029
特别说明的是,在通用事件路由中,Event Publisher是一个,Event Subscriber最多支持到两个,也就是说,一个事件可以触发最多两个动作,例如一个按键可以触发两个GPIO进行翻转。
下图是MSPM0L系列的事件的路由表,绿色线是Event Publisher的路径,红色是Event Subscriber的路径。
6eedca5dc4dad61e5fe3599434a41982
下面我们通过例程来看一下上述内容的具体实现
首先看一下例程中的按键中断控制LED亮灭的例程,按下按键LED亮,松开按键LED灭。
按键配置如下,PA14为输入,并产生中断,触发条件为上升沿和下降沿都中断
f2b99629414d130d4d1a9ff70c86fff0
LED配置为普通输出
65a20f8c2a435379325e8cc9fa345ff4
代码操作实现如下,输入中断进行LED的输出控制。
9299cd31bd564f5a27d3b88513f5f1e5
实现上述功能还有一种使用通用事件路由的方法,让按键直接触发LED的翻转,不经过CPU。相关设置如下
按键管脚需要设置一个按键事件发布通道
3371c0346d7ed4336a4a1cec750aaa41
LED管脚配置事件订阅和事件响应策略
024940d620bfabfd7430693a66370889
最后保存配置就可以了,来到程序中,可以看到main什么都不需要写,甚至连中断都不需要打开,因为这个是触发是通过外设到外设的连接,没有经过CPU干预,所以除了初始化配置也就没有任何额外的代码。
248aa9b001c234a21cf0061cd2c0af92
这里需要说明的是,GPIO里的FPUB_0(事件发布端口)和FSUB_0(事件订阅端口)对应的是某一组GPIO里面的0-15管脚,FPUB_2和FSUB_2对应的是16-31管脚,也就是说,如果你想1个按键控制两个LED,这两个LED必须在不同GPIOx,或者至少在同一个GPIOx的不同区域(不能同时在0-15管脚或者16-31管脚)。

总结,MPSM0L的事件处理功能非常强大,提供了除了DMA外的另外一种不经过CPU来处理任务的方式,因为MPSM0L主频不是很高,事件功能大大提高了MPSM0L的处理能力,实际使用中比较有意义。

xyz549040622 发表于 2023-11-30 22:51 | 显示全部楼层
MSPM0L系列的中断是通过事件路由来实现的。和传统的中断比起来,区别还是很大的。
 楼主| 6552918 发表于 2023-12-1 09:40 | 显示全部楼层
xyz549040622 发表于 2023-11-30 22:51
MSPM0L系列的中断是通过事件路由来实现的。和传统的中断比起来,区别还是很大的。 ...

功能很强!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:北京汇冠触摸技术有限公司/电子工程师
简介:电子工程师,嵌入式应用爱好者。

102

主题

1290

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部