arm处理器中断设置
来源:互联网 发布:java逆波兰表达式 编辑:程序博客网 时间:2024/05/16 08:09
中断初始化
1.设置引脚为中断模式(如设置按键1对应的eint8,应设置GPGCON[1:0]=10
2.设置中断触发方式(如eint8禁止滤波,应设置EXTINT1[3:0]=0000)
3.清除相应的中断标志位(往rEINTPEND相应位写1,即rEINTPEND |= (1<<8)
4.设置EINTMASK相应位,使能中断
5.将中断处理函数首地址赋给中断入口地址(如rISR_EINT8_23 = (U32)key_handler,其key_hangdler()位中断服务程序)、
中断处理函数
1.清除中断标志位(ClearPending(BIT_EINT8_23))
2.判断中断号
3.做出相应处理
具体事例如下
mini2440 按键1按下蜂鸣器响一声,按键2按下点亮led1
/*************************************************
Function name: 这是基础实验的一个模版
Parameter : 无
Description : 做基础实验,直接调用该模板即可
Return : 无
Argument : 无
Autor & date : Daniel
**************************************************/
#define GLOBAL_CLK 1
#include <stdlib.h>
#include <string.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "mmu.h"
#include "profile.h"
#include "memtest.h"
//int Wait_key(void);
void key_init(void);
//void Led1_run(void);
//void Led1_init(void);
static void __irq key_handler(void);
void beep_init(void);
void beep_run(void);
void Led1_run(void);
void Led1_init(void);
/*************************************************
Function name: delay
Parameter : times
Description : 延时函数
Return : void
Argument : void
Autor & date :
**************************************************/
void delay(int times)
{
int i,j;
for(i=0;i<times;i++)
for(j=0;j<400;j++);
}
/*************************************************
Function name: Main
Parameter : void
Description : 主功能函数
Return : void
Argument : void
Autor & date :
**************************************************/
void Main(void)
{
Led1_init();
beep_init();
MMU_Init();
key_init();
while(1);
}
/*************************************************
Function name: key_init()
Parameter : void
Description : key的初始化函数,其中K1连接的是GPG0
初始化GPG0为输入模式
Return : void
Argument : void
Autor & date : Daniel
**************************************************/
void key_init(void)
{
rGPGCON &= ~((3<<0)|(3<<6)); //设置eint8为中断模式GPGCON[1:0]=10,eint11为中断模式
rGPGCON |= (0x2<<0)|(0x2<<6);
rEXTINT1 &= ~((0xf<<0)|(0xf<<12));//设置eint8,eint11为低电平触发,禁止滤波EXTINT1[3:0]=0000
rEINTPEND |= (1<<8)|(1<<11);//eint8清除外部中断,eint11清除,
// rEINTMASK &= ~((1<<8)|(1<<11));//相应中断位清零,使能eint8中断
rEINTMASK &= ~((1<<8)|(1<<11));
pISR_EINT8_23 = (U32)key_handler;//将中断处理子函数名,即函数的首地址赋给子函数处理程序入口
EnableIrq(BIT_EINT8_23);//允许eint8中断
}
/*************************************************
Function name: beep_init()
Parameter : void
Description : Led1的初始化函数,其中Led1连接的是GPB5
初始化GPB5为输出模式
Return : void
Argument : void
Autor & date : Daniel
**************************************************/
void Led1_init(void)
{
rGPBCON &= ~(3<<10);
rGPBCON |= (1<<10);
}
void Led1_run(void)
{
rGPBDAT &=~(1<<5); /*LED亮还是灭?*/
delay(1000);
rGPBDAT |=(1<<5);
delay(1000);
}
static void __irq key_handler(void)
{
if(rINTPND == BIT_EINT8_23)
{
ClearPending(BIT_EINT8_23);// 清除中断标志位
if(rEINTPEND & (1<<8))
{
rEINTPEND |= 1<<8; //清除外部中断未决寄存器的位
beep_run();
}
else if(rEINTPEND & (1<<11))
{
rEINTPEND |= 1<<11;
Led1_run();
}
}
}
void beep_init(void)
{
rGPBCON &= ~(0x3<<0);
rGPBCON |= (0x1<<0);
}
void beep_run(void)
{
rGPBDAT |= (0x1<<0);
delay(50);
rGPBDAT &= (0X0<<0);
delay(50);
}
- arm处理器中断设置
- ARM 处理器 ~ 中断与异常
- ARM处理器中断处理的编程实现
- ARM处理器中断处理的编程实现
- ARM处理器架构-----异常/中断处理
- 【汇编语言】Arm处理器之中断处理
- ARM学习--ARM处理器模式和寄存器、中断事件
- 设置 ARM处理器的小端模式
- ARM处理器的SWI异常中断响应过程
- ARM处理器的SWI异常中断响应过程
- ARM处理器的SWI异常中断响应过程
- ARM处理器异常与中断处理 学习总结
- ARM处理器的SWI异常中断响应过程
- ARM处理器架构------可嵌套中断的实现
- linux irq中断过程解析(基于ARM处理器)
- ARM处理器
- ARM处理器
- ARM(处理器)
- java修饰符的个人理解
- website
- Java中的IO整理完整版
- 教你初步了解KMP
- 2440 中断分析(转载)
- arm处理器中断设置
- Oracle SPFILE 指定SCOPE参数类型
- strcmp函数的实现
- SNMP 简介
- 浏览器不显示图片的解决方法
- 获取当前类名的几种方法
- Spring注解@Componen、@Repository@Service、@Controller区别
- 关于JRMC远程监控的问题
- ASP.NET后台输出js的三种方式(写给初学者)