key_int按键中断实验

实验内容:

通过开发板上的按键中断控制led灯进行跑马灯并打印信息。

通过简单事例说明猎户座4412处理器的GIC中断处理的应用,设置key2按键连接的引脚为中断模式,当识别按键被按下时进入相应的中断处理函数

实验目的:

熟悉开发环境的使用

掌握猎户座4412处理器的中断过程及编程。

实验平台:

fs4412开发板,eclipse,secureCRT。

实验步骤:

对外设进行使能:

1.查看key2在开发板的位置:

2.查看UART_RING在核心板的位置:

3.查看GPX1在芯片手册的位置:

4.查看GPX1的中断源:

5.设置TXT_INT41[1]为下降沿触发。

6.使能TXT_INT41[1]

实验代码

 #include "exynos_4412.h"
typedef enum
{
false,
true
}bool;
void do_irq()
{
// 获取中断号
unsigned int irq_num = CPU0.ICCIAR & 0x3ff;
switch(irq_num)
{
case :
printf("This interrupt id is %d\n", irq_num); led_isOn(true);
mydelay_ms();
led_isOn(false);
//mydelay_ms(1000); EXT_INT41_PEND = 0x1 << ; // 清pend(置1清0)
ICDICPR.ICDICPR1 = 0x1 << ; // 清中断使能位
break;
case :
printf("58This interrupt id is %d\n", irq_num);
break;
default:
printf("Interrupt is not exist!\n");
break;
} // 把处理器中处理完的中断号返回给gic
// 告诉gic该中断处理结束,可以送入下一个pending进入
CPU0.ICCEOIR = (CPU0.ICCEOIR & ~(0x3ff)) | irq_num;
} void peripheral_init()
{
GPX1.CON = 0xf << ; // 配置GPIO为外部中断
EXT_INT41_CON = 0x2 << ; // 下降沿触发中断
EXT_INT41_MASK = 0x0; // 使能相应外设
} void gic_init()
{
ICDDCR = 0x1; // 使能中断到分配器
ICDISER.ICDISER1 = 0x1 << ; // 使能按键中断号
CPU0.ICCICR = 0x1; // 把中断从cpu接口送入处理器
// 屏蔽中断优先级,255表示所有中断都允许通过
CPU0.ICCPMR = 0xff;
ICDIPTR.ICDIPTR14 = 0x1 << ; // 选择cpu接口
} void mydelay_ms(int ms)
{
int i, j;
while(ms--)
{
for (i = ; i < ; i++)
for (j = ; j < ; j++);
}
} void len_init(){
GPX1.CON = (GPX1.CON& (~0xf)) | 0x1;
GPF3.CON = GPF3.CON | (0x1<<);
GPF3.CON = GPF3.CON | (0x1<<);
GPX2.CON = GPX2.CON & (~(0xf<<)) | (0x1<<);
}
void led_isOn(bool bFlag)
{
if(bFlag == false)
GPX2.DAT &= ~(0x1<<); // led is off
else
GPX2.DAT |= 0x1<<; // LED is on mydelay_ms(); if(bFlag == false)
GPX1.DAT &= ~0x1; // led is off
else
GPX1.DAT |= 0x1; // LED is on mydelay_ms();
if(bFlag == false)
GPF3.DAT &= ~(0x1<<); // led is off
else
GPF3.DAT |= 0x1<<; // LED is on
mydelay_ms(); if(bFlag == false)
GPF3.DAT &= ~(0x1<<); // led is off
else
GPF3.DAT |= 0x1<<; // LED is on }
int main()
{
peripheral_init();
gic_init(); len_init(); int i = ;
while()
{
printf("i = %d\n", i++);
mydelay_ms();
} return ;
}

实验结果;

拓展:根据key2 的代码写一个key3 的代码。

查看k3在开发板的位置:

查看SIM_DET 在核心板的位置;

查看GPX1_2在芯片手册的位置;

中断源:

代码:

 /*
* main.c
*
* Created on: 2018-9-24
* Author: Administrator
*/ #include"exynos_4412.h"
typedef enum
{
false,
true
}bool; void do_irq()
{
// 获取中断号
unsigned int irq_num = CPU0.ICCIAR & 0x3ff;
switch(irq_num)
{ case :
printf("58This interrupt id is %d\n", irq_num);
led_isOn(true);
mydelay_ms();
led_isOn(false);
//mydelay_ms(1000); EXT_INT41_PEND = 0x1 << ; // 清pend(置1清0)
ICDICPR.ICDICPR1 = 0x1 << ; // 清中断使能位 break;
default:
printf("Interrupt is not exist!\n");
break;
} // 把处理器中处理完的中断号返回给gic
// 告诉gic该中断处理结束,可以送入下一个pending进入
CPU0.ICCEOIR = (CPU0.ICCEOIR & ~(0x3ff)) | irq_num;
} void peripheral_init()
{
GPX1.CON = 0xf << ; // 配置GPIO为外部中断
EXT_INT41_CON = 0x2 << ; // 下降沿触发中断
EXT_INT41_MASK = 0x0; // 使能相应外设
} void gic_init()
{
ICDDCR = 0x1; // 使能中断到分配器
ICDISER.ICDISER1 = 0x1 << ; // 使能按键中断号
CPU0.ICCICR = 0x1; // 把中断从cpu接口送入处理器
// 屏蔽中断优先级,255表示所有中断都允许通过
CPU0.ICCPMR = 0xff;
ICDIPTR.ICDIPTR14 = 0x1 << ; // 选择cpu接口
} void len_init(){
GPX1.CON = (GPX1.CON& (~0xf)) | 0x1;
GPF3.CON = GPF3.CON | (0x1<<);
GPF3.CON = GPF3.CON | (0x1<<);
GPX2.CON = GPX2.CON & (~(0xf<<)) | (0x1<<);
}
void led_isOn(bool bFlag)
{
if(bFlag == false)
GPX2.DAT &= ~(0x1<<); // led is off
else
GPX2.DAT |= 0x1<<; // LED is on mydelay_ms(); if(bFlag == false)
GPX1.DAT &= ~0x1; // led is off
else
GPX1.DAT |= 0x1; // LED is on mydelay_ms();
if(bFlag == false)
GPF3.DAT &= ~(0x1<<); // led is off
else
GPF3.DAT |= 0x1<<; // LED is on
mydelay_ms(); if(bFlag == false)
GPF3.DAT &= ~(0x1<<); // led is off
else
GPF3.DAT |= 0x1<<; // LED is on } void mydelay_ms(int ms)
{
int i, j;
while(ms--)
{
for (i = ; i < ; i++)
for (j = ; j < ; j++);
}
} int main(){
peripheral_init();
gic_init();
len_init();
int i = ;
while()
{
printf("i = %d\n", i++);
mydelay_ms();
} return ;
}

拓展二,由原先的中断使用CPU0,改为使用cpu1;

代码

 #include "exynos_4412.h"
typedef enum
{
false,
true
}bool;
void do_irq()
{
// 获取中断号
unsigned int irq_num = CPU0.ICCIAR & 0x3ff;
switch(irq_num)
{
case :
printf("This interrupt id is %d\n", irq_num); led_isOn(true);
mydelay_ms();
led_isOn(false);
//mydelay_ms(1000); EXT_INT41_PEND = 0x1 << ; // 清pend(置1清0)
ICDICPR.ICDICPR1 = 0x1 << ; // 清中断使能位
break;
case :
printf("58This interrupt id is %d\n", irq_num);
break;
default:
printf("Interrupt is not exist!\n");
break;
} // 把处理器中处理完的中断号返回给gic
// 告诉gic该中断处理结束,可以送入下一个pending进入
CPU0.ICCEOIR = (CPU0.ICCEOIR & ~(0x3ff)) | irq_num;
} void peripheral_init()
{
GPX1.CON = 0xf << ; // 配置GPIO为外部中断
EXT_INT41_CON = 0x2 << ; // 下降沿触发中断
EXT_INT41_MASK = 0x0; // 使能相应外设
} void gic_init()
{
ICDDCR = 0x1; // 使能中断到分配器
ICDISER.ICDISER1 = 0x1 << ; // 使能按键中断号
CPU1.ICCICR = 0x1; // 把中断从cpu接口送入处理器
// 屏蔽中断优先级,255表示所有中断都允许通过
CPU1.ICCPMR = 0xff;
ICDIPTR.ICDIPTR14 = 0x1 << ; // 选择cpu接口
} void mydelay_ms(int ms)
{
int i, j;
while(ms--)
{
for (i = ; i < ; i++)
for (j = ; j < ; j++);
}
} void len_init(){
GPX1.CON = (GPX1.CON& (~0xf)) | 0x1;
GPF3.CON = GPF3.CON | (0x1<<);
GPF3.CON = GPF3.CON | (0x1<<);
GPX2.CON = GPX2.CON & (~(0xf<<)) | (0x1<<);
}
void led_isOn(bool bFlag)
{
if(bFlag == false)
GPX2.DAT &= ~(0x1<<); // led is off
else
GPX2.DAT |= 0x1<<; // LED is on mydelay_ms(); if(bFlag == false)
GPX1.DAT &= ~0x1; // led is off
else
GPX1.DAT |= 0x1; // LED is on mydelay_ms();
if(bFlag == false)
GPF3.DAT &= ~(0x1<<); // led is off
else
GPF3.DAT |= 0x1<<; // LED is on
mydelay_ms(); if(bFlag == false)
GPF3.DAT &= ~(0x1<<); // led is off
else
GPF3.DAT |= 0x1<<; // LED is on }
int main()
{
peripheral_init();
gic_init(); len_init(); int i = ;
while()
{
printf("i = %d\n", i++);
mydelay_ms();
} return ;
}

结果

ARM实验5 —— 按键中断实验的更多相关文章

  1. cc2530的第三次实验,按键中断控制流水灯

    cc2530的第三次实验:按键中断控制流水灯 效果为按一次按键,流水灯亮一次 实验相关电路图: 实验相关寄存器: 初始化函数 //初始化LED灯 //设置P1SEL,通用为0,外设为1 1111110 ...

  2. 【黑金ZYNQ7000系列原创视频教程】06.ZYNQ来自FPGA的中断——按键中断实验

    黑金论坛地址: http://www.heijin.org/forum.php?mod=viewthread&tid=36640&extra=page%3D1 爱奇艺地址: http: ...

  3. FPGA与simulink联合实时环路系列——实验三 按键key

    实验三 按键key 实验内容 在FPGA的实验中,经常涉及到按键的使用,按键是必不可少的人机交互的器件之一,在这些实验中,有时将按键的键值读取显示到数码管.LCD或者是通过串口传送到PC的串口助手上进 ...

  4. u-boot中断功能初步分析之---------按键中断

    作者:彭东林 邮箱:pengdonglin137@163.com QQ: 405728433 以前一直有个疑问,在U-boot下到底能不能使用中断,为了验证这个问题,于是乎,昨天晚上我在自己的 TQ2 ...

  5. S02_CH08_ ZYNQ 定时器中断实验

    S02_CH08_ ZYNQ 定时器中断实验 上一章实现了PS接受来自PL的中断,本章将在ZYNQ的纯PS里实现私有定时器中断.每隔一秒中断一次,在中断函数里计数加1,通过串口打印输出. 8.1中断原 ...

  6. 嵌入式02 STM32 实验08 外部中断

    一.中断 由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理事件的一个程序.该程序执行完成后,CPU接着执行被暂停的程序.这个过程称为中断.(我正在捉泥鳅,但是我妈喊我回家吃饭,我必须回家 ...

  7. 基于ZYNQ 的UART中断实验之串口写数据到DDR3中

    1.参考 UG585 网络笔记 2.理论知识 参见上一次实验:基于ZYNQ 的UART中断实验 3.实验目的 练习使用UART的中断实验,并将接收到的数据写入到DDR3中. 4.实验过程 建立工程,设 ...

  8. S02_CH09_UART串口中断实验

    S02_CH09_UART串口中断实验 本章的UART中断将在之前PL_PS中断和定时器中断上推导出来,因此本章有点难度,如果前两章还不是很熟悉的话,需要返回到前面两章把这两章的内容再次消化一下,再来 ...

  9. CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)

    目录 1.前期预备知识 1.1 新大陆Zigbee模块按键电路图 1.2 CC2530相关寄存器 1.3 CC2530中断走向图 1.4 使用C语言为51单片机编写中断程序 1.5 *函数指针 2. ...

随机推荐

  1. 华东交通大学2015年ACM“双基”程序设计竞赛1007

    Problem G Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Sub ...

  2. php设计模式总结2

    策略模式: 定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 封装:把行为用接口封装起来,我们可以把那些经常变化的部分,从当前的类中单独取出来,用接口进行单 ...

  3. Java中利用JFrame创建窗体

    1. 一个简单例子: public class Test(){ public static void main(String[] args){ JFrame frame = new JFrame(); ...

  4. Centos 7.4 配置Tomcat管理员用户

    1,进入Tomcat路径下的conf文件夹 ,编辑tomcat-users.xml文件 2,在<tomcat-users>标签中增加user标签,用户名密码随便填写,roles可根据权限需 ...

  5. Mysql5.7.20源码编译安装

    一.下载源码包 1.1 下载mysql源码包 MySQL源码,网址为:https://dev.mysql.com/downloads/mysql/ : 1.2 下载boost 下载网址为:http:/ ...

  6. windows logstash配置

    E:\logstash-6.2.4\bin目录下新建logstash.conf input { stdin { } } output { stdout { codec=> rubydebug } ...

  7. SpringBoot2.0.3整合Quartz2.3.0实现定时任务

    转载:https://www.cnblogs.com/ealenxie/p/9134602.html 关于别人写的quartz学习的地址:https://blog.csdn.net/lkl_csdn/ ...

  8. javascript中对两个对象进行排序 和 java中的两个对象排序

    javascript中的对象数组排序 一 定义一个对象数组 var text = [{"name":"张","age":24},{" ...

  9. PHP、thinkPHP5.0开发网站文件管理功能(一)显示文件

    显示文件用到的函数有 1.urlencode($str):编码URL字符串,便于将字符串编码并将其用于URL的请求部分 2.urldecode($str):解码已经编码的URL字符串,返回解码后的字符 ...

  10. php程序设计 1,2章节

    <?php/** * Created by PhpStorm. * User: DY040 * Date: 2017/9/4 * Time: 10:39 * * * 1: php起源于1995 ...