笔记:合泰单片机BH66F2652开发(三)INT

笔记:(三)INT外部中断驱动

Author:家有仙妻谢掌柜
Date:2021/2/26
本文已于2021/3/1更新完毕。

本文用到的数据手册连接在这里

这里只分析中断的外部引脚中断,至于其他的,如:定时器中断会在Timer篇章中详解,ADC中断会在ADC篇章中详解等等
关于合泰的中断服务函数写法,在IDE中一定是这样的,固定格式。
如:DEFINE_ISR(INT1ISR,INT1VECTOR)
1.函数名字DEFINE_ISR:	无论是INT0还是INT1又或者是定时器中断,他们的中断服务函数名字都是DEFINE_ISR,这是编译器识别的入口,其他的不行。
2.第一个参数INT1ISR:	针对不同的中断你可以命名独立的函数名字,如:INT1ISR,这就是INT1的标识,这个标识是你自己定义的可以随便写的。
3.第二个参数INT1VECTOR:	中断的向量这里在头文件中定义了,#define INT1VECTOR 	0x08

中断向量表如下图:在这里插入图片描述
图中红色方框标识的就是INT1的中断向量,其中箭头标识的寄存器INT1F是请求标志位,左上角的黑色三角,是文档说明,它说明了该请求标志位寄存器的值表示的是可以自动复位的,就是可以自动清零的,

//因此我们不能在中断服务子程序中写上
DEFINE_ISR(INT1ISR,INT1VECTOR)
{
	if(_int1f)
	{
	//想要执行的事情
	}
	_int1f = 0;	
}
//而是要这样写
DEFINE_ISR(INT1ISR,INT1VECTOR)
{
	//想要执行的事情
	_int1f = 0;	
}

接下来,走一波完整的配置,实现的功能是对黑白条进行计数,中断程序中是不要写太多的东西的,一般都是写一些这样的东西,当中断发生,更新标位置,或者当中断发生 ,对某一个值进行计数,或者中断发生,改变某引脚电平等等,执行的任务越少越好。

#include "include.h"
/*******************************************************************************
 * fuction	IRONInit	
 * brief	
 * param	无                                                             
 * return	无
 *******************************************************************************/
void INT1PinInit(void)
{
	_pas17 = 0;
	_pas16 = 0;
	gpioInput(INT1Pin);			//PA7
	gpioPullUpEnable(INT1Pin);	//PA7

 	_integ = 0x08;			//0b00001000
	_int1e = 1;  		 	//外部中断1中断使能
	_int1f = 0;   			//清外部中断1标志位	
	_emi = 1;     			//使能总中断
}  
/*******************************************************************************
 * fuction	INT1ISR	
 * brief	INT1中断函数
 * param	
 * return	无
 *******************************************************************************/
DEFINE_ISR(INT1ISR,INT1VECTOR)
{
	//中断中尽量执行比较简单的任务,这里只对某一个值进行计数
	Cnt++;	
	_int1f = 0;	
}

INT1PinInit函数中,使用到的寄存器分析

1、边沿触发寄存器选择

在这里插入图片描述
我在这里使用的是下降沿触发中断,

2、中断请求,开启中断配置

在这里插入图片描述
这里打开INT1控制位寄存器故而让_int1e = 1;
这里打开总中断控制位 故而让_emi = 1;
是否有事件请求,如果有的话是要_int1f = 1;但是置1之后,会进入到中断子程序内,因此我们要设置为0,当有中断来的时候,他会自动设置为1,故而_int1f = 0;

3、中断引脚复用配置

在这里插入图片描述
这里要注意的是引脚复用功能,PA7要作为中断,必须开启引脚复用功能,只需设置对应的寄存器即可。 _pas17 = 0; _pas16 = 0;这里选择是00。

#ifndef _IR_H
#define _IR_H

#include "BH66F2652.h"

#define INT1Pin		PA7 //计数 外部中断1
#define INT1VECTOR 	0x08

extern void INT1PinInit(void);

#endif
/*--------------------------------END THE FILE-----------------------------------*/
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值