免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 980 | 回复: 0
打印 上一主题 下一主题

timer and interrupt [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-28 16:35 |只看该作者 |倒序浏览
;************************************************************
; Institute of Automation, Chinese Academy of Sciences
;File Name: Init.s
;Description: Timer interrupt test.
;Author: JuGuang,Lee
;Date:
;**************************************************************
IOPMOD EQU 0x3FF5000 ;I/O口模式寄存器
IOPDATA EQU 0x3FF5008 ;I/O口数据寄存器
TMOD EQU 0x3FF6000 ;定时器模式寄存器
TDATA0 EQU 0x3FF6004 ;定时器数据寄存器
INTMOD EQU 0x3FF4000 ;中断模式寄存器
INTPND EQU 0x3FF4004 ;中断悬挂寄存器
INTMASK EQU 0x3FF4008 ;中断屏蔽寄存器
AREA Init,CODE,READONLY
ENTRY
B Reset_Handler ;复位异常向量,跳转到程序开始位置。
B . ;未定义指令异常,跳转到当前位置。
B . ;SWI异常,跳转到当前位置。
B . ;指令预取中止异常,跳转到当前位置。
B . ;数据访问中止异常,跳转到当前位置。
NOP
B IRQ_Handler ;IRQ异常,跳转到响应中断服务程序。
B . ;FIQ异常,跳转到当前位置。
Reset_Handler
;*********************************
;LED Display
;*********************************
LDR R1,=IOPMOD
LDR R0,=&ff
STR R0,[R1]
LDR R1,=IOPDATA
LDR R0,=&03
STR R0,[R1]
EOR R0,R0,R0
LEDDELAY
ADD R0,R0,#1
CMP R0,#&180000
BNE LEDDELAY
LDR R1,=IOPDATA
LDR R0,=&0
STR R0,[R1]
;***************************************
;User Stack
;***************************************
LDR R0, =0x3FF0000
LDR R1, =0xE7FFFF80 ;配置SYSCFG,片内4K Cache,4K SRAM
STR R1, [R0]
LDR SP, =0x3FE1000 ;SP指向4K SRAM的尾地址,堆栈向下生成
;***************************************
;Interrupt Special Registers
;***************************************
LDR R1,=INTMOD ;设置中断模式寄存器
LDR R0,=&0
STR R0,[R1]
LDR R1,=INTMSK ;设置中断屏蔽寄存器,只允许定时器0中断
LDR R0,=&1FFbFF
STR R0,[R1]
;**************************************
;Timer0 Special Registers
;**************************************
LDR R1,=TDATA0 ;定时器0的数据寄存器装入初始化值
LDR R0,=&3FFFFFF
STR R0,[R1]
LDR R1,=TMOD ;使能定时器0
LDR R0,=&01
STR R0,[R1]
B . ;循环等待中断发生
;*************************************************
;Timer0 Interrupt Service Routine
;*************************************************
IRQ_Handler
STMFD SP!,{R0-R6,LR} ;保护现场
LDR R1,=INTPND ;清INTPND中的对应位
LDR R0,=&400
STR R0,[R1]
LDR R0,=IOPDATA ;读IOPDATA的值加一并送回
LDR R1,[R0]
ADD R1,R1,#1
STR R1,[R0]
LDMFD SP!,{R0-R6,LR} ;恢复现场,中断返回
SUBS PC,LR,#4
END

****************************************************************************
看来看去,在看汇编代码的时候还是头脑比较清醒的,直接将整个过程描述出来,就象数自己的手指一样简单明了。c就象是带在手上的手套,好看也实用,就是有些人不清楚手套是怎么做出来的而已。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/66913/showart_625880.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP