L12D16 轮询与中断

一、CPU与硬件的狡猾方式

(一)异常处理

1、中断是异常服务程序的一种,异常不是一种错误,而是一种功能。

2、中断常用于驱动中,CPU与外界硬件比如串口、看门狗交互数据。中断是CPU和外界硬件数据交互的一种。

(二)CPU与硬件交互的方式

 

二、轮询方式实现按键实验

 (一)按键的工作原理

 当K2按下后,UART_RING从高电平1.8V到0,松开后,又变成1.8V。

 轮询方式寄存器的功能:

 按键产生的信号时高低电平,GPX1DAT的哪一位为1表示产生高电平,为0表示产生低电平,在本次实验中,GPX1_1要检测GPX1DAT的第1位。

 

#include "exynos_4412.h"
int main()
{
	/*将GPX1_1设置成输入功能*/
	GPX1.CON = GPX1.CON & (~(0xF << 4));
/*判断GPX1_1引脚状态,即判断按键是否按下*/
while(1){
	if(!(GPX1.DAT & (1 << 1)))
	{
	printf("Key2 Pressed\n");
	while(!(GPX1.DAT & (1 << 1)));
	}else{
	}
}
	return 0;
}

三、GPIO中断相关寄存器详解

 

(一)设置中断功能

(二)中断处理细节寄存器

 

1、设置中断触发方式

如果设置成低电平,虽然只按一次,CPU可能会处理很多次中断。在这里使用下降沿比较合适。

2、滤波寄存器

 

在实际过程中,有可能因手抖等原因,在短时间内按了多次按键,滤波寄存器会帮我们滤过杂波,形成一个比较完美的信号。

3、设置中断的开关

4、挂起寄存器

自动更改

 

当CPU正在处理IRQ请求时,将挂起当前的请求。等待CPU处理。不需要认为

四、GPIO中断编程

#include "nxynos_4412.h"

int main()

{

	/*将GPX1_1设置成中断功能*/

	GPX1.CON = GPX1.CON |(0xF << 4);

	/*设置GPX1_1中断触发方式下降沿触发*/

	EXT_INT41_CON = EXT_INT41_CON & (~(0x7 << 4)) | (0x2 << 4)

	/*使能GPX1_1的中断功能*/

	EXT_INT41_MASK = EXT_INT41_MASK & (~(0x1 << 1))

	return 0;

}

五、作业

1.简述轮询和中断两种方式的本质区别是什么
2.使用轮询的方式检测Key3按键的状态,实现按一次按键,LED2点亮,再次按下,LED2熄灭

1、轮询是CPU定时向硬件询问是否需要提供服务,如果需要则给予,若不需要过一段时间,再次询问,周而复始。
中断是硬件需要服务时,像CPU发送中断信号,CPU接到中断信号后,将程序暂停下来,执行中断处理程序,然后返回断点继续执行,不会主动向硬件检测。

#include "exynos_4412.h"

void delay(unsigned int Time){

while(Time --);

}

int main()

{

	int flag = 1;

	/*将GPX1_2设置成输入功能*/

	GPX1.CON = GPX1.CON & (~(0xF << 8));

	/*判断GPX1_2引脚状态,即判断按键是否按下*/



	while(1){

		if(!(GPX1.DAT & (1 << 2)))

		{

			printf("Key3 Pressed\n");

			if(flag){

			/*LED2*/

			GPX2.CON = GPX2.CON &(~(0xF << 28)) | (0x1 << 28);

			/*点亮LED2*/

			GPX2.DAT = GPX2.DAT | (1 << 7);

			flag = 0;

			}else{

			/*延时点亮*/

			delay(1000000);

			/*熄灭LED2*/

			GPX2.DAT = GPX2.DAT & (~(1 << 7));

			/*延时*/

			delay(1000000);

			flag = 1;

			}

		while(!(GPX1.DAT & (1 << 2)));

		}else{



		}

	}

	return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值