外部中断(按键1)

原创 2013年12月05日 23:58:15

外部中断学习:

*******************************************************************

------------------------

cpsr第七位

------------------------

状态   VICxIRQSTATUS  VICxIRQSTATUS  /***内部中断控制管理器***/

选择 VICxINTSELECT

使能 VICxINTENABLE

记录 VICxRAWINTR

------------------------

中断源

------------------------

   Register    Address /*外部中断 028

EINT0CON0    0x7F008900

EINT0CON1    0x7F008904 配置

EINT0MASK    0x7F008920 开关

EINT0PEND 记录

------------------------

 

通过按键来触发外部中断的过程:

step1:set cpsr

step2:set:vic0

step3:eint0

step4:gpio

step5:interrupt source

 

注:内部中断在,中断源处清中断;外部中断在,外部中断管理器里清中断

****************************************************************************************

test.c:按一下按键,打印一句话。


#include ".h"

void hander_irq();
int (*printf)(char *,...) = (void *)0x57e11d4c;
int tmp=0;
int count=0;
void led_on();
int main()
{
*(volatile unsigned long *)0x56000000 = hander_irq;//将这个函数的地址放在0x56000000这个内存中。
//cpsr开中断
__asm__ __volatile__(
"mrs r0,cpsr\n"
"bic r0,r0,#0x80\n"
"msr cpsr,r0\n"
:
:
:"r0","memory"
);
//enable
VIC0INTENABLE |=(1<<0);
//select

VIC0INTSELECT &=~(1<<0);


//key 配成中断
GPNCON = 2; 
//ext_interrupt下降沿
EINT0CON0 |= (1<<1);
EINT0MASK &= ~(1<<0);
//EINT0PEND |= (1<<0);
}
void hander_irq()
{
EINT0PEND |= (1<<0);
printf("this key interrupt\n");

}

***************************************************************************

key.h:

//interrupt
#define VIC0INTENABLE (*(volatile unsigned long *)0x71200010)
#define VIC0INTSELECT (*(volatile unsigned long *)0x7120000C)
//模拟
#define VIC0SOFTINT (*(volatile unsigned long *)0x71200018)
#define VIC0SOFTINTCLAR (*(volatile unsigned long *)0x7120001C)
//watdog
#define WTCON    (*(volatile unsigned long *)0x7E004000) 
#define WTDAT    (*(volatile unsigned long *)0x7E004004) 
#define WTCNT    (*(volatile unsigned long *)0x7E004008) 
#define WTCLRINT (*(volatile unsigned long *)0x7E00400C)
//led
#define GPMCON (*(volatile unsigned long *)0x7F008820)
#define GPMDAT (*(volatile unsigned long *)0x7F008824)
//key
#define GPNCON (*(volatile unsigned long *)0x7F008830)
#define GPNDAT (*(volatile unsigned long *)0x7F008834)
//ex_interrupt
#define EINT0CON0    (*(volatile unsigned long *)0x7F008900)
#define EINT0CON1    (*(volatile unsigned long *)0x7F008904)
#define EINT0MASK     (*(volatile unsigned long *)0x7F008920)
#define EINT0PEND    (*(volatile unsigned long *)0x7F008924)

*****************************************************************************

vector.s文件:
b reset
b und
b swi
b pre_abt
b data_abt
.word 0x0
b irq
b firq
reset:
und:
mov sp,#0x56000000
mov ip,sp
stmdb sp!,{fp,ip,lr}
sub fp,ip,#4

ldr r0,=string_und
ldr r1,printf
blx r1

mov sp,#0x56000000
ldmdb sp,{fp,sp,pc}^
swi:
mov sp,#0x56000000
mov ip,sp
stmdb sp!,{fp,ip,lr}
sub fp,ip,#4

ldr r0,=string_swi
ldr r1,printf
blx r1

mov sp,#0x56000000
ldmdb sp,{fp,sp,pc}^
pre_abt:
data_abt:
mov sp,#0x56000000
mov ip,sp
sub lr,lr,#4
stmdb sp!,{fp,ip,lr}
sub fp,ip,#4

ldr r0,=string_pre_abt
ldr r1,printf
blx r1

mov sp,#0x56000000
ldmdb sp,{fp,sp,pc}^
irq:
mov sp,#0x56000000
mov ip,sp
sub lr,lr,#4
stmdb sp!,{fp,ip,lr}
sub fp,ip,#4

mov r0,#0x56000000
ldr r1,[r0]
blx r1

mov sp,#0x56000000
ldmdb sp,{fp,sp,pc}^
firq:
printf:
.word 0x57e11d4c
string_und:
.asciz "hello undefine \n"
.align 2
string_swi:
.asciz "hello swi\n"
.align 2
string_pre_abt:
.asciz "hell data_abt\n"
.align 2
string_irq:
.asciz "hello irq ,wang wang wang  \n"
.align 2
********************************************************************

makefiel文件:

all:
arm-none-linux-gnueabi-gcc -c vector.s -o vector.o
arm-none-linux-gnueabi-ld -Ttext=0 vector.o -o vector
arm-none-linux-gnueabi-objcopy -Ielf32-littlearm -O binary vector vector.bin
cp vector.bin /tftpboot/
arm-none-linux-gnueabi-gcc -c test.c -o test.o
arm-none-linux-gnueabi-ld -Ttext=0x50000000 test.o -o test
arm-none-linux-gnueabi-objcopy -Ielf32-littlearm -O binary test test.bin
cp test.bin /tftpboot/
clean:
rm -rf *.o *.bin   /tftpboot/*.bin


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/youhaibo1990/article/details/17152501

jsp、servlet关于中文问题再谈

www.dukejava.com 本周酷帖,每周一帖,欢迎光临!在jsp中,中文乱码常会让人心乱如麻。对于中文处理的常见对策,在网上经常可见的主要是下面2种:或者: String Hi="你好";by...
  • javaduke
  • javaduke
  • 2001-01-16 21:27:00
  • 645

TMS320F28335---外部按键中断

外部中断——按键,使LED亮灭。使用矩阵键盘,并用按键延时提高抗干扰能力。#include “DSP2833x_Project.h”/****函数声明****/ void Gpio_setup(vo...
  • Wx_Simba
  • Wx_Simba
  • 2017-11-29 21:25:06
  • 294

按键处理及外部中断

按键和中断部分   以按键触发中断为例,谈谈S5PV210的中断体系   要使用中断,首先要做好两个部分的工作:CPU中断的初始化和相应器件的中断的初始化。CPU中断初始化:就是要设置好CPU有...
  • qq_32220231
  • qq_32220231
  • 2016-08-22 09:10:20
  • 3623

nrf51822 --- 外部中断 (按键)

1.目的    nrf51822外部中断 2.分析     在实际应用中经常要用到外部中断,比如按键唤醒。 3.平台: 协议栈版本:SDK10.0.0 编译软件:keil 5.12 硬件平...
  • a369000753
  • a369000753
  • 2016-05-04 12:05:15
  • 6040

外部中断的按键,软件滤波实现方法

外部中断的按键,软件滤波实现方法
  • lile777
  • lile777
  • 2016-01-18 11:56:37
  • 1795

外部中断按键驱动

  • kuangreng
  • kuangreng
  • 2009-06-11 21:13:00
  • 679

【stm32f407】外部中断实现按键中断方式

一.外部中断 STM32F4的每个IO都可以作为外部中断的中断输入口,这点也是STM32F4的强大之处。STM32F407的中断控制器支持22个外部中断/事件请求。每个中断设有状态位,每个中断/事件...
  • XiaoXiaoPengBo
  • XiaoXiaoPengBo
  • 2017-06-07 11:20:44
  • 3021

STM32 HAL库学习系列第9篇---NVIC按键外部中断函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//回调函数 { if(GPIO_Pin==KEY1_GPIO_PIN) { HAL_Del...
  • super828
  • super828
  • 2017-09-10 08:27:41
  • 730

STM8S---外部中断应用之长按键识别

STM8常用中断指令 开总中断 _asm(“rim”); 禁止中断 _asm(“sim”); 进入停机模式 _asm(“halt”); 中断返回 _asm(“iret”); 等待中断 _as...
  • FreeApe
  • FreeApe
  • 2015-07-21 18:32:40
  • 4981

STM32按键扫描/按键中断/外部中断

接触STM32有一段时间了,也算是简单入了门,但由于一些原因,今天才来写本应该是入门级的按键相关程序,分为扫描模式和中断模式 MCU:STM32F334C8 1.扫描模式 下面的代码完成的功能是:按键...
  • Wind4study
  • Wind4study
  • 2015-05-19 17:08:14
  • 5091
收藏助手
不良信息举报
您举报文章:外部中断(按键1)
举报原因:
原因补充:

(最多只允许输入30个字)