ARM S3C2410硬件手册上的重要部分
返回
sub lr, lr, #4 @计算返回地址
stmdb sp!, { r0-r12,lr } @保存使用到的寄存器 ? ?
ldmia sp!, { r0-r12,pc }^ @中断返回 @^表示将spsr的值赋给cpsr
对于FIQ,进入和返回的代码如下:
sub lr, lr, #4 @计算返回地址
stmdb sp!, { r0-r7,lr } @保存使用到的寄存器 ? ?
ldmia sp!, { r0-r7,pc }^ @快中断返回, @^表示将spsr的值赋给cpsr
中断返回之前需要清中断:往SUBSRCPND(用到的话)、SRCPND、INTPND中相应位写1即可。对于INTPND,最简单的方法就是“INTPND=INTPND”
Timer几个重要寄存器介绍
1、TCFG0和TCFG1:分别设为119和0x03
这连个寄存器用于设置“Control Logic”的时钟,计算公式如下:
Timer input clock Frequency = PCLK / {prescaler value+1} / {divider value}
对于TIMER0,prescaler value = TCFG0[7:0],divider value由TCFG1[3:0]确定(0b000:2,0b001:4,0b010:8,0b0011:16,0b01xx:使用外部TCLK0)。
对于本实验,TIMER0时钟 = 12MHz/(119+1)/(16) = 6250Hz
2、TCNTB0:设为3125
在6250Hz的频率下,此值对应的时间为0.5S
3、TCON:
TIMER0对应bit[3:0]:
bit[3]用于确定在TCNT0计数到0时,是否自动将TCMPB0和TCNTB0寄存器的值装入TCMP0和TCNT0寄存器中
bit[2]用于确定TOUT0是否反转输出(本实验未用)
bit[1]用于手动更新TCMP0和TCNT0寄存器:在第一次使用定时器前,此位需要设为1,此时TCMPB0和TCNTB0寄存器的值装入TCMP0和TCNT0寄存器中
bit[0]用于启动TIMER0
4、TCONO0:只读寄存器,用于读取当前TCON0寄存器的值
ARMS3C2410硬件手 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)