Linux编程训练网站,OK6410汇编程序练习

尝试使用一下6410的汇编,发现跟当年的51差不多,一步一步的学习

;*************************************************************************************************************

;* 文件名: ok6410.s

;* 功能:  S3C6410 汇编

;* 作者:  cp1300@139.com

;* 创建时间: 2013年1月4日21:27

;* 最后修改时间:2013年1月4日

;* 详细:

;*************************************************************************************************************/

TINT_CSTAT  EQU  0x7F006044  ;定时器中断控制和状态寄存器

VIC0ADDRESS  EQU  0x71200F00  ;当前矢量地址寄存器0,写入任意数据清除中断

VIC1ADDRESS  EQU  0x71300F00  ;当前矢量地址寄存器1,写入任意数据清除中断

;调用外部函数

IMPORT  LED1_flash    ;LED1闪烁程序

;外部调用函数

EXPORT  Time_Isr    ;时钟中断服务程序

PRESERVE8;

AREA S3C6410_CPU, CODE, READONLY

;定时器1中断服务程序,注意:进入中断后6410自动切换为IRQ模式,并关闭了IRQ中断,退出的时候需要自己开启,或者还原CPSR

Time_Isr

STMFD SP!, {R0,R1,LR}    ;R0,R1,LR入栈

LDR  R0,  =TINT_CSTAT

LDR  R1,  [R0]     ;读取寄存器 TINT_CSTAT

ORR  R1,  R1,  #0x01<<6  ;写BIT6,清除定时器1中断

STR  R1,  [R0]     ;回写寄存器

BL  LED1_flash      ;调用LED闪烁程序

LDR  R0,  =VIC0ADDRESS   ;写VIC的当前中断地址寄存器清除中断

LDR  R1,  =0xffffffff

STR  R1,  [R0]

LDR  R0,  =VIC1ADDRESS

STR  R1,  [R0]

LDMFD SP!, {R0,R1,LR}    ;R0,R1,LR出栈

;之前使用SUB,发现程序从中断退出后并没有从SPSR恢复,也就是中断屏蔽没有去除,添加-S后,这条指令会影响CPSR中标志位,在这也就是恢复了SPSR_IRQ到CRSP

SUBS PC,  LR,  #4    ;从中断程序中退出,LR需要减4放入PC,子程序调用则不需要-4,应该是由于流水线的指令预取造成的

END0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值