微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C2440学习笔记五(2440slib.s源程序的分析)

S3C2440学习笔记五(2440slib.s源程序的分析)

时间:11-11 来源:互联网 点击:
以下程序是什么意思: 为啥这个文件是一堆的汇编代码,因为这里面涉及到了底层驱动,这里既是CPU的核心控制。涉及到了直接操作的寄存器和高速缓存,实际上和51的CPU是一回事,就是51可以干一件事,他就要干几十件事,没有强悍的架构和强大的寄存器和缓存团队,他就没法强悍!就跑400M吧,他为了效率加了cp15这个比较高速的协处理器,这个cp15的本质是数据处理中心。只有早期的PC机和现行的ARM还有这个东西,现在的PC机跑得非常快了,不需要CP15这类东西帮忙了。

补充一点是,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不禁止时,读取时该

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top