导语:
前面已经演示了如何配置GPIO的输入和输出,这次就接着讲GPIO的中断如何使用
TOUR
首先MSPM0把CPU中断,DMA触发,以及外设触发外设,都统称为事件(Event)触发源称为事件发布者(Event Publisher),相应中断的外设被称为事件订阅者(Event Subscriber)。
Event的传播路由分为三类,第一个是静态事件路由(Static Event Route),就是指的事件发布者(Event Publisher)到事件订阅者(Event Subscriber)是固定路径,不可配置,例如外设到CPU的中断,中断标志位需要手动清除。
第二种称为DMA事件路由(DMA Event Route),这个是外设与DMA的之间的点对点连接,路径不可配置,中断标志会自动清除
第三种称为通用事件路由(Generic Event Route),就是外设到外设,外设到DMA,CPU之间的可配置连接,例如定时器触发ADC,IO触发IO,这些都是通用事件路由,中断标志会自动清除。
特别说明的是,在通用事件路由中,Event Publisher是一个,Event Subscriber最多支持到两个,也就是说,一个事件可以触发最多两个动作,例如一个按键可以触发两个GPIO进行翻转。
下图是MSPM0L系列的事件的路由表,绿色线是Event Publisher的路径,红色是Event Subscriber的路径。
在本次的教程中,将使接在用PA7按键触发PA0的LED点亮和熄灭,软件上使用CPU中断和通用事件路由两种方式。
实操例程1
首先是CPU中断的方式
用上一个GPIO的例程,在SYSCONFIG中,设置Key的中断为允许,中断方式为上升沿和下降沿都会触发,保存设置就可以了
程序也是比较简单,第一步需要开启PA的中断,中断函数使用的是GROUP1_IRQHandler,为什么是这个中断函数,其实上面的事件路由表已经写了,GPIO到CPU的静态事件路由,中断请求使用的是GRP1.
关于中断函数的名称,可以在启动文件中找到中断向量表。
整个程序也是比较简单。
配套工程名为 Interrput_CPU。
实操例程2
第二种是使用通用事件路由的方法,让key直接触发LED的翻转,不经过CPU。
只需要在Key中配置事件发布通道,这里选择的是1通道。
然后在LED中,配置事件订阅通道,这里还是选择1通道,就可以成功的把key的事件和LED连接起来,同时在输出策略这里配置为翻转,就可以实现LED的亮和灭。
最后保存配置就可以了,来到程序中,可以看到main什么都不需要写,甚至连中断都不需要打开,因为这个是触发是通过外设到外设的连接,没有经过CPU干预,所以除了初始化配置也就没有任何额外的代码。
配套工程名为 Interrput_Event。
MSPM0是允许静态事件路由和通用事件路由同时存在的,在GPIO事件路由表中,可以看到CPU IRQ和FPUB两个事件路由,也就是说,我们还可以写一个中断函数来控制其他的外设。
这里需要说明的是,GPIO里的FPUB_0(事件发布端口)和FSUB_0(事件订阅端口)对应的是某一组GPIO里面的0-15管脚,FPUB_1和FSUB_2对应的是16-31管脚,也就是说,如果你想1个按键控制两个LED,这两个LED必须在不同GPIOx,或者至少在同一个GPIOx的不同区域(不能同时在0-15管脚或者16-31管脚)。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !