210中断 笔记
来源:互联网 发布:源码屋 编辑:程序博客网 时间:2024/06/10 14:49
/*interrupt registes*/#define EXT_INT_2_CON *((volatile unsigned int *)0xE0200E08) #define EXT_INT_2_MASK *((volatile unsigned int *)0xE0200F08) #define VIC0INTENABLE *((volatile unsigned int *)0xF2000010) #define key_VICADDR *((volatile unsigned int *)0xF2000140) #define VIC0ADDRESS *((volatile unsigned int *)0xF2000F00) #define EXT_INT_2_PEND *((volatile unsigned int *)0xE0200F48) void key_isr(){ volatile unsigned int key_code; /* 计算返回地址:PC的值等于当前执行的地址+8,当CPU正要执行某条指令时(还未执行),被中断, 这是这条刚要执行的指令的地址刚好=PC-4 */ __asm__( "sub lr, lr, #4\n" "stmfd sp!, {r0-r12, lr}\n" /* 保护现场 */ : : ); key_code = EXT_INT_2_PEND & 0b11; //清中断挂起寄存器,向该寄存器写1就可以清除//查看具体中断源。判断具体哪个按键按下。 switch(key_code) { case 1: //K1 led_on(); break; case 2: //K2 led_off(); break; default: break; } /* 清除中断 */ EXT_INT_2_PEND = ~0x0; //清中断挂起寄存器,向该寄存器写1就可以清除 VIC0ADDRESS = 0;/* 清中断向量寄存器 */ __asm__( "ldmfd sp!, {r0-r12, pc}^ \n" /* ^表示把spsr恢复到cpsr */ : : );}void init_irq(){ EXT_INT_2_CON = 0b010 | (0b010<<4); /*下降沿触发中断*/ EXT_INT_2_MASK = 0; /* 取消屏蔽外部中断*/ VIC0INTENABLE = 0b1<<16; /* 选择外部中断EXT_INT[16]为IRQ类型的中断 */ key_VICADDR = (int)key_isr; /*由于key1~key4属于同一中断源,所以只需设置一个地址*/ __asm__( /*开中断*/ "mrs r0,cpsr\n" "bic r0, r0, #0x80\n" "msr cpsr_c, r0\n" : : );}
0 0
- 210中断 笔记
- 中断笔记
- AVR外部中断笔记
- 错误 中断 笔记!!
- 中断和异常(笔记
- 中断学习笔记
- Linux中断笔记
- linux 中断自学笔记
- 学习笔记-中断初步设计
- 大灰狼笔记五-中断
- 中断处理学习笔记
- 中断学习笔记-(一)
- STM32中断应用笔记
- 笔记:8051中断源
- ARM中断笔记
- 中断学习笔记
- TMS320F28335学习笔记------中断
- 微机个人笔记-中断
- hdu 4422 The Little Girl who Picks Mushrooms【贪心+分类讨论】
- Linux上使用SSH连接Git
- 杭电 2030 汉字统计【网络赛前必刷】
- Python——加载图像imread报错
- Idea更换主题
- 210中断 笔记
- [数据结构]线性表(二)
- Struts2 使用.do后缀的请求方式
- 编写css规则
- iOS控件NSTimer计时器
- 定个小计划
- Linux 命令(文件和目录管理 - mkdir)
- 银联多渠道平台报文结构
- 总结android studio下载一个Android demo打开半天还在编译中