ARM实验5 —— 按键中断实验
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 —— 按键中断实验的更多相关文章
- cc2530的第三次实验,按键中断控制流水灯
cc2530的第三次实验:按键中断控制流水灯 效果为按一次按键,流水灯亮一次 实验相关电路图: 实验相关寄存器: 初始化函数 //初始化LED灯 //设置P1SEL,通用为0,外设为1 1111110 ...
- 【黑金ZYNQ7000系列原创视频教程】06.ZYNQ来自FPGA的中断——按键中断实验
黑金论坛地址: http://www.heijin.org/forum.php?mod=viewthread&tid=36640&extra=page%3D1 爱奇艺地址: http: ...
- FPGA与simulink联合实时环路系列——实验三 按键key
实验三 按键key 实验内容 在FPGA的实验中,经常涉及到按键的使用,按键是必不可少的人机交互的器件之一,在这些实验中,有时将按键的键值读取显示到数码管.LCD或者是通过串口传送到PC的串口助手上进 ...
- u-boot中断功能初步分析之---------按键中断
作者:彭东林 邮箱:pengdonglin137@163.com QQ: 405728433 以前一直有个疑问,在U-boot下到底能不能使用中断,为了验证这个问题,于是乎,昨天晚上我在自己的 TQ2 ...
- S02_CH08_ ZYNQ 定时器中断实验
S02_CH08_ ZYNQ 定时器中断实验 上一章实现了PS接受来自PL的中断,本章将在ZYNQ的纯PS里实现私有定时器中断.每隔一秒中断一次,在中断函数里计数加1,通过串口打印输出. 8.1中断原 ...
- 嵌入式02 STM32 实验08 外部中断
一.中断 由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理事件的一个程序.该程序执行完成后,CPU接着执行被暂停的程序.这个过程称为中断.(我正在捉泥鳅,但是我妈喊我回家吃饭,我必须回家 ...
- 基于ZYNQ 的UART中断实验之串口写数据到DDR3中
1.参考 UG585 网络笔记 2.理论知识 参见上一次实验:基于ZYNQ 的UART中断实验 3.实验目的 练习使用UART的中断实验,并将接收到的数据写入到DDR3中. 4.实验过程 建立工程,设 ...
- S02_CH09_UART串口中断实验
S02_CH09_UART串口中断实验 本章的UART中断将在之前PL_PS中断和定时器中断上推导出来,因此本章有点难度,如果前两章还不是很熟悉的话,需要返回到前面两章把这两章的内容再次消化一下,再来 ...
- CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)
目录 1.前期预备知识 1.1 新大陆Zigbee模块按键电路图 1.2 CC2530相关寄存器 1.3 CC2530中断走向图 1.4 使用C语言为51单片机编写中断程序 1.5 *函数指针 2. ...
随机推荐
- 解决mac下ssh空闲一段时间自动断开的问题
之前在公司就遇到过这种问题,使用ssh登录linux服务器后,在后台放置一段时间,会发现会自动断开,解决的方法很简单: vim /etc/ssh/ssh_config 添加这2句即可 ServerAl ...
- android 快速开发框架
https://github.com/lipanquan/LPQRapidDevelopmentFramework 依赖LPQLibrary https://github.com/lipanquan/ ...
- LeeCode(No3 - Longest Substring Without Repeating Characters)
题目: Given a string, find the length of the longest substring without repeating characters. 示例: Given ...
- java TestNG测试报告美化
测试报告 执行完测试用例之后,会在项目的test-output(默认目录)下生成测试报告 打开index.html文件,测试结果摘要,包括:套件名.测试用例成功数.测试用例失败数.测试用例忽略数和te ...
- 研磨设计模式学习笔记4--单例模式Signleton
需求:加载配置文件,由于配置文件全局唯一,所以不用过多对象,建一个就可以了. 优点:单例模式本质就是为了控制实例数目. 一.饿汉式 public class Singleton { private S ...
- windows环境搭建禅道项目管理工具
zentao官网的几个网址 http://www.zentao.net/ http://www.zentao.net/article-view-79863.html 搭建环境需要下载两个文件 1) ...
- HBase学习(二)
HBase安装说明: HBase下载地址: http://archive.apache.org/dist/hbase/ 更新比较多的版本是比较稳定,使用周期比较长的版本 HBase表操作命令:http ...
- 网络编程api总结
1.socket函数创建一个socket连接,此时该socket连接为主动式. fd(int)->fd(struct fd)->file->sock:sock->file 2. ...
- 性能测试工具LoadRunner26-LR之lr脚本插入DOS命令
基础命令 1.dir 无参数:查看当前所在目录的文件和文件夹 /s:查看当前目录其所有子目录的文件和文件夹 /a:查看包括隐含文件的所有文件 /ah:只显示隐含文件 /w:以紧凑方式显示文件和文件夹 ...
- Windows64bit-plsqldeveloper-install the easiest way
The easiest way to add a 32 Bit Oracle Client: 1.Download the Oracle 11g or 12c Instant Client(http: ...