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口为输入,是否上拉取决于外部电路
- 中断使能
- 配置触发方式
- 清除中断标志位
- 打开全局中断
- 中断服务函数配置(一定记得清除中断标志位)
代码
到此这篇msp430f149单片机(msp430F149单片机用C语言怎么编写退格键'\\b')的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/goyykf/35432.html