这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 坤创E-Geek/天科大新电社 » 【2021全国电赛】坤创4队记录:02 MSP430F5529LP学习总结(二)

共1条 1/1 1 跳转至

【2021全国电赛】坤创4队记录:02 MSP430F5529LP学习总结(二)

菜鸟
2021-07-21 20:24:08     打赏

前言:本次实验依旧是基于ccs开发环境下写入。


一、中断标志寄存器PxIFG

每个PxIFGx位是针对其相应I/O引脚的中断标志,并且当被选择的输入信号边沿出现在引脚上时被置位。当它们相应的PxIE位和GIE位被置位时,所有的PxIFGx中断标志要求一个中断。每个PxIFG标志必须由软件复位。软件也可设定每个PxIFG标志,从而提供了一个生成软件初始中断的方法。

● 位0:无中断等待

● 位1:一个中断等待

只有转换,而非静态电平,导致中断。如果在一个Px中断处理例程期间任何PxIFGx标志被置位,或着在一个Px中断处理例程的RET1指令被执行后被置位的话,被置位的PxIFGx标志生出另外一个中断。这确保每个转换被确认。

*注:当改变PxOUT或PxDIR时的PxIFG标志写入P1OUT,P2OUT,或P2DIR可导致设置相应的P1IFG或者P2IFG标志。

二、中断边沿选择寄存器PxIES

每个PxIES位相应的I/O引脚选择中断标志。

位 = 0:用一个低电平到高电平转换来设定PxIFGx标志

位 = 1:用一个高电平到低电平转换来设定PxIFGx标志

*注:当改变PxOUT或PxDIR时的PxIFG标志写入P1OUT,P2OUT,或P2DIR可导致设置相应的P1IFG或者P2IFG标志。

PxIESxPxINx PxIFGx
0->10可被置位
0->11未改变
1->00未改变
1->01可被置位

三、中断使能PxIE

每个PxIE位启用相关的PxIFG中断标志。

● 位0:中断被禁用。

● 位1:中断被启用。

四、配置未使用的端口引脚

未使用的I/O引脚应该被配置为I/O功能,输出方向,并在板子上保持未连接状态,以防止一个悬空输入并减少流耗。由于引脚未连接,PxREN位来启用以防止悬空输入。未使用引脚的终止。


实验:用中断程序来执行按键操作

实验步骤:

首先配置P4.7I/O 口,让LED2初始状态为灭,再配置按键操作。(本次实验是基于上次实验的基础上进行的,因此与上次实验的相关性很大,因此有重复的地方会相应的简略。)

接下来配置中断相关的函数,配置P1.1I/O口为中断,因此将相应的位置1,把P1IE置1,打开了中断。 并且设定为下降沿触发(因为按键按下是低电平,因此P1.1口会从高电平变为低电平,所以是下降沿触发),要把相应的位置1,因此是把P1IES置1。一定要清除中断标志位,之后要打开全局中断。

最后我们要加入中断函数,#pragma相当于宏定义,此中断函数是一个模板,具体的如下图代码,都有相应的注释。

在if语句中,我们判断P1.1是否产生了中断,如果是要对中断标志位清零。进一次中断后,LED2会产生一次亮灭状态。

代码部分:

1626868817920638.png

1626868847310010.png

实验现象:

按键按下时,LED2会亮,再按下按键LED2会灭。(有时按键按以下会亮灭两次,这是因为按键有抖动,是由于重复进中断产生的)

*注:采用中断的好处是不占用CPU的时间,但是也可以处理这个任务~


总结

(使用中断需要注意的问题):把相应寄存器的中断都配置好,比如I/O口的中断首先使能相应的中断,然后设置以下边沿触发条件,再清除中断标志位,再打开全局中断,最后写中断服务函数,这个中断服务函数是一个模板,当用其他的端口时,我们只需将PORT1_VECTOR 与Port1_ISR修改即可。




关键词: 2021全国电赛     MSP430F5529LP     中断    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]