版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章ARM体系结构与接口电路2.1ARM微处理器工作模式2.2ARM寄存器2.3ARM异常2.4S3C2410存储器配置及接口电路设计2.5S3C2410外设接口电路设计本章小结2.1ARM微处理器工作模式
ARM微处理器支持三种数据类型,即32位的字、16位的半字和8位的字节。对于无符号数,取值范围为0~2N-1,为普通二进制码存储格式;对于有符号数,取值范围为-2N-1~+2N-1-1,为二进制补码存储格式,其中,N取8、16或32,为数据字长。ARM指令严格占一个字或四个连续字节(且首字节地址最后两位为00比特)的存储空间。
目前,ARM体系结构支持七种处理器模式,如表2-1所示。表2-1中的模式码是指寄存器CPSR(当前程序状态寄存器)中的低5位,即CPSR[4:0]。需要说明的是,对于ARM920T核心的S3C2410A处理器,上电复位后工作于管理模式。工作模式之间可以通过MSR指令、软中断、外部中断或异常等切换。上电复位后,可执行指令“MSRCPSR_c,#0x10”由管理模式切换到用户模式,大多数应用程序工作在用户模式下。进入用户模式后,只能通过异常才能切换到其他工作模式,应用程序不能访问一些受保护的系统资源。用户模式和系统模式之外的五种工作模式统称为特权模式,特权模式下,可以访问所有系统资源,工作模式可以借助MSR指令随意切换,每种特权模式都有一些专用寄存器,用于保存其工作状态。系统模式与用户模式共用相同的寄存器,但是,系统模式属于特权模式,它能访问所有系统资源,可随意切换工作模式,主要供需要访问所有系统资源的操作系统任务使用。
2.2ARM寄存器
ARM寄存器都是32位的,其组织如图2-1所示。
从图2-1中可以看出,每种模式下最多可访问的寄存器个数为18个,其中,用户模式和系统模式下只能访问17个寄存器。图2-1中同名的寄存器具有相同的物理寄存器,而带有沙粒三角形的寄存器则具有独立的物理寄存器,例如,R0在七种工作模式下都映射到同一个物理寄存器,而R13、R13_svc、R13_abt等表示在不同工作模式下映射到不同的物理寄存器。图2-1ARM寄存器组织这样,ARM共有37个物理寄存器,即未分组的寄存器R0~R7映射的8个物理寄存器+分组的寄存器R8~R14映射的22个物理寄存器+程序计数器PC和当前程序状态寄存器CPSR映射的2个物理寄存器+异常模式下备份程序状态的寄存器SPSR映射的5个物理寄存器=37(图2-1上名称完全相同的寄存器只能计数一次,则数遍图上所有的寄存器,刚好得到37)。
一般地,如果某条指令可以使用R0,则它也可以使用R1~R13的其他寄存器。在所有工作模式下,R0~R7都对应于相同的物理寄存器,因此,在工作模式切换时,这些寄存器的数据可以直接使用,同时,原来的数据就有可能被破坏。因此,R0~R7称为未分组的寄存器,用于存放数据。
R8~R12在快速中断模式时映射到独立的物理寄存器,这些寄存器均加了后缀_fiq,而在其他工作模式下均映射到相同的物理寄存器,这样R8~R12共占有了10个物理寄存器,一般用于存放数据。R13通常用于堆栈指针(SP),保存当前工作模式下的堆栈栈顶;R14被称为链接寄存器(LR),保存子程序调用或跳转时的返回地址。R13和R14在五种异常模式下都有其独立的物理寄存器,因此,R13和R14共占有12个物理寄存器。PC即R15,为程序计数器,存放的是处理器要取的下一条指令的地址(具体地址与流水线个数有关),在七种工作模式下占有同一个物理寄存器。R8~R14被称为分组寄存器,这些寄存器在工作模式切换时,原有工作模式下的寄存器不能被访问,而使用新工作模式下的同名寄存器替代,这样,原来的寄存器的数据得到了保护。上述R0~R15通称为通用寄存器,即这些寄存器可以保存数据(或指令数据),也可以用于保存指令地址。此外,还有两个专用寄存器,用于保存当前程序的工作状态,即CPSR和异常模式下保存CPSR值的寄存器SPSR,这两个寄存器占有6个物理寄存器。
需要重点指出的是,ARM微处理器工作模式虽然可以切换,但是,其工作模式确定后,ARM微处理器仅能访问图2-1上该模式下的寄存器。2.2.1通用寄存器
通用寄存器包括未分组寄存器R0~R7、分组寄存器R8~R14和R15(即PC)。如图2-1所示,分组寄存器在某些异常模式下映射为独立的物理地址,此时的寄存器名称被描述为
<寄存器名>_<mode>,例如,图2-1中的R8_fiq和R13_und等,其中,mode分别取为svc、abt、und、irq或fiq等,用户模式和系统模式的寄存器名可以添加后缀_usr和_sys。需要指出的是,在RVDS程序设计时,只需使用寄存器名。
以寄存器R13为例,仿照第1.3.2小节的1. 和2. 的内容调试如下的程序(注意图1-16的设置),可以看到不同工作模式下R13的值是不同的。
1AREA INIT,CODE,READONLY
2ENTRY ;EnterSVCMode
3MOV R13,#0xAA
4MSR CPSR_c,#0x11 ;EnterFIQMode
5MOV R13,#0xBB
6MSR CPSR_c,#0x12 ;Enter
IRQMode
7MOV R13,#0xCC
8MSR CPSR_c,#0x1F ;EnterSYSMode
9MOV R13,#0xDD
10MSR CPSR_c,#0x13 ;EnterSVCMode
11MOV R0,#0x5512MSR CPSR_c,#0x11 ;EnterFIQMode
13MOV R0,#0x55
14MSR CPSR_c,#0x12 ;EnterIRQMode
15MOV R0,#0x55
16MSR CPSR_c,#0x1F ;EnterSYSMode
17MOV R0,#0x55
18MSR CPSR_c,#0x13 ;EnterSVCMode
19MOV R0,#0x55
20stop
21BL stop
22END程序的解释如下(R13在RVDEBUG中的寄存器视图中为SP):
第1行:定义只读代码段INIT;
第2行:标识程序入口,程序复位后进入SVC模式;
第3行:在SVC模式下,R13置成0xAA;
第4行:进入FIQ模式;
第5行:在FIQ模式下,R13置成0xBB;
第6行:进入IRQ模式;
第7行:在IRQ模式下,R13置成0xCC;
第8行:进入SYS模式;
第9行:在SYS模式下,R13置成0xDD;
第10行:再次进入SVC模式;第11行:在SVC模式下,R0置成0x55,此时,可以看到R13的值为0xAA;
第12行:再次进入FIQ模式;
第13行:在FIQ模式下,R0置成0x55,此时,可以看到R13的值为0xBB;
第14行:再次进入IRQ模式;
第15行:在IRQ模式下,R0置成0x55,此时,可以看到R13的值为0xCC;
第16行:再次进入SYS模式;
第17行:在SYS模式下,R0置成0x55,此时,可以看到R13的值为0xDD;
第18行:再次进入SVC模式;第19行:在SVC模式下,R0置成0x55,此时,可以看到R13的值为0xAA;
第20、21行:死循环跳转;
第22行:程序段结束标志。
从程序的运行情况可以看出,R13在不同的工作模式下虽然具有相同的标识名,但对应于不同的物理寄存器,它们的赋值互不影响(注意:R13一般用作SP指针,上面的赋值意义不大,仅用于说明分组寄存器在不同的工作模式下对应不同的物理寄存器这一特点)。2.2.2程序状态寄存器
32位的当前程序状态寄存器(CPSR)分为4个8位区域,从高位至低位依次为标志位域(CPSR_f)、状态位域(CPSR_s)、扩展位域(CPSR_x)和控制位域(CPSR_c)。每种异常模式下都各有一个备份CPSR值用的寄存器,称为备份的程序状态寄存器(SPSR),用于异常发生时保存CPSR的值(用户模式和系统模式下没有SPSR)。
CPSR(或SPSR)寄存器位如图2-2所示。图2-2CPSR寄存器位的含义图2-2中各位分为四类:其一,保留位,为后续ARM版本扩展功能保留的位,图中使用Res、RESERVED标记这些位;其二,用户模式下可写的位,这些位为N、Z、C、V、Q、E和GE[3:0],其中,Q出现在ARMv5E以上版本中,E和GE[3:0]在ARMv6以上版本中,所有这些位特权模式下也均可写;其三,特权模式下可写的位,这些位为A、I、F和M[4:0],用户模式下无法向这些位写入,其中,A用于ARMv6以上版本;其四,执行状态位,这些位为J和T,在ARM状态下必须为0。注意:所有CPSR的各位,在用户模式下都是可以读出的。
对CPSR的访问操作一般是这样的:如果想设置某位或某几位,先执行指令MRS读出CPSR的值;然后,借助于与、或、异或等位操作仅把需要设置的位赋值,不需要设置的位的值保持不变;最后,执行MSR指令把设置好的值写回CPSR。
1.条件码标识位
图2-2的第31位至28位依次为N、Z、C和V,被定义为条件码标识位,取自Negative、Zero、Carry和oVerflow中的大写字母。一般地,算术、逻辑和赋值指令后添加S(目的寄存器不是R15)或比较指令(如CMN、CMP、TEQ和TST)等的执行会影响CPSR中的条件码标识位。此外,MSR、MRC(目的寄存器为R15)、LDM指令的某些变种、特权模式下使用REF指令从存储器向CPSR装入数据、目的寄存器为R15的少数算术和逻辑指令变种等的执行也会影响条件码标识位。对于二进制补码表示的有符号数运算,N=1表示运算结果为负,N=0表示结果大于或等于0。Z=1表示运算结果为0,Z=0表示运算结果非0。C有两种情况:对于加法指令(包括CMN),当C=1时表示有进位,当C=0时表示无进位;对于减法指令(包括CMP),当C=0时有借位,C=1时无借位。无论操作数是否为二进制补码表示的有符号数,只要V=1,则表示最高位发生溢出,否则,V=0表示无溢出。
2.中断状态位
图2-2中CPSR的第7位和第6位依次为I和F,用于表示中
断状态。如果I=1,则IRQ中断被屏蔽;如果I=0,则IRQ中断使能。如果F=1,则FIQ中断被屏蔽;如果F=0,则FIQ中断被使能。
3.工作模式位
第2.1节中指出ARM有七种工作模式,工作于哪种模式受CPSR中的工作模式位M[4:0]控制,这些位处于CPSR寄存器的低五位,即图2-2中的第4~0位。工作模式位的含义如表2-2
所示。2.2.3PC与指令流水线
流水线是RISC处理器执行指令的方式,ARM7支持三级流水线,ARM9支持五级流水线,ARM10支持六级流水线。ARM9与ARM7相比,指令吞吐量增加了约13%。ARM7和ARM9的流水线如图2-3所示。图2-3ARM7和ARM9的流水线对于五级流水线来说,每个机器周期内可以有五个指令的不同阶段同时处理,但只有一条指令处于执行阶段,其他四条指令处于取指、译码、存储和写阶段。当某条指令正处于执行阶段时,PC寄存器指向此时要取指的指令,对于ARM7和ARM9来说,如图2-3所示,PC指向该正在执行的指令的地址加上2条指令的地址。对于所有流水线来说,执行阶段与取指阶段间的管道数乘以每条指令所占的字节数,再加上当前正处于执行阶段的指令地址,即为PC指向的下一条指令的地址。对于ARM7和ARM9来说,虽然流水线级数不同,但是执行阶段与取指阶段间的管道数均为2,所以,PC指向的下一条指令的地址均为当前处于执行阶段的指令地址+8字节(每条32位的ARM指令占有4个字节)。对于ARM10和ARM11等,按相同的方法推理PC的值。
2.3ARM异常
异常是由内部或外部的触发源引起的,异常发生后,ARM处理器将中断当前的操作,而跳转到异常向量地址处执行异常服务程序(或称中断服务程序)。除了上电复位异常之外,其他的异常服务程序跳转执行前,处理器将自动保存当前的程序状态,异常服务程序执行完毕后,将返回到被中断的程序处继续执行。
异常向量表如表2-3所示。异常发生后,R14和SPSR用于保存处理器状态,具体如下:
R14_<异常模式>=返回地址
SPSR_<异常模式>=CPSR
CPSR[4:0]=异常模式标识码
如果<异常模式>=复位或FIQ,则
CPSR[6]=1,屏蔽快速中断
否则,CPSR[6]不变
CPSR[7]=1,屏蔽常规中断
PC=异常向量地址对于上述伪语言表示,当某种异常发生后,程序的返回地址保存在该异常模式下的R14(即LR)中,程序状态CPSR保存在该异常模式的SPSR中;然后,CPSR的M[4:0]被置位成该异常模式位,如果发生的异常为复位或FIQ异常,则要屏蔽快速中断;最后,屏蔽常规中断,PC指向异常向量表中该异常向量的地址处。异常服务程序处理完后,SPSR复制到CPSR,R14(LR)复制至PC(此时的PC为程序被异常中断前的执行地址),程序将从PC处继续执行。异常返回有两种方式:其一,借助带S的数据处理指令,且PC为目的寄存器;其二,借助多寄存器加载指令赋值CPSR,例如:希望异常返回到特定的地址处,则进入异常前将该地址保存在堆栈内,即
SUBR14,R14,#4 ;获得R14(即LR)
STMFDSP!,{<其他寄存器列表>,R14}
;R14压入堆栈中
异常返回时,执行
LDMFDSP!,{<其他寄存器列表>,PC}^
;R14出栈,赋给PC
上述三行代码的含义依次为:R14减去4赋给R14;将其他需要保存内容的寄存器和R14压入堆栈中,SP(即R13,为堆栈指针)指向栈顶,“!”表示SP减少后的值赋给SP;将SP指向的堆栈数据依次出栈,赋给寄存器列表中的寄存器和PC,“!”表示SP增加后的值赋给SP,“^”表示将SPSR的值传回CPSR中。对这些语句更深入的理解请参考第三章。
下面具体介绍一下每个异常。2.3.1复位异常
外部输入复位信号有效后,ARM微处理器将执行以下
操作:
R14_svc=不确定值
SPSR_svc=不确定值
CPSR[4:0]=0b10011 //上电复位后进入管理模式
CPSR[5]=0 //工作在ARM状态
CPSR[6]=1 //屏蔽快速中断
CPSR[7]=1 //屏蔽普通中断
如果高端异常向量地址配置了,则
PC=0xFFFF0000否则,
PC=0x00000000
由此可见,上电复位后的ARM微处理器处于管理工作模式下,且为执行ARM指令的ARM状态,从地址0x0开始执行指令,普通中断和快速中断均处于被屏蔽状态,连接寄存器LR(即R14)和备份的程序状态寄存器SPSR的值不确定。复位异常一般发生于ARM硬件系统上电工作瞬时,或者由于手工复位按键复位以及看门狗电路引起的复位等。
复位异常服务程序需要完成系统初始化工作,包括配置时钟、存储器、高速缓存、堆栈、片上外设寄存器等。复位异常程序执行初始化过程时应避免SWI软件中断、未定义指令中断及存储器访问导致的中止等异常,系统初始化成功后ARM处理器进入工作状态。2.3.2中断请求异常
ARM微处理器外部IRQ中断引脚有效,且CPSR的第I位(即CPSR[7])为0时,可产生IRQ普通中断,ARM微处理器将继续执行处于流水线“执行”阶段的指令,然后跳转到IRQ中断服务程序。
如果IRQ中断产生了,ARM微处理器自动执行如下操作:
R14_irq=下一条将被执行的指令地址+4
SPSR_irq=CPSR
CPSR[4:0]=0b10010 //进入IRQ模式
CPSR[5]=0 //工作在ARM状态
CPSR[6]保持不变
CPSR[7]=1 //屏蔽再次产生的IRQ中断
如果高端异常向量地址配置了,则
PC=0xFFFF0018
否则,
PC=0x00000018
IRQ中断服务程序执行完毕后,借助如下指令返回:
SUBSPC,R14,#4
上述SUBS指令中,由于PC为目的操作数,因此,将执行两个操作:即R14_irq的值赋给PC,SPSR_irq的值赋给CPSR。典型的IRQ中断服务程序结构为:
ISR_irq: //IRQ中断服务程序开始标号
<中断处理代码>
SUBSPC,R14,#4//IRQ中断服务程序返回指令
另一种IRQ中断服务程序结构为:
ISR_irq://IRQ中断服务程序开始标号
SUBR14,R14,#4//IRQ中断服务程序第一条语句
<中断处理代码>
MOVSPC,R14//IRQ中断服务程序返回指令
在MOVS中,PC为目的操作数,因此,“MOVSPC,R14”将R14的值写入PC中,同时自动实现从SPSR_irq中恢复CPSR的值。以上两种IRQ中断服务程序结构具有一个共同的特点,即在中断处理代码中不能更改R14的值,否则将导致中断返回的地址错误。所以,常用的方法为借助堆栈实现中断服务程序,其结构如下:
ISR_irq:
//IRQ中断服务程序开始标号
SUBR14,R14,#4//R14=R14–4
STMFDR13!,{R0–R3,R14}
//R13为堆栈指针,将R0至R3和R14保存在堆栈中
<中断处理代码>
LDMFDR13!,{R0–R3,PC}^//IRQ中断服务程序返回语句,从堆栈中恢复PC的值,并强制CPSR从SPSR寄存器恢复2.3.3快速中断请求异常
当ARM微处理器外部FIQ引脚有效,且CPSR的F位为0时,可产生FIQ快速中断请求,其优先级高于IRQ,主要用于对实时数据流的快速传输和处理。ARM微处理器检测到FIQ异常时,当前处于流水线“执行”阶段的指令执行完成后,跳转到FIQ快速中断服务程序,ARM微处理器自动实现如下操作:
R14_fiq=下一条要执行的指令地址+4
SPSR_fiq=CPSR
CPSR[4:0]=0b10001//进入FIQ工作模式
CPSR[5]=0 //工作在ARM状态
CPSR[6]=1 //屏蔽再次产生的快速中断
CPSR[7]=1 //屏蔽IRQ中断
如果高端异常向量地址配置了,则
PC=0xFFFF001C
否则,
PC=0x0000001C
从快速中断返回的方法与从IRQ中断返回的方法相同,典型的语句为
SUBSPC,R14,#42.3.4软件中断异常
ARM微处理器通过执行SWI(软件中断)指令进入管理模式,这是用户模式转换到特权模式的常用方法。SWI指令执行时,ARM微处理器自动实现如下操作:
R14_svc=SWI指令的下一条指令地址
SPSR_svc=CPSR
CPSR[4:0]=0b10011 //进入管理模式
CPSR[5]=0 //工作在ARM状态
CPSR[6]保持不变
CPSR[7]=1 //屏蔽IRQ中断如果高端异常向量地址配置了,则
PC=0xFFFF0008
否则,
PC=0x00000008
从软件中断异常返回的典型语句为
MOVSPC,R142.3.5数据中止异常
数据中止异常是由存储系统引发的。当要访问的存储空间数据无效时,将产生数据中止异常。ARM微处理器自动实现以下操作:
R14_abt=被中止的指令地址+8
SPSR_abt=CPSR
CPSR[4:0]=0b10111 //进入中止工作模式
CPSR[5]=0 //处于ARM状态
CPSR[6]保持不变
CPSR[7]=1 //屏蔽IRQ中断如果高端异常向量地址配置了,则
PC=0xFFFF0010
否则,
PC=0x00000010
从数据中止异常服务程序返回的典型语句为
SUBSPC,R14,#82.3.6预取指令异常
预取指令异常由存储系统引发,当取指的指令无效,且ARM微处理器试图执行该无效指令时,将产生预取指令异常,ARM微处理器将自动实现以下操作:
R14_abt=被中止的指令地址+4
SPSR_abt=CPSR
CPSR[4:0]=0b10111 //进入中止模式
CPSR[5]=0 //处于ARM状态
CPSR[6]保持不变
CPSR[7]=1 //屏蔽IRQ中断如果高端异常向量地址配置了,则
PC=0xFFFF000C
否则,
PC=0x0000000C
从预取指令异常服务程序返回的典型语句为
SUBSPC,R14,#42.3.7未定义指令异常
如果ARM微处理器要执行一条协处理器指令,将等待外部协处理器确认该指令可以被执行。如果没有外部协处理器应答,将产生未定义指令异常。未定义指令异常主要用于没有硬件协处理器系统的协处理器软件仿真或者通用目的指令集软件仿真扩展。
当未定义指令异常发生后,ARM微处理器自动执行以下操作:
R14_und=未定义指令后的下一条指令的地址
SPSR_und=CPSR
CPSR[4:0]=0b11011//进入未定义指令模式
CPSR[5]=0 //处于ARM状态
CPSR[6]保持不变
CPSR[7]=1 //屏蔽IRQ中断
如果高端异常向量地址配置了,则
PC=0xFFFF0004
否则,
PC=0x00000004
从未定义指令异常返回的典型语句为
MOVSPC,R142.3.8异常返回地址
异常处理是ARM微处理器控制软件设计的核心内容,主要包括异常优先级、异常嵌套、异常入口和异常返回等。其中,异常优先级避免了多个异常同时发生时的资源竞争,多个异常同时发生时,优先级较高的异常优先得到处理,例如,FIQ和IRQ中断同时发生,则FIQ中断得到处理;异常嵌套使得某个异常服务程序处理过程中可以响应其他的异常,例如,数据中止异常服务程序执行过程中,由于没有屏蔽FIQ中断,当外部FIQ中断产生后,将执行FIQ中断服务程序,FIQ中断服务程序执行完后,再继续处理数据中止异常;异常入口点为异常发生后PC寄存器装入的值,是ARM微处理器自动强制PC跳转的地址值。异常返回地址是相对于异常发生前的程序而言的。异常发生后,PC将跳转到异常入口点,对应异常模式的LR寄存器设置为基于跳转前的PC值的一个特定地址,异常服务程序执行过程中,不能修改LR的值(如果异常服务程序中要使用LR寄存器,必须在异常服务程序开始处将LR的值压栈)。异常服务程序执行完毕后,PC的值需要恢复为跳转前执行的最后一条指令的下一条指令,这条指令的地址即为异常返回地址。不同的异常处理,其返回地址不完全相同,如表2-4所示。从表2-4可以看出,对于SWI、IRQ、FIQ和未定义指令异常,异常返回地址为异常跳转前的程序最后执行完的指令的下一条指令地址;而数据中止和预取指中止异常的返回地址则为异常跳转前的程序未得到执行的那条指令地址。
需要指出的是异常发生后的LR值是ARM微处理器自动设置的,无法修改;而返回地址是程序配置的,可以人为修改。例如,对于数据中止异常,不希望异常返回后重复执行跳转时没有执行的指令,可以使用以下语句
SUBSPC,R14,#4
跳转到其下一条指令地址(PC_b+4)处。
2.4
S3C2410存储器配置及接口电路设计
ARM微处理器存储器配置涉及协处理器寄存器CP15、存储管理单元(MMU)和高速缓存(Cache)等,将在第四章中展开论述,本节具体讨论基于ARM920T核的S3C2410芯片的存储器配置。S3C2410是SAMSUNG公司代工的高性价比ARM9系列微处理器芯片,支持外扩SDRAM、NANDFLASH,寻址空间为128 MB/区块(共有8区块,即1 GB空间),片内具有4 KBSRAM,集成MMU和丰富的片上外设,集成独立的16 KB指令Cache和16 KB数据Cache,支持μC/OS-Ⅱ、WindowsCE和嵌入式Linux等嵌入式操作系统,适用于移动设备和小型通用嵌入式应用场合。2.4.1存储格式
ARM920T将存储空间按字节进行物理编址,第0个字节的地址为0x00000000,第1个字节的地址为0x00000001,地址0x00000000至0x00000003(即第0个字节至第3个字节)存放第一个字,地址0x00000004至0x00000007(即第4个字节至第7个字节)存放第二个字,依次类推。每个字存放的32位首地址的最后两位,即第1和0位为0b00时,称为字对齐存储。字的对齐存储格式有两种,即小端(LittleEndian)格式和大端(BigEndian)格式。
其中,小端存储格式中,存储字的四个字节的最低地址字节存储字的最低字节,而最高地址字节存储字的最高字节,如图2-4所示。图2-4小端存储格式图2-4中存储字的位地址是指32位的字数据各位的相对位置;字存储空间的位地址是指存储字数据的连续四个字节按高地址向低地址的位排序位置;方格中的数字表示存储的字数据的字节序号。
大端存储格式与小端存储格式相反,存储字的四个字节的最低地址字节存储字的最高字节,而最高地址字节存储字的最低字节,如图2-5所示。
小端和大端格式也称为小E和大E存储模式,在S3C2410芯片中,可通过软件设定。图2-5大端存储格式2.4.2映射存储空间
S3C2410复位后的存储器映射空间配置模式受器件管脚OM1和OM0的电平影响而分为两种方式,如图2-6所示。可访问映射地址空间共分成8个区块(Bank),每区块为128 MB,其中,第6和7区块大小可以配置,各个区块的地址是连续编址的,区块0至5的编址是固定的,当区块6小于128 MB时,区块7的首地址仍然为区块6的末地址加1,如表2-5所示。区块0的访问字长为16位或32位,其余7个区块的访问字长可为8位、16位或32位,且各区块的程序访问周期可以编程,因此,各区块实际访问的存储大小和时序是可编程的。各个区块均可以外扩SROM(SROM指SRAM和ROM型存储器);只有区块6和7才能外扩SDRAM,且支持自刷新和掉电工作模式。图2-6复位后S3C2410映射存储空间从表2-5可以看出,区块6和7的大小必须相等,且编址是连续的。
1.区块0的总线宽度
由于区块0作为启动ROM区块,在访问区块0前,必需设定该区块的总线宽度。可以设定为16位或32位宽度,由上电
复位时S3C2410的管脚OM0和OM1(合记为OM[1:0])的电压决定,如表2-6所示。这里OM为OperatingMode(操作模式)的
缩写。由表2-6可以看出,如果使用NAND型FLASH作为启动ROM,则OM[1:0]需配置为0b00;如果使用NOR型FLASH,需要根据FLASH的数据总线宽度为16位还是32位,配置OM[1:0]的值为0b01或0b11。
2.区块地址连接样式
S3C2410中,所有区块均可外接SROM,但只有区块6和7可以外接SDRAM。各区块根据外接存储器芯片的数据总线位宽,用到的S3C2410地址管脚总线不同。
如果外接8位数据总线的存储器芯片,则S3C2410地址管脚总线A0接外扩存储器的地址线ADDR0,A1接ADDR1,依次类推,直到把外扩存储器芯片所有的地址线都连接好,即地址总线是同名相连接的,这时S3C2410访问外部存储器芯片是按字节访问的。如果外接16位数据总线的存储器芯片,则S3C2410地址管脚线A1接外扩存储器的地址线ADDR0,A2接ADDR1,依次类推,即S3C2410的地址线A0不与外接存储器芯片的地址线相连,而是接地,这时,S3C2410访问外部存储器芯片是按16位的半字访问的,每次访问时,需要一次从数据线上读出两个字节的内容。由于A0为0,故这种读写方式下一定是半字对齐的。与16位的ROM及SROM连接的典型接口如图2-7和图2-8所示。
图2-7和图2-8中,方框内部的管脚标号为ROM或SRAM的,方框代表ROM或SRAM芯片,方框外部的标号属于S3C2410的管脚标号。图2-7与16位ROM的典型接口图2-8与16位SRAM的典型接口如果外接32位数据总线的存储器芯片,则S3C2410地址管脚线A2接外扩存储器的地址线ADDR0,A3接ADDR1,依次类推,即S3C2410的地址线A1和A0不与外接存储器芯片的地址线相连,而是接地,这时,S3C2410访问外部存储器芯片是按32位的字访问的,每次访问时,需要一次从数据线上读出四个字节的内容。由于A[1:0]=0b00,这种读写方式下一定是字对齐的。外接32位数据总线的存储芯片可等效于连接两片16位数据总线的存储芯片,如图2-9所示,读写时,其中一片存储器芯片存放每个字的低16位,另一片
存储器芯片存放同一个字的高16位。图2-9中,方框内部标号属于SRAM,外部标号为S3C2410的管脚标号。图2-932位典型接口(2片16位SRAM)
3.SDRAM区块地址配置样式
可外扩SDRAM的区块6和7可以配置大小,如表2-5所示,其大小可设为2 MB、4 MB、8 MB、16 MB、32 MB、64 MB、128 MB等。这里列出8 MB、16 MB、32 MB、64 MB和128 MB情况下外扩SDRAM器件时地址线的配置样式,如表2-7所示。表2-7中第一列区块大小是指图2-6中S3C2410映射存储空间的区块6或7的大小;第二列SDRAM总线宽度是指SDRAM的数据总线宽度,可取8位、16位或32位;第三列SDRAM芯片容量大小是指每片SDRAM芯片的存储容量大小;第四列存储器配置表示SDRAM的存储结构和使用的片数,例如64 Mb大小、16位数据总线以及内部具有4个存储段的SDRAM使用了2片,则存储器配置表示为:(1 Mb×16×4段)×2片,注意,这里的SDRAM芯片的数据总线宽度可以为4位、8位、16位或32位;第五列SDRAM区段选址是指SDRAM芯片内部分为多个存储段时,用于选取特定存储段的S3C2410管脚地址线。第五列中的地址线根据区块6或7的容量大小和外接SDRAM的存储段数设置,例如,区块6的大小为8 MB,则寻址地址线为A[22:0],即最大寻址地址线为A22,当SDRAM芯片有4个存储段时,需要2根地址线,于是,SDRAM芯片区段选址地址线为A[22:21]。图2-10和图2-11分别为(1 Mb×16×4段)×1片和(1 Mb×16×4段)×2片的存储器接口情况。
4.存储器映射寄存器
从图2-6可以看出,映射存储空间的地址0x48000000至0x60000000区段为特殊功能寄存器区,S3C2410有丰富的特殊功能寄存器(SFR),详见附录一,各个SFR的描述参见附录二。图2-10外接8 MBSDRAM图2-11外接16 MBSDRAM2.4.3NOR型FLASH接口电路设计
由于S3C2410支持NAND型FLASH作为启动FLASH,启动后,NAND型FLASH仍可以用作外部存储器,此外,NAND型FLASH的容量比NOR型FLASH大得多,并且NAND型FLASH价格便宜。所以,S3C2410一般只需外接NAND型FLASH即可。NOR型FLASH的优点在于其接口类似于SRAM,具有地址总线和数据总线管脚,可以直接访问存储器内部每一个字节,读取速度很快。博创UP-NETARM2410实验箱支持对NOR型FLASH芯片AM29LV160D的存储扩展(技创SBC2440实验板上为AM29LV800B),由于板上还载有NAND型FLASH芯片K9F1208U0M,所以,AM29LV160D芯片可以不用焊到板子上(这是博创实验箱核心板上有一个空焊盘没装芯片的原因)。
1.AM29LV160D特性
AM29LV160D是AMD公司的NOR型FLASH型片,存储容量为2 MB,应用十分广泛。其显著特性有:3.3 V工作电压;0.23 μm生产工艺;访问速度最快达70 ns;功耗极低,待机模式典型电流为200 nA,读典型电流为9 mA@5 MHz,擦写典型电流为20 mA@5 MHz;扇区结构灵活,具有扇区保护特性,支持8位和16位读写模式;寿命在100万次擦写以上;内部数据掉电可保存20年;芯片读写方便;具有硬件复位管脚。
AM29LV160D有三种封装型式,其中48脚TSOP外型如图2-12所示,各管脚含义如表2-8所示。图2-12AM29LV160D芯片封装
2.AM29LV160D接口电路
AM29LV160D与S3C2410的接口电路如图2-13和图2-14所示。图2-13AM29LV160D接口电路图2-14S3C2410部分接口电路说明:图2-13和图2-14使用ProtelDXP(AltiumDXP)绘制,采用网标表示不同芯片管脚的连通性。图2-13中AM29LV160D的D0至D15即为图2-12中的DQ0至DQ15,通过网标LDATA0至LDATA15与S3C2410的数据总线DATA0至DATA15连接;AM29LV160D的A0至A19通过网标LA1至LA20与S3C2410的地址总线ADDR1至ADDR20连接;其他管脚连接方法相同。图2-13和图2-14中的VDD33表示3.3V电源;网标nRESET对于AM29LV160D和S3C2410来说均为输入信号,nRESET来源于电源芯片或复位芯片的复位输出脚。
AM29LV160D的操作主要有擦片、写片、读片、保护等,介绍这方面操作的参考书很多,笔者在西安电子科技大学出版社出版的《C/C++语言硬件程序设计——基于TMS320C5000系列DSP》一书的第六章中也详细地介绍了该类FLASH芯片的操作,本书不再重复。
关于管脚标注的一点补充:一般地,如果数字化芯片的管脚为低有效输入时,常在管脚名称后面添加“#”,或在管脚名称上面添加一个横线(DXP中在每个字母后加“\”即可),或在管脚名称前添加字母“n”。2.4.4NAND型FLASH接口电路设计
NOR型FLASH芯片在很多基于DSP的系统中十分常用,在基于ARM型芯片的系统中,NAND型FLASH芯片用得更多一些,主要因素为NAND型FLASH芯片容量大、价格低,且ARM芯片支持NAND型FLASH作为启动ROM。博创UP-NETARM2410实验箱上集成了K9F1208U0C芯片(完全兼容K9F1208U0M)。
1.K9F1208U0M芯片特性
K9F1208U0M为SAMSUNG公司的64 MB大小NAND型FLASH存储器芯片,其主要特性有:工作电压为3.3V;存储单元阵列为(64 M+2048 K)×8 bit,分为4个可同时擦写大小为128 Mb的存储面,每个存储面包括1024个存储块和528 B的页寄存器;片上写控制器自动管理写入和擦除操作,典型的16 KB存储块整块擦除时间为2 ms,528 B大小的存储页写入的典型时间为200 μs,连续页读取时间最小可达50 ns;I/O管脚用作数据、地址的输入/输出以及控制命令的输入;数据保存时间长达10年;具有硬件数据保护功能。K9F1208U0M芯片的封装如图2-15所示,其管脚含义如表2-9所示。图2-15K9F1208U0M封装结构
2.K9F1208U0M接口电路
K9F1208U0M与S3C2410的接口电路如图2-16所示。注意:需要结合图2-14理解图2-16中的网标。在第七章中介绍了对K9F1208U0M访问的程序设计方法。
图2-16的接法比较典型,8根I/O口线连接到S3C2410的数据总线DATA0~DATA7,K9F1208U0M的控制信号线通过网标FCLE、FALE、nFRE、nFWE、nFCE和FRB连接到图2-14中的S3C2410的NANDFLASH控制总线上。
由图2-16和图2-14可知,S3C2410接NAND型FLASH芯片时,不使用地址总线。图2-16F9F1208U0M接口电路2.4.5SDRAM接口电路设计
SDRAM是SynchronousDynamicRandomAccessMemory的缩写,直译为同步动态随机访问存储器。SDRAM芯片的数据传输速率与同步时钟相同,速率很高。桌面电脑的DDRSDRAM和DDRⅡSDRAM也是SDRAM型内存,DDR为DoubleDateRate的缩写,表示数据传输速率是同步时钟的两倍,即时钟信号的上升沿和下降沿均可被用来传送同步数据。博创UP-NETARM2410实验箱使用了两片HYNIX公司的SDRAM型HY57V561620芯片,本节给出HY57V561620芯片与S3C2410的接口电路。
1.HY57V561620芯片特性
HY57V561620芯片为32 MB大小的SDRAM存储器,主
要特性为:工作电压为3.3 V;管脚兼容LVTTL逻辑电平;输入和输出均参考同步时钟上升沿(或称为上升沿触发和上升沿有效);具有自动刷新功能;内部具有4个存储块,每个存储块的大小为4 M×16 bit;支持猝发式(Burst)连续读写方式;输入时钟频率可达166 MHz。HY57V561620芯片管脚封装如图2-17所示,各管脚含义如表2-10所示。图2-17HY57V561620管脚封装结构
HY57V561620内部有4个存储块(Bank),通过块地址线BA0和BA1取0b00、0b01、0b10或0b11选择其中的一个块,当RAS有效时,A0~A12选中某个存储块的行地址(RA0~RA12);然后,当CAS有效且WE为高电平时,A0~A8用作这个存储块的列地址(CA0~CA8),此时的操作为从相应的地址阵列中读取数据;如果A10为高电平,读操作伴随有自动预充电功能。同理,操作过程中,如果WE为低电平,则表示向地址阵列中写入数据,A10为高电平时,写操作伴随有自动预充电功能。读写HY57V561620的控制真值表如表2-11所示。表2-11中“L”表示低电平,“H”表示高电平,RA为行地址,CA为列地址。13根行地址线和9根列地址线组合成22根地址线,HY57V561620每个存储块的寻址能力为222=4 M,4个块的寻址能力为16 M,数据总线为16bit,因此,每片HY57V561620的容量为16 M×16bit=32 MB。
2.HY57V561620接口电路
UP-NETARM2410实验箱中S3C2410外扩了2片HY57V561620,共64 MB大小的SDRAM空间,参考表2-7中S3C2410区块6配置大小为64 MB以及外接数据总线宽度为32位且有4段空间的SDRAM时的存储器配置方案为(4Mb×16×4段)×2片,SDRAM内部区段选址信号接S3C2410的地址线A[25:24]。由此,可得两片HY57V561620芯片与S3C2410的接口电路图如图2-18和图2-19所示。
图2-18和图2-19表明S3C2410映射存储区块6外扩了64 MB大小的SDRAM。图2-18两片HY57V561620接口电路图2-19S3C2410部分接口电路2.5S3C2410外设接口电路设计
S3C2410为基于ARM920T的16/32位RISC微处理器芯片,片内集成了丰富的系统外设,消除了为系统配置额外接口器件的需要,大大降低了整个系统的成本。S3C2410片上集成的外设功能有:1.8 V或2.0 V核电压,3.3 V存储器电压,3.3 V外部I/O接口(亦称IO接口)电压;集成16 KB指令高速缓存和16 KB数据高速缓存;内嵌MMU;外部存储器控制器(SDRAM控制和片选逻辑);LCD控制器(支持4K色STN和256K色TFT),带有1通道LCD专用DMA。具有外部请求引脚的4通道DMA;3通道UART(IrDA1.0,16字节TxFIFO和16字节RxFIFO)/2通道SPI;1通道多主IIC总线/1通道IIS总线控制器;支持SD主接口版本1.0,兼容MMC协议版本2.11;2个USB主机接口/1个USB设备接口(1.1版);4个PWM定时器和1个内部定时器;具有看门狗定时器;117个通用目的I/O口/24个外部中断源;8通道10位ADC和触摸屏接口;具有日历功能的RTC;带PLL的片内时钟发生器;具有正常、低速、空闲、掉电工作模式。
2.5.1片上外设及其映射寄存器
S3C2410芯片管脚结构及含义参见附录三。S3C2410功能结构框图如图2-20所示。图2-20S3C2410功能结构框图由图2-20可见,S3C2410核心为支持JTAG功能内嵌ICE单元的ARM9TDMI微处理器核,ARM920TDMI通过系统控制协处理器CP15寄存器C13借助指令MMU(存储器管理单元)和数据MMU以及AMBA总线到外部存储器寻址指令和数据,或通过C13到16 KB指令Cache和16 KB数据Cache快速寻址指令和数据,指令地址和数据地址通过总线IVA[31:0]和DVA[31:0]传送。选址后,使用总线ID[31:0]和总线DD[31:0]借助指令MMU和数据MMU以及AMBA总线访问外部存储器的指令或数据,或直接在16 KB指令Cache和16 KB数据Cache中读写或存取指令和数据。MMU指向AMBA总线的连接总线IPA[31:0]或DPA[31:0]是指指令或数据的物理地址,而C13单元连接MMU单元的IVA[31:0]或DVA[31:0]是指指令或数据的映射(或称虚拟)地址。
MMU的作用是把ARM920T核产生的地址(称为虚拟地址)转化为物理地址去访问外部的存储器。CP15用于配置MMU,写缓冲器(WriteBuffer)可用于保存16个字和4个地址,写回物理地址伴随缓存器(WriteBackPATagRAM)可把数据Cache更新的数据快速刷回外部存储器。16 KB的高速Cache存储阵列为512行×32 B,带宽为64位,访问Cache的地址总线为ARM920T核的虚拟地址通过C13翻译后的地址总线,Cache处于ARM920T核和外部存储器(称为主存)之间,用于缓冲将要读/写的主存数据,有效地提高ARM920T核的数据处理速度。
AMBA总线包括AHB总线和APB总线。由图2-20可知,AHB总线主要用于扩展LCDDMA、LCD控制器(图中的CONT.为Controller的缩写),USB主机控制器,NANDFLASH控制器及启动控制,中断控制器;电源管理,SRAM/NORFLASH/SDRAM存储器控制器等。APB总线主要用于扩展UART、USB设备、SDI/MMC、看门狗定时器、SPI、IIC、IIS、GPIO、RTC、ADC、定时器/PWM等。AHB和APB都具有总线控制器,能实现总线仲裁和译码功能。
所有片上外设通过外设寄存器管理。片上外设相关的存储器映射寄存器及其含义参见附录一和附录二。2.5.2LED接口电路设计
UP-NETARM2410实验箱上有3个贴片的LED灯、2个7段数码管和1个8×8点阵的LED阵列,其连接电路图如图2-21至图2-28所示。图2-21总线隔离驱动图2-22CPLD控制电路图2-23EPM240的JTAG口图2-24七段LED数码管图图2-258×8 LED阵列图2-26LED灯图2-27与门电路图2-28与LED显示相关的S3C2410部分电路上述图中,图2-23为图2-22中CPLD的JTAG下载口电路。
从图2-26和图2-28可以看出,LED灯的控制直接由S3C2410的通用目的IO口GPC5~GPC7控制,当这些管脚置为低电平时,对应的LED灯会亮。
结合图2-21、图2-22、图2-24、图2-27和图2-28以及图2-6,理解2个7段数码电路的工作原理。图2-24中2个7段数码管的控制输入LED1A~LED1G和LED1DP以及LED2A~LED2G和LED2DP,来自图2-22中CPLD的IO口,这些IO口被配置为输出。图2-22中DATA0~DATA7和A1~A4通过简单的组合逻辑与LED1A~LED1G和LED1DP以及LED2A~LED2G和LED2DP在CPLD内部相连通(需要编制VHDL语言程序)。这个控制逻辑为当A8=1且A[4:1]=0b1000时,DATA[7:0]连通LED2[A:G]和LED2DP;当A8=1且A[4:1]=0b1001时,DATA[7:0]连通LED1[A:G]和LED1DP。经过图2-21的总线隔离驱动后,图2-28中S3C2410的数据总线LDATA[7:0]和地址总线LA[4:1]与图2-21中的DATA[7:0]和A[4:1]连通,控制信号为来自图2-27与门的nBUS_OE。图2-27中,YOUT为nGCS[4:1]的与操作,nBUS_OE为YOUT、nGCS5、nXDACK0以及nXDACK1的与操作,上述8个信号中,只要有一个为低电平,则nBUS_OE为低电平。当nBUS_OE为低电平时,74ALVCH16245输出脚为输入脚的信号;当nBUS_OE为高电平时,输出管脚锁存。
S3C2410的LnOE通过74LVCH16245_1后的信号nOE加在74LVCH16245_2的DIR上,当nOE为高电平时,LDATA[7:0]的值送出到DATA[7:0];当nOE为低电平时,方向相反。
经过上述分析后知,可使用S3C2410区块1的四个地址0x08000110、0x08000111、0x08000112和0x08000113控制7段数码管(这是实验箱资料给出来的控制地址,由于A0没有使用,所以A0位为0或1不影响控制结果。事实上没有连接到CPLD的地址线均可以取0或1,因此,0x08FFF113地址与0x08000113在控制数码管上意义相同)。第一个数码管(用于表示十位数)的地址为0x0800 0110或0x0800 0111,第二个数码管(用于表示个位数)的地址为0x0800 0112或0x0800 0113。按图2-24的接法,显示在数码管上的数据如下:
#defineU8unsignedchar
U8seg7val[16]=
{
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
0x88,0x83,0xC6,0xA1,0x86,0x8E
//0123456789AB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学计算机科学与技术(计算机网络)试题及答案
- 2025年中职药剂(药品检验)试题及答案
- 2025年中职森林培育(森林培育技术)试题及答案
- 2025年中职(汽车运用与维修)汽车电器设备检修试题及答案
- 2025年中职耳鼻喉护理(耳鼻喉基础护理)试题及答案
- 2025年大学软件工程(人工智能应用基础)试题及答案
- 2025年高职无人机植保技术(植保方案设计)试题及答案
- 2025年高职工业机器人技术(机器人调试与运维)试题及答案
- 2025年中职统计学(统计调查)试题及答案
- 2026年管道安装(水管铺设)试题及答案
- 2026年孝昌县供水有限公司公开招聘正式员工备考题库及答案详解参考
- 《创新创业基础》课件-项目1:创新创业基础认知
- 2026年初一寒假体育作业安排
- 物流行业运输司机安全驾驶与效率绩效评定表
- 2026北京市通州区事业单位公开招聘工作人员189人笔试重点基础提升(共500题)附带答案详解
- 2025~2026学年山东省菏泽市牡丹区第二十一初级中学八年级上学期期中历史试卷
- 2026国家统计局仪征调查队招聘辅助调查员1人(江苏)考试参考试题及答案解析
- 水利工程施工质量检测方案
- 2025年北京高中合格考政治(第一次)试题和答案
- 卵巢类癌诊治中国专家共识(2025年版)
- 临床护理教学中的人文关怀
评论
0/150
提交评论