1. 中断控制器 a. 中断处理流程 P1--摘自S3C2440A手册P1简要阐述了S3C2440A内置中断控制器处理中断的流程:●若某中断有自中断,则先接收子中断请求,否则,直接接受源中断。●中断控制逻辑根据INTMSK, ...
1. 中断控制器
a. 中断处理流程
P1--摘自S3C2440A手册
P1简要阐述了S3C2440A内置中断控制器处理中断的流程:
●若某中断有自中断,则先接收子中断请求,否则,直接接受源中断。
●中断控制逻辑根据INTMSK,屏蔽对应位的中断;根据INTMOD确定对应位中断模式(FIQ或者IRQ)。
●中断仲裁器根据PRIORITY,确定仲裁规则并仲裁出最高优先级;同时,INTPND对应中断位置为1,只要CPSR的I位或者F位使能,就执行相应中断。
b. 中断向量表
当ARM920T内核发生异常时,就会自动转到相应的地址,并自动记录跳转前PC的值(存入LR)和状态(存入SPSR)
●定时器0和1与一个8位预分频器相连,定时器2,3,4则与另外一个预分频器相连;每个定时器都有一个时钟分频器,可以根据TCFG0和TCFG1的值调节定时器输入频率;
定时器输入频率=PCLK/(预分频值+1)/分割值
预分频值=0~255
分割值=2,4,8,16
●定时器4没有输出引脚,可以单纯的作为定时器。
b. 定时器操作步骤
●设置TCNTBn和TCMPBn,将手动更新位设为1,假设不配置逆变器(即逆变器位设为0)
●设置TCFG0和TCFG1,即调节定时器的输入频率
●配置自动重载位(即自动重载位设为1),启动定时器(即启动位设为1)
c. 输出电平控制
●逆变器关时,若TCNTn<=TCMPn,输出为高,若TCNTn>TCMPn,输出为低;逆变器开时,与前者相反。
d. 死区发生器介绍,详见S3C2440A手册
3. 学习了这么多,终于可以开始写代码
AREA TIMER,CODE,READONLY
ENTRY
CODE32
GPFCON EQU 0x56000050
GPFDAT EQU 0x56000054
GPFUP EQU 0x56000058
GPBDAT EQU 0X56000014
GPBCON EQU 0x56000010
GPBUP EQU 0x56000018
SRCPND EQU 0X4A000000
INTMOD EQU 0X4A000004
INTMSK EQU 0X4A000008
PRIORITY EQU 0x4A00000C
INTPND EQU 0X4A000010
INTOFFSET EQU 0X4A000014
WTCON EQU 0X53000000
TCFG0 EQU 0x51000000
TCFG1 EQU 0x51000004
TCON EQU 0x51000008
TCNTB0 EQU 0x5100000C
TCMPB0 EQU 0x51000010
TCNTO0 EQU 0x51000014
_ENTRY
B RESET;0X0
B .;0X4
B .;0X8
B .;0xc
B .;0x10
B .;0x14
B HANDLEIRQ ;0x18中断入口
B .
RESET
LDR R0,=WTCON
LDR R1,=0
STR R1,[R0]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;关闭看门狗,否则无限重启
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MSR CPSR_c,#0Xd2
LDR SP,=3000
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;设置中断服务的堆栈指针
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MSR CPSR_c,#0xdf
BL INIT_LED
BL INIT_IRQ
BL INIT_TIMER
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;初始化相关寄存器
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MSR CPSR_c,#0X5F
LDR PC,=MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;初始化完成,转到主程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INIT_LED
LDR R0,=GPFCON
LDR R1,=0X5555
STR R1,[R0]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;初始化GPF端口属性,具体电路可以看我的前一篇博文
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LDR R0,=GPFUP
LDR R1,=0XFF
STR R1,[R0]
LDR R0,=GPFDAT
LDR R1,=0XFF
STR R1,[R0]
LDR R2,=0
MOV PC,LR
INIT_IRQ
LDR R0,=INTMOD
LDR R1,=0X0
STR R1,[R0]
;简单起见,全设为IRQ模式
LDR R0,=PRIORITY
LDR R1,=0X7F
STR R1,[R0]
;设置中断仲裁规则
LDR R0,=INTMSK
LDR R1,=0xFFFFFBFF
STR R1,[R0]
;屏蔽掉无关中断
MOV PC ,LR
INIT_TIMER
LDR R0,=GPBUP
LDR R1,=0X7FF
STR R1,[R0]
LDR R0,=GPBCON
LDR R1,=0X2
STR R1,[R0]
;把GPB.0端口配置为TOUT0输出,我的板子是连接的LCD背光灯
LDR R0,=TCFG0
LDR R1,=119
STR R1,[R0]
LDR R0,=TCFG1
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:ARM9中断定时理解
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。