<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg>
讯享网
MSP430的很多外设都能触发中断,那么如果多个中断同时被触发会怎么样呢?MSP430在进入中断时会自动关闭全局中断使能位(GIE),所以如果MSP430已经在一个中断里,是不能再进入另一个中断的,这时另一个(或多个)中断排队等候,等到当前中断结束后再进入下一个中断。
如果有多个中断同时在等候,需要注意它们的优先级并不是由时间顺序决定的,而是由MSP430本身规定的中断优先级来决定,这个优先级在中断向量表里可以看到。所以在当前中断结束之后,CPU会自动按照中断优先级来依次执行。
本节提到的寄存器全部在用户指南的12.4中
1. 配置IO功能
- PxSEL0和PxSEL1寄存器

讯享网

查找用户数据手册配置IO功能为普通IO(在这里可以默认不用配置)
目录地址(6.Detailed Description-6.11Peripherals-6.11.24Input/Output Diagrams) - PxDIR寄存器

配置IO口方向为输入(0为输入)
- PxREN寄存器

配置上下拉电阻使能(1为使能) - PxOUT寄存器

如果是输出模式则配置输出的高低电平,如果是输入模式则配置上拉电阻还是下拉电阻(跟据需要配置)(1是输出高电平/上拉)
2. PxIE寄存器

中断使能位,PxIE中的x对应Portx,寄存器中的8位对应P1.0-P1.7
3. PxIE寄存器

配置中断触发方式,注意这里的默认值是不确定的,也就是说在配置时此寄存器必须进行配置。(0为上升沿,1为下降沿)
4. PxIFG寄存器

Portx中断标志位寄存器

5. PxIV寄存器

多源中断判断寄存器,因为每个Port都有8个IO口,而他们共用一个中断源,因此就有一个怎么区分的问题,对应中断源表下图所示:

讯享网
1. #pragma vector = TIMER1_A1_VECTOR
#Pragma是编译器指令,是告诉编译器将函数与中断向量连接起来。“vector=”后面是中断向量地址的宏定义。
我在msp430fr6989.h文件中只找到了四个外部中断源,分别是:PORT1_VECTOR、PORT2_VECTOR、PORT3_VECTOR、PORT4_VECTOR。是否说明只支持四个外部中断源,只能Port1-Port4才能使用外部中断,并且一个Portx的8个IO对应一个中断源,属于多源中断,此时需要读取PxIV寄存器来判断是哪个IO源触发的。
外部中断向量入口有:
不同外设的中断向量名在哪里找呢?打开CCS可以跳转到一个名为msp430.h的头文件。在里面在找到“msp430fr6989.h”这个头文件,搜索Interrupt Vectors, 这个下面包含了所有寄存器位的宏定义,包括中断向量的宏定义。其中包含了所有中断向量的名称。例如P1端口的中断向量名就是PORT1_VECTOR。
2. interrupt void External_Interrupt(void)
interrupt关键字表明这是一个中断服 务函数,CPU见到这个关键字以后就会去做中断之前的准备工作。External_Interrupt是用户自己取的函数名称,这个名称可以任意命名。
3. 中断服 务函数的具体内容
中断服 务函数的内容依据中断的不同种类有所差别。退出中断前根据情况将中断标志位复位。
- 配置IO口为输入,是否上拉取决于外部电路
- 中断使能
- 配置触发方式
- 清除中断标志位
- 打开全局中断
- 中断服务函数配置(一定记得清除中断标志位)
代码





版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/172281.html