开发板FS4412-轮询与中断

一、CPU与硬件的交互方式

1.轮询

CPU执行程序时不断地询问硬件是否需要其服务,若需要则给予其服务,若不需要一段时间后再次询问,周而复始(询问串口)

2.中断

CPU执行程序时若硬件需要其服务,对应的硬件给CPU发送中断信号,CPU接收到中断信号后将当前的程序暂停下来,转而去执行中断服务程序,执行完成后再返回到被打断的点继续执行

3.DMA

硬件产生数据后,硬件控制器可将产生的数据直接写入到存储器中,整个过程无需CPU的参与

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

查看芯片原理图(按键K2)

正常状态下,按键不按下时,UART_RING与1.8V电源相接,呈高电平;按下K2,接地,呈低电平

 查看芯片手册。UART_RING 与芯片引脚GPX1_1相接

查看GPX1_1相关寄存器

 读取GPXDAT寄存器对应位的数值,0表示读取的低电平,1表示高电平

 

#include "exynos_4412.h"
int main()
{
	GPX1.CON = GPX1.CON & (~(0xF << 4));// [7:4]清零
	while(1)
	{
		/*判断GPX1_1引脚的状态,即判断按键是否按下*/
		if(!(GPX1.DAT & (1 << 1))) //按键按下去if成立,按键不按,高电平1,if为0
		{
			printf("key2 pressed\n");
			/*等待松手*/
			while(!(GPX1.DAT & (1 << 1)));//循环直到松手
		}
		else
		{
		c
		}
	}

	return 0;
}

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

1.GPIO中断

当按键按下的时候会给CPU发送信号,执行中断程序,就不需要一遍一遍检测按键是否按下

IRQ常用于外围硬件的中断

2. 设置中断流程及相关寄存器

设置外部硬件产生中断信号

 根据芯片手册GPX1,引脚对应EXT_INT41_FLTCON1

 EXT_INT41_FLTCON1寄存器

设置滤波电路,可以防止按键抖动

也可以设置滤波类型(实际测试这个寄存器没什么用,效果没太大区别)

EXT_INT41_MASK寄存器

设置中断开关(8个引脚的中断控制开关)

 EXT_INT41_PEND寄存器

挂起寄存器:当cpu在处理其他的中断请求的时候,没办法及时的处理当前的中断,把当前中断挂起在GPIO的寄存器,可以等待其他中断处理后再来执行当前中断

这个寄存器一般来说不用自己写,前期初始化不用管 , 但是在中断处理结束后需要手动清零

 产生中断自动置1,0表示没有中断挂起

四、 GPIO中断编程

#include "exynos_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 & (~(1 << 1));

	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值