S3C2440 按键中断方式汇编代码

发布者:eta17最新更新时间:2024-06-13 来源: elecfans关键字:S3C2440  按键  中断方式 手机看文章 扫描二维码
随时随地手机看文章

SRCPND EQU 0X4A000000
INTMSK EQU 0X4A000008
INTPND EQU 0X4A000010
EINTMASK EQU 0X560000A4
EINTPEND EQU 0X560000A8
EXTINT1 EQU 0X5600008C
EXTINT2 EQU 0X56000090
INTMOD EQU 0X4A000004


AREA INT_KEY,CODE,READONLY
ENTRY
CODE32
ResetEntry
b   Reset
; //0x04: 未定义指令中止模式的向量地址
HandleUndef
     b   HandleUndef
; //0x08: 管理模式的向量地址,通过SWI指令进入此模式
HandleSWI
     b   HandleSWI
; //0x0c: 指令预取终止导致的异常的向量地址
HandlePrefetchAbort
     b   HandlePrefetchAbort
; //0x10: 数据访问终止导致的异常的向量地址
HandleDataAbort
     b   HandleDataAbort
; //0x14: 保留
HandleNotUsed
     b   HandleNotUsed
; //0x18: 中断模式的向量地址
     b   HandleIRQ
; //0x1c: 快中断模式的向量地址
HandleFIQ
     b   HandleFIQ
Reset
BL Disable_Watch_Dog
msr cpsr_c, #0xd2       ;// 进入中断模式
   ldr sp, =3072 ;// 设置中断模式栈指针


     msr cpsr_c, #0xdf       ;// 进入系统模式
              ;// 设置系统模式栈指针,
                             ;// 其实复位之后,CPU就处于系统模式,
                            
     msr cpsr_c, #0x5f       ;// 设置I-bit=0,开IRQ中断
   
BL Main
halt_loop
B halt_loop
Disable_Watch_Dog ;//关闭看门狗,否则一直重启
LDR R0,=0x53000000
MOV R1,#0x0
STR R1,[R0]
MOV PC, lr ;//返回
Main
BL LED_Init
BL KEY_Init
BL INT_Init

B MAIN_LOOP
MOV PC,LR
MAIN_LOOP
B MAIN_LOOP
LED_Init
LDR R0,=0x56000010
   MOV R1,#0x00015400
   STR R1,[R0]
  
   LDR R0,=0x56000014
   MOV R1,#0x000001E0
   STR R1,[R0]
  
MOV PC,LR
KEY_Init
LDR R0,=0x56000060
     LDR R1,=0x80A882 ;//设置GPG0为扩展功能
     STR R1,[R0]
MOV PC,LR
INT_Init
MOV       r1,#0x20
LDR       r0,=SRCPND
STR       r1,[r0]
LDR R1,=INTMSK
         LDR R0,=0XFFC0
         STR R0,[R1]
         LDR R1,=EXTINT1
         LDR R0,=0X22202002
         STR R0,[R1]
         LDR R1,=EXTINT2
         LDR R0,=0X2000
         STR R0,[R1]
         LDR R1,=EINTMASK;//111101110001011011111111
         LDR R0,=0XF716FF
         STR R0,[R1]
         LDR R1,=INTMOD
         LDR R0,=0X0
         STR R0,[R1]
MOV PC,LR
HandleIRQ
         SUB LR,LR,#4                        ;//计算返回地址
         STMDB SP!,{R0-R12,LR}       ;//保存使用到的寄存器,此时的sp是中断模式的sp,压栈
 
         LDR LR,=INT_RETURN          ;//ISR返回的地址
         LDR PC,=EINT_HANDLE       ;//调用中断服务函数
INT_RETURN
         LDMIA SP!,{R0-R12,PC}^     ;//中断返回,^表示将spsr的值复制到cpsr,出栈
EINT_HANDLE
NOP
LOOP
         LDR R1,=EINTPEND
         LDR R2,[R1]
        
         LDR R3,=0XFFFFF;//清中断
         STR R3,[R1]
        
         LDR R1,=SRCPND        
         LDR R3,=0X3F
         STR R3,[R1]
        
         LDR R1,=INTPND
         LDR R3,=0X3F
         STR R3,[R1]
SWITCH
         LDR R0,=0x56000014
CASE_8
       TST R2,#0X100
         BEQ CASE_11
         LDR R1,=0X1C0
         STR R1,[R0]
         B SWITCH_END
CASE_11
         TST R2,#0X800
         BEQ CASE_13
         LDR R1,=0X1A0
         STR R1,[R0]
         B SWITCH_END
CASE_13
         TST R2,#0X2000
           BEQ CASE_14
         LDR R1,=0X160
         STR R1,[R0]
         B SWITCH_END
CASE_14
         TST R2,#0X4000
         BEQ CASE_15
         LDR R1,=0X0E0
       STR R1,[R0]
       B SWITCH_END
CASE_15
         TST R2,#0X8000
         BEQ CASE_19
         LDR R1,=0X000
       STR R1,[R0]
         B SWITCH_END
CASE_19
         TST R2,#0X80000
         BEQ DEFAULT
         LDR R1,=0X1E0
         STR R1,[R0]
B SWITCH_END
DEFAULT
             LDR R1,=0X1E0
           STR R1,[R0]
SWITCH_END
           NOP 
         MOV PC,LR
  END


关键字:S3C2440  按键  中断方式 引用地址:S3C2440 按键中断方式汇编代码

上一篇:S3C2440 UART2被配置为CTS问题解决
下一篇:Linxu S3C2440 LCD驱动 测试程序

推荐阅读最新更新时间:2024-11-02 16:02

51单片机之独立按键和矩阵键盘
一、基本知识 1.按键分类与输入原理 按键按照结构原理科分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关灯;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。 在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其他按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入时与软件结构密切相关的过程。 对于一组键或一个键盘,总有一个接口电路与CPU相连。CPU可以采用查询或中断方式了解有无将按键输入,并检查是哪一个按键按下,将该键号
[单片机]
51单片机之独立<font color='red'>按键</font>和矩阵键盘
STM32 | 串口空闲中断接收不定长数据(DMA方式
在使用STM32的串口接收数据的时候,我们常常会使用接收中断的方式来接收数据,常用的是RXNE。这里分享另一种接收数据的方式——IDLE中断(PS:本文的例子运行在STM32F103ZET6上)。 一、IDLE中断什么时候发生? IDLE就是串口收到一帧数据后,发生的中断。什么是一帧数据呢?比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据,就称为一帧数据,也可以叫做一包数据。 二、RXNE中断和IDLE中断的区别? 当接收到1个字节,就会产生RXNE中断,当接收到一帧数据,就会产生IDLE中断。比如给单片机一次性发送了8个字节,就会产生8次RXNE中断,1次IDLE中断。 三、IDLE中断如何配
[单片机]
STM32 | 串口空闲<font color='red'>中断</font>接收不定长数据(DMA<font color='red'>方式</font>)
单片机4位数字时钟仿真程序(定时器方式2, 按键连加)
学习单片机动态数码管显示,数字时钟是最好的案例,本仿真案例有以下特点。 1.使用定时器0,方式2,可以减小定时器的误差; 2.调时、调分按键具有连加功能,与常见的按键松手检测有区别; 3.具有秒点显示功能,若制作实物案例,可购买带秒点的数码管。 参考程序: #include reg52.h #define uint unsigned int #define uchar unsigned char sbit w1=P2^2; sbit w2=P2^3; sbit w3=P2^4; sbit w4=P2^5; sbit s1=P1^3; sbit s2=P1^4; sbit s3=P1^5; uint shi,fen,sec
[单片机]
单片机4位数字时钟仿真程序(定时器<font color='red'>方式</font>2, <font color='red'>按键</font>连加)
S3C2440学习笔记一(系统频率以及一些入门级问题)
①MPLL和UPLL有何不同? 对于MPLL使用到MPLLCON,而UPLL使用到UPLLCON寄存器,同属于时钟电源管理单元。MPLLCON地址是0X4C000004,UPLL地址是0X4C000008。MPLL用于CPU及其他外围器件,这里把他理解成单片机的主频就对了,UPLL用于USB。产生FCLK,HCLK,PCLK三种频率。 CLKDIVN时钟分配控制寄存器,地址是0X4C000014,对FCLK分频给UCLK,PCLK,不分频或2分频,CAMDIVN照相机时钟分配寄存器,地址是0X4C000018,也是做一个时钟分配。 ②2440slib.s中出现mrc,bic,mcr,MOV_PC_LR是什么意思,有什么资料学习和
[单片机]
<font color='red'>S3C2440</font>学习笔记一(系统频率以及一些入门级问题)
AVR 矩阵键盘程序源代码V3.5(有连续按键功能,有组合键功能)
程序特点: 1.有连续按键功能 2.有组合键功能 3.连续按键起始时间和间隔时间自定义 4.可根据需要扩展组合键 使用方法: 将文件 Keypad.h 和 Keypad.c 放入您的工程,将按键需要执行的函数赋值给对应的函数指针 注:需要执行的函数必须为无参数,无返回值 例:您按下A时需要执行以下函数: void fun(void) { printf( 我按下了A ); } 只需执行下列语句 p_Key_A = MenuExit; 并在主循环中调用 KeypadPoll(); 以下是两个文件源码 Keypad.h /******** AVR 4*4矩阵键盘扫描程序 ******** * 版
[单片机]
基于嵌入式S3C2440的船舶导航系统设计
       文章在以ARMS3C2440为核的硬件平台上应用Linux操作系统开发了船舶导航系统,完成了系统的硬件设计、软件设计、交叉编译环境的建立、引导程序的移植、内核的移植、驱动程序的编写和根文件系统的建立等,实现了系统的功能。         1.前言        集计算机技术、通信技术、微电子技术等多种技术为一体的嵌入式技术进入到了一个飞速发展的阶段,嵌入式系统已被广泛应用到了航空、消费电子、信息家电、网络通信等各个领域。ARMS3C2440ARM是嵌入式处理器是性价比较优秀的芯片,在各个领域的开发应用有着广阔的应用前景。        船舶导航技术也应随着科学技术背景的改变不断地向着高性能稳定性的方面发展,潜
[嵌入式]
s3c2440裸机-内存控制器(四、SDRAM原理-cpu是如何访问sdram的)
1.SDRAM原理 black (1)SDRAM内部存储结构: (2)再看看与2440连接的SDRAM原理图: sdram引脚说明: A0-A12:地址总线 D0-D15:数据总线(位宽16,2片级联成位宽32) BA0-BA1:bank选择 nSCS:片选 nSRAS:行地址选择 nSCAS:列地址选择 nWE:写使能 SCLK:时钟 SCKE:时钟使能 (3)SDRAM的地址范围: 之前我们讲“二、不同位宽外设与CPU地址总线的连接”这一节的时候,我们留下了一个问题,SDRAM的地址范围是多少? 我们知道地址范围肯定是base_addr + size。我们根据片选接了nGCS6,base_addr=0x3000,0
[单片机]
<font color='red'>s3c2440</font>裸机-内存控制器(四、SDRAM原理-cpu是如何访问sdram的)
s3c2440裸机-LCD编程-3-框架准备和LCD初始化
1.准备框架 为了让程序更加好扩展,体现出”高内聚、低耦合 的特点,能够兼容各种不同型号的lcd,假如有两款尺寸大小的lcd,如何快速的在两个lcd上切换? 首先我们抽象出lcd_3.5.c和lcd_4.3.c的共同点,比如都有初始化函数init(),我们可以新建一个lcd.c,然后定义一个结构体: struct lcd_opr{ void (*init)(void); }; 用户不接触lcd_3.5.c和lcd_4.3.c,只需要在lcd.c里通过指针访问对应的结构体的函数,也就调用了不同init(),如下图所示: 我们的目的是在LCD显示屏上画线、画圆(geomentry.c)和写字(font.c)其核心是画点(
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved