S3C2440学习笔记五(2440slib.s源程序的分析)
补充一点是,CP15可以理解为MMU,它主要的工作是地址映射,也就是给CPU提供地址。SDRAM一般为32M或64M,但是对于32位的CPU,可以管理4G的空间。那么就把这个4G的空间分成4096份,每一份1M,那么32位地址变成一个组合,14位+18位。
;=====================================================================
; File Name : 2440slib.s
; Function : GT2440 (Assembly)
; Revision : 1.0
;=====================================================================
;Interrupt, FIQ/IRQ disable禁止中断FIQ/IRQ
NOINT EQU 0xc0 ; 1100 0000---->CPSR
;Check if tasm.exe(armasm -16 ...@ADS 1.0) is used.
GBLL THUMBCODE
[ {CONFIG} = 16
THUMBCODE SETL {TRUE}
CODE32
|
THUMBCODE SETL {FALSE}
]
;这段指令判断是否是THUMBCODE指令集,是的话就要用
;ADS的tasm.exe进行编译。首先用GBLL定义了全局逻辑
;变量HUMBCODE,默认值为0。“[]"相当于C语言中的{},
;| 相当于else?
MACRO
MOV_PC_LR
[ THUMBCODE
bx lr
|
mov pc,lr
]
MEND
;函数返回宏定义
AREA |C$$code|, CODE, READONLY
;定义了代码段,此代码段是外部的可以被C程序调用的关于?
;寄存器和存储管理单元(MMU)操作函数。?
EXPORT EnterCritical
;用内存单元r0存储CPSR?
EnterCritical
mrs r1, cpsr
str r1, [r0]
orr r1, r1, #NOINT
msr cpsr_cxsf, r1
MOV_PC_LR
;restore cpsr, r0 = address to restore cpsr
EXPORT ExitCritical
ExitCritical
ldr r1, [r0]
msr cpsr_cxsf, r1
MOV_PC_LR
;这里的cxsf表示从低到高分别占用的4个8bit的数据域?
;指令中有时还有出现cpsr_cf, cpsr_all, cpsr_c等,这里:?
c 指CPSR中的control field ( PSR[7:0])?
f 指flag field (PSR[31:24])?
x 指extend field (PSR[15:8])?
s 指status field ( PSR[23:16])?
;其中cpsr的位表示为:?
31 30 29 28--- 7 6 - 4 3 2 1 0?
N Z C V I F M4M3M2 M1 M0
;==============
; CPSR I,F bit设置CPSR的I位(IRQ)和F位(FIQ)
;置位CPSR_IR,即禁止IRQ中断和FIQ中断
;==============
;int SET_IF(void);
;The return value is current CPSR.
EXPORT SET_IF
SET_IF;仅在特权模式下可用此程序。
;This function works only if the processor is in previliged mode.
mrs r0,cpsr
mov r1,r0
orr r1,r1,#NOINT
msr cpsr_cxsf,r1
MOV_PC_LR
;void WR_IF(int cpsrValue);写值到CPSR
EXPORT WR_IF
WR_IF;仅在特权模式下可用此程序。
;This function works only if the processor is in previliged mode.
msr cpsr_cxsf,r0
MOV_PC_LR
;void CLR_IF(void);清CPSR_IR,即允许IRQ中断和FIQ中断
EXPORT CLR_IF
CLR_IF;仅在特权模式下可用此程序。
;This function works only if the processor is in previliged mode.
mrs r0,cpsr
bic r0,r0,#NOINT
msr cpsr_cxsf,r0
MOV_PC_LR
EXPORT outportw
outportw strh r0, [r1]
MOV_PC_LR
EXPORT inportw
inportw ldrh r0, [r0]
MOV_PC_LR
请原谅这里不是原创,只因还在努力学习!
在ARM的嵌入式应用中,存储系统是通过协处理器CP15完成的。CP15包含16个32位的寄存器,其编号是0-15。对于CP15协处理器的操作使用mcr和mrc两条协处理器指令,这两条指令的记法是从后往钱看:mcr是把r(CPU核寄存器)中的数据传送到c(协处理器寄存器)中,mrc则是把c(协处理器寄存器)中的数据传送到r(CPU核寄存器)中。对CP15协处理器的所有操作都是通过CPU寄存器和CP15寄存器之间交换数据完成的。
寄存器C0,C1。C0的基本作用是ID编码;C1的基本作用是控制位(可读可写)。
C1的第12位:I(bit[12])。当数据和地址处于分开时,该控制位禁止使能指令cache;其中0是禁止指令cache,1是使能指令cache;如果系统中使能统一的指令cache和数据cache或者系统中不含cache,读取时该位返回0,写入时忽略该位。当系统中的指令cache不禁止时,读取该位时返回1,写入时忽略该位。当系统中的指令cache不禁止时,读取时该
S3C2440源程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)