外部中断(按键1)

发布时间:2024-11-15 16:42

外部中断学习:

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

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

cpsr第七位

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

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

选择 VICxINTSELECT

使能 VICxINTENABLE

记录 VICxRAWINTR

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

中断源

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

   Register    Address /*外部中断 0组28个

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

网址:外部中断(按键1) https://www.yuejiaxmz.com/news/view/83818

下一篇:HTML学习

相关内容

手部按摩方法
Android有关Home按键的TYPE
油烟机按键失灵了怎么解决 抽油烟机按键失灵修复小技巧
按摩保健好处多 身体各部位按摩方法大全
身体各部位怎么按摩 不同部位按摩手法图解
胸部按摩油哪种好
中医院推拿科夜门诊“走俏” 理性按需就诊很关键
生活野外钓鱼钓点是关键
电脑外设维护技巧正确清洁和保养鼠标键盘等
精油按摩腿部的功效与用法

随便看看