android手游辅助开发从到精通95外挂arm入门教程_第1页
android手游辅助开发从到精通95外挂arm入门教程_第2页
android手游辅助开发从到精通95外挂arm入门教程_第3页
android手游辅助开发从到精通95外挂arm入门教程_第4页
android手游辅助开发从到精通95外挂arm入门教程_第5页
已阅读5页,还剩232页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1ARM5 5 5 5 6 6 6 7 7 7 8 8 8 8 8 9 9 2ARM异常 4ARM5 S3C4510B概 S3C4510B及引脚分 电源电 Flash器接口电 SDRAM接口电 IIC接口电 JTAG接口电 S3C4510B及JTAG接口电 55 5.52D (

IIC MACDMA接口(BufferedDMA MAC寄存器(MediaAccess发送一个帧(Transmittinga接收一个帧(Receivinga 8

88BootLoader第7章嵌入式uClinux及其应用开 GCCGNUGCCGNU 编译uClinux内 socket编 1ARMARM-AdvancedRISCARM(AdvancedRISCMachines),既可以认为是一个公司的名字,也可以认为是对一类微处1991年ARM公司成立于英国,主要设计技术的。目前,采用ARM技术知识(IP)核的微处理器,即我们通常所说的ARM微处理器,已遍及工业控制、消费类电子产位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。ARM公司是专门从事基于RISC技术设计开发的公司,作为知识供应商,本身不直接从事生产,靠转让设计由合作公司生产各具特色的,世界各大半导体生产商从ARM公司其设计的ARM微处理器核,根据各自不同的应用领域,加入适当的电路,从而形成自己的ARM微处理器进入市场。目前,全世界有几十家大的半导体公司都使用ARM公司1、工业控制领域:作为32的RISC架构,基于ARM核的微控制器不但占据了高端微控高性价比,向传统的8位/16位微控制器提出了。ARM7ARM9ARM10ESecurCoreInterInter其中,ARM7、ARM9、ARM9EARM104个通用处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。SecurCore系列专门为安全要求较高的应用而设计。类应用。ARM7微处理器系列具有如下特点: ARM处理器核。TDMI的基本含义为:T:支持16为压缩指令集Thumb; Debug;M:ARM9E系列微处理器为可综合处理器,使用单一的处理器内核提供了微控制器、DSP、Java应用系统的解决方案,极大的减少了的面积和系统的复杂程度。ARM9E系列微处理器提供了增强的DSP处理能力,很适合于那些需要同时使用DSP和微控制器的应用场合。ARM9EARM926EJ-S、ARM946E-SARM966E-S三种类型,以适用于不SecurCore系列微处理器主要应用于一些对安全性要求较高的应用产品及应用系统,如电子商SecurCore系列微处理器包含SecurCoreSC100SecurCoreSC110SecurCoreSC200和SecurCoreSC210四种类型,以适用于不同的应用场合。结构、同时采用具有In技术优点的体系结构。XscaleARMv5TE体系结构的解决方案,是一款全性能、高性价比、低功耗的处16ThumbDSP指令集,已使用在数字移动、个人数字助理和网络产8080%的指令却不经常使用,在程序设计中只占20%,显然,这种结构是不太合理的。基于以上的不合理性,1979年加州大学伯克利分校提出了RISC(ReducedInstructionSetCISCRISCRISC架构就可以取CISC架构,事实上,RISCCISCCPU往往采用为未来的CPU发展方向之一。ARM微处理器的在较新的体系结构中支持两种指令集:ARM指令集和Thumb指令集。其中,ARM32位的长度,Thumb16位长度。ThumbARM指令集的功能子集,但与等价的ARM代码相比较,可节省30%~40%以上的空间,同时具备32位代码的所有优会获得广泛的重视和应用。但是,由于ARM微处理器有多达十几种的内核结构,几十个生产从前面所介绍的内容可知,ARM微处理器包含一系列的内核结构,以适应不同的应用领域,WinCELinuxARM720T以LinuxuCLinuxMMUARM7TDMI硬件平台之上。事实上,uCLinux已经成功移植到多种不带MMU的微处理器平台上,并在稳定性和其他方面系统的工作频率在很大程度上决定了ARM微处理器的处理能力。ARM7系列微处理器的典型处理速度为0.9MIPS/MHz,常见的ARM7系统主时钟为20MHz-133MHz,ARM9系列微处理最高可以达到700MHz。不同对时钟的处理不同,有的只需要一个主时钟频率,有的大多数的ARM微处理器片内器的容量都不太大,需要用户在设计系统时外扩器,但除ARM微处理器核以外,几乎所有的ARM均根据各自不同的应用领域,扩展了相关功盘接口、RTC、ADCDAC、DSP协处理器等,设计者应分析系统的需求,尽可能采用片内读,能对ARM微处理器、ARM技术有一个总体上的认识。2ARM 图2.1以大端格式字数图2.2以小端格式字数 运行具有的操作系统任务除用户模式以外,其余的所有6种模式称之为非用户模式,或模式(PrivilegedModes);其中除去用户模式和系统模式以外的5种又称为异常模式(ExceptionModes),常用于处理中断或R14(SubrutineLikRegster)LRBL,R14R1(PCR1R14svc、R14_rq、R1_fiq、R4_abt和14_und用来保存R1 寄存器R15(PCARM1:0]01:PCTumb0]为0[31:1C;R15ARMC的和10Thmb状态下,PC的位是0。下两条指令的地址,即PC的值为当前指令的地址值加8个字节。2.3ARM用户模式(模式)下,则可到特定模式分组寄存器,图2.3说明在每一种运行模式下,哪寄存器 每一种运行模式下又都有一个的物理状态寄存器,称为SPSR(SavedProgramStatus2.4Thumb2.5ThumbTHUMB状态下的寄存器(Hi-2.6程序状态寄存器格式条件码标志(ConditionCode表2- NZC加法运算(包括比较指令CMN):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1VQ在其他版本的处理器中,Q标志位无定义。 表2- 可的寄存IRQPC,CPSR(ARMv4及以上版本)2-3ARMR14_<Exception_Mode>=ReturnLinkSPSR_<Exception_Mode>=CPSRCPSR[4:0]=ExceptionModeCPSR[5 If<Exception_Mode>==ResetorFIQCPSR[6]=CPSR[7]=PC=ExceptionVector2、将SPSR回CPSR中FIQ(FastInterruptSUBSPC,R14_fiq该指令将寄存器R14_fiq的值减去4后,到程序计数器PC中,从而实现从异常处理程序中的返回,同时将SPSR_mode寄存器的内容到当前程序状态寄存器CPSR中。IRQ(InterruptSUBSPC,R14_irq,该指令将寄存器R14_irq的值减去4后,到程序计数器PC中,从而实现从异常处理程序中的返回,同时将SPSR_mode寄存器的内容到当前程序状态寄存器CPSR中。ABORT当指令预取器失败时,器系统向ARM处理器发出器中止(Abort)信号,预取SUBSPC,R14_abt SUBSPC,R14_abt SoftwareInterruuptMOVPC,MOVSPC,2-4异常进入/ARMThumbMOV1MOVS1MOVS1SUBS2SUBS2SUBS1SUBS3——42-5表2- 异1(最高23456(最低ARMPC会被强制设置为对应ARM微处理器的体系结构、寄存器的组织、处理器的工作状态、运行模式以及处理器3ARM望读者能了解ARM微处理器所支持的指令集及具体的使用方法。加载/指令、协处理器指令和异常产生指令六大类,具体的指令及功能如表3-1所示(表中指令 B位指表3- ZZCCNNVVC置位ZCZ置N等于N不等于Z且(N等于Z置位或(N不等于ADD ADD ADD ADD LDR STR 加,结果存入寄存器R0中。第三条指令将R0的值传送到以R1的值为地址的器中。LDR LDR LDRR0,[R1 LDR 存器R0中。存器R0中,然后,R1的内容自增4个字节。操作数存入寄存器R0中。令完成传送最多16个通用寄存器的值。以下指令:LDMIA 单元的值传送到R1~R4。与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为址,指令中的地址标转指令BL采用了相对寻址方式:BL MOV 堆栈是一种数据结构,按先进后出(FirstInLastOut,FILO)的方式工作,使用一个称作堆栈将要放入数据的空位置时,称为空堆栈(EmptyStack)。同时,根据堆栈的生成方式,又可以分为递增堆栈(AscendingStack)和递减堆栈(Decending递减堆栈。这样就有四种类型的堆栈工作方式,ARM微处理器支持这四种类型的堆栈工作方式,MOVARM32MB的地址空间的跳转,包括以下4条指令: BLBXB{条件}目标地址那里继续执行。注意在跳转指令中的实际值是相对当前PC值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算(参考寻址方式中的相对寻址)。它是24位有符号数,左移两位后有符号扩展为32位,表示的有效偏移为2632MB的地址空间)。以下指令:BBL指令的格式为:BL{R14PCBLLabelLabelPCR14BLX目标地址子程序的返回可以通过将寄存器R14值到PC中来完成BX{中,同时更新CPSR中的相应条件标志位。MVNCMPTSTADDSUBANDORRBICMOV指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中S ;将寄存器R0的值左移3位后传送到R1指令不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的寄存器中。其中SCPSRSCPSR CMPCMPCPSR 指令的格式为:指令用于 TST 指令的格式为:CPSR12 作数2可以是一个寄存器,被移位的寄存器,或一个立即数。 ;R0=R1+ ;R0=R1+ ;R0=R2+(R3<<存器中。它使用一个进位标志位,这样就可以做比32位大的数的加法,注意记设置S后缀高到低存放在寄存器R11~R8,运算结果由高到低存放在寄存器R3~R0:ADDS ;加的ADCS ADCS ;加第,带进 ;R0=R1- ;R0=R1- ;R0=R2-(R3<<立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意记设置SSUBS R0R1R2!CCPSRRSB21,并将结果存放到目的寄存器中。操;R0R2–;R0256–;R0(R3<<1)-立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意记设置S ;R0=R2–R1-1的某些位。 2232位的掩码,如果在 R00、13对操作数使用立即数或被移位的寄存器,同时,目的寄存器和操作数1必须是不同的寄存器。 ;R0=R1×MULS 数2均为32位的有符号数或无符号数。 ;R0=R1×R2+MLAS ;R0R1R2R3CPSR目的寄存器志位。其中,操作数1和操作数2均为32位的有符号数。 ;R0(R2R3)32;R1(R2R3)32目的寄存器数2均为32位的有符号数。 ;R0(R2R3)32;R1(R2R3)32目的寄存器志位。其中,操作数1和操作数2均为32位的无符号数。 ;R0(R2R3)32;R1(R2R3)32目的寄存器数2均为32位的无符号数。 ;R0(R2R3)32;R1(R2R3)32ARM微处理器支持程序状态寄存器指令,用于在程序状态寄存器和通用寄存器之间传送MRS{条件 MRS将程序状态寄存器的内容读入通用寄存 MSR{条件 位[23:16]为状态位域,用s表示;ARM微处理器支持加载/指令用于在寄存器和器之间传送数据,加载指令用于将 指指令从器中的字数据被当作目的地址,从而可以实现程序流程的跳转。该指令在程序设计 ;将器地址为R1的字数据读入寄存器R0。 器地址为R1+8的字数据读入寄存器R0。 R2写入R1。 址R1+R2×4写入R1。 R2×4写入R1。LDR{条件}B目的寄存器,<器地址LDRB指令用于从器中将一个8位的字节数据传送到目的寄存器中,同时将寄存器的高24程序计数器PC作为目的寄存器时,指令从器中的字数据被当作目的地址,从而可以实现LDRB LDRB LDR{条件}H目的寄存器,<器地址位。该指令通常用于从器中16位的半字数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从器中的字数据被当作目的地址,从而可以实LDRHR0,[R1];将器地址为R1的半字数据读入寄存器R0,并将R0的高16位。LDRHR0,[R1,#8]将器地址为R1+8的半字数据读入寄存器R0,并将R0的高16位。LDRHR0,[R1,R2];将器地址为R1+R2的半字数据读入寄存器R0,并将R0的高16位清STR{条件}源寄存器,<器地址且寻址方式灵活多样,使用方式可参考指令LDR。 ;将R0中的字数据写入以R1+8为地址的器中。STR{条件}B源寄存器,<器地址低8位。STRB STRB STR{条件}H源寄存器,<器地址低16位。STRH STRH ARM微处理器所支持批量数据加载/指令可以一次在一片连续的器单元和多个寄存器 批量数据加载指令 批量数据指令LDM(或STM)指令用于从由基址寄存器所指示的一片连续器到寄存器列表所指示的多个寄IA每次传送后地址加1;IB每次传送前地址加1;DA每次传送后地址减1;DB每次传送前地址减1;FD满递减堆栈;ED空递减堆栈;FA满递增堆栈;EA空递增堆栈;STMFDR13!,{R0,R4- LDMFDR13!,{R0,R4- ARM微处理器所支持数据交换指令能在器和寄存器之间交换数据。数据交换指令有如下 送到R2所指向的单元。 SWPBR0,R1,[R2] 同时将R1中的低8位数据传送到R2所指向的单元。SWPBR0,R0,[R1] ARM(BarrelShifter),支持数据的各种移位操作,移位操作在种移位操作。移位操作包括如下6种类型,ASLLSL是等价的,可以自由互换: 或31) R0,R1, 通用寄存器,LSR R0,R1, 通用寄存器,ASR31位的值来填充。其中,操作数可以是通用寄存器,也可以是立即数(0~31)。 R0,R1, 通用寄存器,ROR当进行32位的循环右移操作时,通用寄存器中的值不改变。 R0,R1, 通用寄存器,RRX R0,R1, 协处理器只执行针对自身的协处理指令,忽略ARM处理器和其他协处理器的指令。ARMARMARM协处理器的数据处理操作,以及在间传送数据。ARM协处理器指令包括以下5条: 协处理器数操作指令 MRC协处理器寄存器到ARM器操作码2。作,目的寄存器和源寄存器均为协处理器的寄存器,指令不涉及ARM处理器的寄存器和器。 完成传送操作,则产生未定义指令异常。其中,{L}选项表示指令为长操作,如用于双精度数 器P3的寄存器C4中。完成传送操作,则产生未定义指令异常。其中,{L}选项表示指令为长操作,如用于双精度数 理器操作码2。ARM12 存器C4和C5中。器操作码2。ARM12 理程序中提供相应的系统服务,指令中24位的立即数指定用户程序调用系统例程的类型,相关用寄存器R0的内容决定,同时,参数通过其他通用寄存器传递。 16Thumb指令集。ThumbARM指令集的一个子集,允许指1632位代码相比较,Thumb32代码优势的同时,大在应用程序的编写过程中,只要遵循一定调用的规则,ThumbARM子程序就可以互相调程序段时,称ARM处理器处于Thumb工作状态。Thumb16ARM指令一半的位数来实现同样的功能,所以,要ARM指令的时间效率和空间效率关系为:ARM指令集中的基本指令,以及各指令的应用场合及方法,由基本指令还较,ARM指令系统无论是从指令集本身,还是从寻址方式上,都相对复杂一些。ThumbARMARM指令集类似,在此未作详细4ARMARMC/C++语言的程序设计,以及两者的混合编程。言的程序结构等,同时介绍C/C++和汇编语言的混合编程等问题。ARM汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没ARM的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪GBLA(GBLLGBLS)全局变量名GBLA伪指令用于定义一个全局的数字变量,并初始化为0;GBLS伪指令用于定义一个全局的字符串变量,并初始化为空; LCLA(LCLLLCLS)LCLA伪指令用于定义一个局部的数字变量,并初始化为0;LCLS伪指令用于定义一个局部的字符串变量,并初始化为空; 变量 SETA(SETL或 表达SETA伪指令用于给一个数学变量赋值;SETL伪指令用于给一个逻辑变量赋值;SETS伪指令用于给一个字符串变量赋值; 4名称RLIST{寄存器列表RLISTARM指RegListRLIST DCD(DCDU)用于分配一片连续的字单元并用指定的数据初始化DCQ(DCQU)用于分配一片以8字节为单位的连续的单元并用指定的数据初始 1标 式可以为0~255的数字或字符串。DCB也可用“=”代替。2DCW(标 表达 1,2,3;分配一片连续的半字单元并初始化3DCD(标 表达其中,表达式可以为程序标号或数字表达式。DCD也可用“&”代替。 4,5,6;分配一片连续的字单元并初始化4DCFD(标 DCFD(或DCFDU)表达 5DCFS(标 DCFS(或DCFSU)表达DCFS(或DCFSU)伪指令用于为单精度的浮点数分配一片连续的字单元并用伪指令中指 2E5,-5E-7;分配一片连续的字单元并初始化为指定的单精6DCQ(标 表达 7标 SPACE表达SPACE也可用“%”代替。 8 9标 表达FIELD伪指令用于定义一个结构化内存表中的数据域。FILED也可用“#”代替。FIELDMAP伪指令配合使用来定义结构化的内存表。MAP伪指令定义内存表的首。ABS 1IF、ELSE、ENDIFIF后面的逻时,当IF后面的逻辑表达式为真,则执行指令序列1,否则继续执行后面的指令。IF、ELSE、ENDIF伪指令可以嵌套使用。GBLL Test=2WHILE、 WHILE、WENDWHILE后WHILE、WEND伪指令可以嵌套使用。GBLA WHILECounter<3MACRO、 MACRO、MEND伪指令可以将一段代码定义为一个整体,称为宏指令,然后就可以在程序中包含在MACRO和MEND之间的指令序列称为宏定义体,在宏定义体的第一行应宏的原41 AREA伪指令用于定义一个代码段或数据段。其中,若以数字开头,则该需用“|”括ALIGNALIGN表达式。在默认时,ELF(可执行连接文件)的代码段COMMON属性:该属性定义一个通用的段,不包含任何的用户代码和数据。各源文件中同名的COMMON段共享同一段单元。AREA2 21、2、4、8、16等。若未指定表达式,则将当前为:2的表达式次幂+偏移量。AREAInit,CODE,READONLY,ALIEN=38字节对齐。AREA

LDR 4可以有多个,当有多个ENTRY时,程序的真正点由器指定),但在一个源文件里最多只能有一个ENTRY(可以没有)。AREA 5END伪指令用于通知编译器已经到了源程序的结尾。AREA 6名 中EQU可用“*”代替。 EQU EQU 7EXPORT( 标号EXPORT伪指令用于在程序中一个全局的标号,该标号可在其他的文件中。EXPORT。AREA ;一个可全局的标号8 标号IMPORT伪指令用于通知编译器要使用的标号在其他的源文件中定义,但要在当前源文件中引指令置为NOP操作。AREA ;通知编译器当前文件要标号Main,但Main在其他源文件中9 EXTERN伪指令用于通知编译器要使用的标号在其他的源文件中定义,但要在当前源文件中引指令置为NOP操作。AREA ;通知编译器当前文件要标号Main,但Main在其他源10 GET(或 GET伪指令用于将一个源文件包含到当前的源文件中,并将被包含的源文件在当前位置进行汇编处理。可以使用INCLUDE代替GET。FIELDGET伪指令将这个源文件包含到其他的源文件中。使用方法与C语言中的“include”相似。GETINCBIN伪指令AREA ;通知编译器当前源文件包含源文件 ;通知编译器当前源文件包含源文件C:\11 AREA ;通知编译器当前源文件包含文件a1.dat ;通知编译器当前源文件包含文件C:\a2.txt12 名 表达RN伪指令用于给一个寄存器定义一个别名。采用这种方式可以方便程序员该寄存器的功 ;将R013 ROUT伪指令用于给一个局部变量定义作用范围。在程序中未使用该伪指令时,局部变量的作AREAROUTROUTROUT之 2、程序中的常量;定义局部字符串变量S1和“Thisisa;字符串变量S2Thisisa X:ROL:Y表示将X循环左移Y位。X:ROR:Y表示将X循环右移Y位。X:SHL:Y表示将X左移Y位。X: 表示将X右移Y位。X:AND:YXY “=”、“>”、“<”、“>=”、“<=”、“/=<>X X X X X X X 大长度为512字节。常用的与字符串表达式相关的运算符如下:STR运算符将将一个数字表达式或逻辑表达式转换为一个字符串。对于数字表达式,STR运算AREAInit,CODE,READONLY

LR中,同时将程序计数器PC指向子程序的点,当子程序执行完毕需要返回调用处时,只需要将存放在LR中的返PC即可。在调用子程序的同时,也可以完成参数的传递和从子程序返回运算的结果,通常可以使用寄存器R0~R3完成。AREAInit,CODE,READONLY ;Instituteof Academyof ThisexampleshowstheUART EQU0x3FFD000UARTCONT0EQU0x3FFD004UARTSTAT0EQU0x3FFD008UTXBUF0EQU0x3FFD00CUARTBRD0EQU0x3FFD014AREAInit,CODE,READONLY;LEDDisLDRR1,=0x3FF5000LDRR0,=&ffSTRLDRR1,=0x3FF5008LDRR0,=&ffSTR;UART0linecontrolLDRR1,=UARTLCON0LDRR0,=0x03STRR0,[R1];UART0controlLDRR1,=UARTCONT0LDRR0,=0x9STR;UART0baudratedivisorLDRR1,=UARTBRD0LDRR0,=0x500STRR0,[R1];PrinttheLDRBLPrintLineLDRBLPrintLineLDRBLPrintLineLDRBLPrintLineLDRR1,=0x7FFFFF BNELOOP1 ;PrintMOVR4,LRMOV

ANDR0,R1,#&FFTSTR0,#&FF BLPutByte LDRR3,=UARTSTAT0LDRR2,[R3]TSTBEQPutByteLDRR3,=UTXBUF0STRR0,[R3]MOVPC,LR DCB&A,&D," AcademyofSciences,Instituteof DCB&A,&D," ARMDevelopmentBoardBasedonSamsungARMS3C4510B.",0 都用C/C++完成。C/C++完成主要的编程任务,程序在执行时首先完成初始化过C/CC/C++程序之间一般没有参数的传递,也没有;Instituteof Academyof;File IMPORTMain LDR LDRR1,=0xE7FFFF80STRR1,[R0]LDR BL Instituteof AcademyofFile P0,P1LED voidMain(void){int*((volatileunsignedlong*)0x3ff5000)= {*((volatileunsignedlong*)0x3ff5008)=;for(i=0;i<0x7fFFF;*((volatileunsignedlong*)0x3ff5008)=;for(i=0;i<0x7FFFF;}}C/C++和汇编语言的混合编S3C4510B的硬件平台有关系,读者可以参考第五、六章的相关内容。5S3C4510BARM本章以微芯力科技( )设计生产的ARMLinux评估开发板为原型,详细分析系统的软、硬件设计步骤、实现细节以及调试技巧等。ARMLinux评估开发板的设 图 ARMLinux评估开发板的结构框S3C4510B在进行系统设计之前,有必要对ARMLinux评估开发板上的ARMS3C4510B及其工作原理图8KHDLC(High-LevelDataLinkControl)数据链路协不受CPU干预5.2.2S3C4510B信 IS3C4510B如果CLKSEN为低电平,通PLLS3C4510B的内部系统时OI时钟选择。如果CLKSEL为低电平,PLL输出时钟作II低电平IIIIOIO组、FLASH器组、DRAM组和外部I/O组的位,16位,32OOSDRAM的行地址锁存信号,nSDCAS作为SDRAMOO外部I/O4个外部I/O提供每一个外部I/OII/O设备时,OI=字(32位);‘00’=OOIOO管理数据输入/输出。当执行一个读数据令时,III在TX_CLK的上升沿采样TXD[3:0]和TX_EN。在发送数据时,TXCLK_10M由10M的PHY产生。OOOIIIII9O7I6O8OIIOIOIOOIIOII钟,通常由系统时钟提供UART时钟输入。IOIO他主机),UART0已准备好发送或接收数据。I4O3I5O185-通用I/O191-外部中断请求信号,或作为通用I/O外部DAMI/O外部DAMI/OPLLInstructionSetComputer)系统相比较,RISC架构的指令集和相关的译码电路更简洁高效。条获得32位性能的途径。 器为通用寄存器,可用于存放地址或数据值。另外一个(17)寄存器是当前程序状态寄存器Thumb状态寄存器集是ARM状态寄存器集的一个子集。可以的寄存器有:8个通用寄寄存器SPSR。 1(最高数据中止(Data23IRQ45未定义指令(Undefined6(最低6(最低 外部I/O外部I/O刷新与外部I/O器写CAM内容(32字BDMATx缓冲测试模式地址(64字)BDMARx缓冲测试模式地址(64字)TT读T读读A_读_读HDLCRxFIFO寄器写0B写写_读HDLCRxFIFO寄器读读读0DMA0I/O中断寄存读读读读器01读读写写读读S3C4510B微处理器的系统管理器(SystemManager)在整个系统工作中起至关重要作用,只为外部器提供必需的器控制信号。例如DMA控制器或CPU要DRAM信号。可由SYSCFG[31]设定normal/EDO或SDRAM的信号。通过产生外部总线请求信号,外设可S3C4510B的外部总线。另外,S3C4510B可通过插系统管理器寄存器(SystemManager 功能寄存器的值来控制其产生和处理。特殊功能寄存器也被用于控制对ROM/SRAM/Flash组的访DRAMI/O组以及一个特殊功能寄存器映射区域的访针本身为10位。因此S3C4510B的最大可寻址范围是226=64MB(16M字)。在进行系统器映射时,注意两个相连的器组的地址空间决不能。图5.2.45.2.4S3C4510B系 器映射(SystemMemory

S3C4510B采用统一编址的方式,将系统的片外器、片内器、特殊功能寄存器和外部的I/O设备,都映射到64MB的地址空间,同时,为便于管理,又将地址空间分为如图5.2.4所示的若干个器组,可以通过配置包含基指针(BasePointer)和尾指针(EndPointer)的特殊 四个外部I/O组被定义在续的地址空间中。只需要将基指针分配给外部址+48KBI/O0的起始地址+64KB的I/O组的起始地址并没有被固定。通过设定组的基指针,可以设定一个具体的组起始地址,但总的地址空间是连续的64KB。,1”(ROM/SRAM/Flash组0和特殊功能寄存器组除外)都被。这意味着:除ROM/SRAM/FlashROM/SRAM/Flash00x2000x0。这意味着系统复位后将自动定义ROM/SRAM/Flash组0的地址空间为32MB,实际地址范围为0x0000,0000~权交给了由用户编写的启动代码,当然这些启动代码应存放在外部ROM中的,并映射到图5.2.5是在系统启动或复位时的系统器映射。图 系统复位时的器映5-2-4 外部I/O外部I/O器刷新与外部I/O根据外部器的宽度决定外部地址译码方法(ExternalAddressTranslationMethodDependsontheWidthofExternalMemory)324GB的线性寻址空间,当发基于以上原因,某些ARM系统在与器接口时,地址总线的连接需要错开,而S3C4510B则通S3C4510B的地址总线和图5.2.6说明了该过程。5-2-5可的空816324M5.2.6地址总总线仲裁(Bus

S3C4510B在系统设计时,任一时刻只允许一个部件占用总线,因此,当有两个或两个以上的片内为便于总线仲裁,S3C4510B内部的每一个功能模块都设置了优先级,总线控制器就根据这个块。表5-2-6列出了优先级。5-2-6GeneralGeneral数据链路控制器B(HDLC数据链路控制器A(HDLC注:S3C4510B的内部功能模块分为A、B外部总线控制(ExternalBusS3C4510B微处理器能检测并响应由外部总线主控器产生的总线请求信号(ExtMREQs)。当CPU发出外部总线应答信号(ExtMACK)后,总线控制权就交给外部总线主控器,此时外部总线当S3C4510B的外部总线应答信号有效时,其器接口处于高阻状态,以便外部总线主控器得总线控制权且会持续一段较长的时间,必须负责完成DRAM的刷新操作。控制寄存器(Control系统配置寄存器(SystemConfiguration地址空间固定为64KB,可参考图5.2.4。00=4KBSRAM,4KBCache01=0KBSRAM,8KB10=8KBSRAM,0KB11该设置值左移16位即为特殊功能寄存器组的起始物理地址。[30:26]产品号(PD_ID)00001=S3C4510X(KS32C50100)起始地址设置(StartAddress0x3FF0000,用户例如,系统复位时特殊功能寄存器组的起始地址初始化为0x3FF0000,特殊功能寄存器ROMCON的偏移地址为0x3014,因此,ROMCON的物理地址是: Cache/使能(Cache用户在使能Cache时必须验证数据的一致性。片内8KB的SRAM可以通过设置SYSCFG[54]用作Cache,如果备将8KB全部用作Cache,也可将余下的空间作为片内的SRAM,其起始地址由片内SRAM的基指针设定。写缓冲/允许(WriteBuffer首先将数据写入写缓冲器,而不直接写入外部的器。4个写缓冲寄存器可以增强ARM7TDMIMUX总线控制寄存器(SystemclockandMUXBusControl时钟控制寄存器(ClockControl统的工作频率,该寄存器具体定义与设置,请参考S3C4510B用户手册。系统时钟(SystemCLKSELPLL时钟,只需要10MHz的外部时钟。.7外部I/O控制寄存器(ExternalI/OAccessControl设置,请参考S3C4510B用户手册。数据总线宽度寄存器(DataBusWidth0001(810(1611(32[5:4]DSR2,[7:6]DSR3,[9:8]DSR4,[11:10]====[13:12]DRAM组0的数据总线宽度(DSD0)[15:14]DSD1,[17:16]DSD2,[19:18]DSD300=01(810(1611(32[23:22]DSX1,[25:24]DSX2,[27:26]DSX300=01(810(1611(32持的6个ROM/SRAM/FLASH组。B0SIZE[1:0]=“01ROM/SRAM/FLASH080O/RMFA1O/RMLS 00=普通 01=4字/10=8字/ 11=16字/00=5个周 01=2个周10=3个周 11=4个周000=该组禁 001=2个周010=3个周 011=4个周110=7个周 111=保DRAM(DRAMControl4DRAMREFEXTCONI/O0DRAM(SDRAM1,DRAMSDRAM0DRAMEDO/FPDRAM。DRAM及外部I/O 刷新与外部I/O1=EDO00=1个周 01=2个周10=3个周 11=4个周0=1个周 1=2个周0=1个周 1=2个周00=1个周 01=2个周10=3个周 11=4个周00=8 01=910=10 11=11DRAM(DRAMInterface(REETON支持同步或异步DRAM。SDRAM(SynchronousDRAMAccesses)及DRAMDRAMBank寄存器(DRAMCON0~DRAMCON3)设置DRAM周期和器组在地址空间中的位置。系统初始化值(SystemInitializationValues) 时序及刷新间隔。REFEXTCON10I/O0的基指针值。值左移16位+16KB-1。0=器组不1=器组0=DRAM刷1DRAM000=1个周 001=2个周010=3个周 011=4个周100=5个周 101=未110=未 111=未01 2个周期(211S3C4510B的系统管理器及相关特殊功能寄存器的简单介绍,这些内容将会在程序设存器未做介绍,请读者自行参考S3C4510B用户手册。S3C4510BARM致性和常见电路的通用性,只要读者能真正理解本部分的设计方法,从而设计出基于其他ARMS3C4510B208QFP8位/16DIP封装微控制器S3C4510B引脚较多,但根据各自的功能,分布很HDLC、UART、IIC、MAC等的接口,真正需要仔细研究的引脚数就不是很多了,但这些的连接不会对S3C4510B自身的运行有太大的影响。LITTLE(Pin49):大、小端模式选择引脚。高电平=小端模式;低电平=大端模式;该引际系统中,一般应使用PLL电路,因此,该电容应连接。TCK、TMS、TDI、TDO、nTRST(Pin58~Pin62):JTAGIEEE标准,TCK应下拉,TMS、TDInTRST应上拉。S3C4510BJTAG插座直接相连即可,但某些ARM并未做相应的处理,在设计电路时应注意。TMODE(Pin63):测试模式。高电平=测试模式;低电平=正常工作模式;用户一般不=CLKOEN(Pin76):时钟输出允许/。高电平=允许;低电平=。一些器件(CLKSEL(Pin83):时钟选择。XCLKXCLKS3C4510B的其余引脚为电源线、接地线、数据总线、地址总线以及其他功能模块地输入/输出线,对CPU自身地运行地影响相对较小,其连接方式也比较简单,在此不作详述。5V电源,为简化系统电源电路的设计,要求整个系统的输入电压为高质量的5V的直流稳压电源。系统电源电路如下图所示:图 5.3.2系统的晶振电路S3C4510BPLL10MHz的有源晶振,10MHz15V电源,2脚悬空,3脚接地,4脚为晶振的输出,可通过一个小电阻(此处为22欧姆)接S3C4510BXCLK引脚。可由简单的RC电路构成,也可使用其他的相对较复杂,但功能更完善的电路。5.3.3系统的复位电路电平的门限电压时,Reset端输出为高电平,系统进入正常工作状态。S1时,C1两端的电荷被泻放掉,Reset端输出为低电平,系统进入复位状态,两级非门电路用于按钮去抖动和波形整形;nResetReset端相反,以用于高电平复位的器件;通过调整R1和C1的参数,可调整复位状态的时间。Flash器是一种可在系统(In-System)进行电擦写,掉电后信息不丢失的器。它具有Flash8163.3VATMEL、AMD、HYUNDAI等,他们生产的同型器件一般具有相同的电气特性和封装形式,可通用。5.3.4HY29LV160入标准令序列,可对Flash进行编程(烧写)、整片擦除、按扇区擦除以及其他操作。5.3.5HY29LV160(TSOP48 I数据总线。816位的数据宽度。在字节模II必须为低电平,当为高电平时,处于高阻旁路状态IIIO3.3V位/32位的器系统,对应的可以构建8位的Flash器系统、16位的Flash器系统或32方面占有优势,而8位的器系统现在已经很少使用。在此,分别介绍16位和32位的Flash存图5.3.6为16位Flash器系统的实际应用电路图器系统,其容量为2MB。Flash器在系统中通常用于存放程序代码,系统上电或复位后从此即将S3C4510BnRCS<0>(Pin75)接至HY29LV160CE#端。HY29LV160的RESET#端接系统复位信号;OES3C4510BnOE(Pin72);

16位 图5.3.7为32位Flash器系统的实际应用电路图32S3C4510B32系统。其构建方式与16位的Flash器系统相似nRCS<0>(Pin75)接至两片HY29LV16的CE#端;HY29LV160[A19~A0S3C4510B的地址总线[ADDR19~ADDR0]相连;图 SDRAM具有单位空间容量大和价格便宜的优点,已广泛应用在各种嵌入式系统中。SDRAM的单元可以理解为一个电容,总是倾向于放电,为避免数据丢失,必须定时刷新(充SDRAM8位/16位的数据宽度,工作电压一般为3.3V。主要的生产厂商为HYUNDAI、Winbond等。他们生产的同型器件一般具有相同的电气特性和封装形式,可通用。兼容LVTTL接口,支持自动刷新(Auto-Refresh)和自刷新(Self-Refresh),16位数据宽度。5-3-2HY57V641620 或使能除CLK、CKEDQM数据I/O电源/电源/图 根据系统需求,可构建16位或32位的SDRAM器系统,但为充分发挥32位CPU的数据图5.3.9为32位SDRAM器系统的实际应用电路图图5.3.932位SDRAM器系统的实际应用电路HY57V641620DRAM/SDRAMBank0~DRAM/SDRAMBank3DRAM/SDRAMBank0S3C4510B的nSDCS<0>(Pin89)接至两片HY57V641620的/CS端。HY57V641620CLKS3C4510BSDCLK端(Pin77);HY57V641620CLES3C4510BCLE端(Pin97);HY57V641620A11~A0S3C4510B的地址总线ADDR<11>~ADDR<0>;16位片的DQ15~DQ0S3C4510B的数据总线的低16XDATA<15>~XDATA<0>;LDQM分别接S3C4510B的nWEB<1>、nWEB<0>。 线和MODEM进 线和MODEM,而直接进行端到端的连接。义如表5-3-3所示:5-3-39芯D名12345地6789RXD、TXDGNDRS-232-C标S3C4510BLVTTL电路所定义的高、低电平信号完全不同,准采用负逻辑方式,标准逻辑“1”对应-5V~-15V电平,标准逻辑“0”对应+5V~+15V电平,显分布如图5.3.10。图 MAX232引脚分图5.3.11为MAX232的常见应用电路图。图图 MAX232应用电路5.3.11MAX232器、LCD驱动器还是键盘接口。带有IIC总线接口的器件可十分方便地用来将一个或多个微控制器及器件构成系统。尽管这种总线结构没有并行总线那样大的吞吐能力,但由于连接线和连图 JTAG(JointTestActionGroup,联合测试行动小组)是一种国际标准测试协议,主要用于内部测试及对系统进行仿真、调试,JTAG技术是一种嵌入式调试技术,它在内部封装了专门的JTAGARM、DSP、FPGAJTAG接口4线:TMS、TCK、TDI、TDO,分别为测试模式选择、测试时钟、测试数据输入和测试数据输JTAGJTAGJTAG链,能实现对各个器件分别测试。JTAGISP(In-SystemProgrble在系统编程)FLASH通过JTAG接口,可对内部的所有部件进行,因而是开发调试嵌入式系统的一种简洁14针JTAG接口定义:5-3-414JTAG引名 1、35795-3-520JTAG引名 123、57917、S3C4510B的系统若没有以太网接口,其应用价值就会大打MAC控制器和物理层接口(PhysicalLayer,PHY)两大部分构成,目前常见的以太网接口,如RTL8019、RTL8029、RTL8039、CS8900、DM9008等,其S3C4510B内嵌一个以太网控制器,支持独立接口(MediaIndependentInterface,MII)和MAC控制层协议。10M/100MbpsRTL8201、DM9161等,均提供MII7S3C4510B接口。以太网物理层接口器件主要功能一般包括:物理编码子层、物理附件、双绞线物理子层、10BASE-TX编码/器和双绞线RTL82015.3.14RTL8201的引脚分布,表6-3-6相关引脚功能描述,表中仅列出在100MbpsMII接口方式下的引脚定义,当工作于7线制网络接口方式,部分引脚定义不同。更具体的内容和使用方法可参考RTL8201的用户手册。图图 RTL8201引脚分5.3.14RTL82015-3-6RTL8201O7I2发送使能:该引脚指示目前TXD[3:0]4I发送数据:当TXEN有效时,MAC随TXCO接收时钟:该引脚提供连续时钟信号作为RXD[3:0]和10Mbps2.5MHzO1载波侦听:在非IDELO接收数据有效:当接收RXD[3:0]上的数据时,该引脚置高OOI可能与TXC和RXC时钟异步。该时钟信号最高可达OIOOII该引脚置高将RTL8201与MAC和MDC/MDIO管理接口隔I该引脚置高将RTL8201设为转发器工作模式。在测试模式I该引脚置高RTL8201100MbpsIII该引脚置高RTL8201进入未连接省电(LDPS)I该引脚置高RTL8201MIIO9连接LEDO全双工LEDO10M连接/应答LEDO100M连接/应答LEDOOIPPPPP图 RTL8201S3C4510B5.3.15RTL8201地实际应S3C4510B的MAC控制器可通过MDC/MDIO31个RTL8201,每个RTL820113,15S3C4510BPHY00000B,否则RTL8201进入掉电模式为减少的引脚数,RTL8201的LED引脚同时复用为PHY的地址引脚,因此引脚9,10,在图5.3.15中,信号地发送和接收端应通过网络变压器和RJ45接口接入传输,其实际应用电路见图5.3.17。图 图 RTL8201与网络变压器及RJ45的连接通用I/OS3C4510B18I/O端口,用户可将每个端口配置为输入模式、输出模式或特殊功能模式,由片内的特殊功能寄存器控制。在该系统的设计中,P3~P04LED显示器,程序流程或其他输入功能,其应用电路如图图5.3.18。5.3S3C4510BS3C4510B以各单元电路为单位,一个个焊接调试,以便在调试过程中遇到时缩小故障范围,在系统上电以正常工作,此时电源电路的输出因为DC3.3V。RESET端在未按按钮时输出应为高电平(3.3V),按下按钮后变为低电平,按钮JTAGS3C4510B,JTAGTMS、TCK、TDI、TDOS3C4510B的对应S3C4510B对应引脚的输出波形,判断是否已正常工作,若S3C4510BPLL电路的情况下,SDCLK/MCLKO引脚(Pin77)应输出频率为50MHz的波形,同时,MDC引脚(Pin50)和其他一些引脚也应有波形输出。S3C4510BADSSDTJTAG接口对片内的部件进ADS和SDT均为ARM公司为方便用户在ARM上进行应用开发而推出的一整套集成开发图5.4.1为调试系统的硬件连接。并行 JTAG接5.4.1调试系统的硬件连接Debugger有软件仿真方式和带目标系统的调试方式,此时应工作在带目标系统的调试方式。SystemViews→CommandLineInterfaceAXDDebugger的一个命令行>setmem0x3FF5000,0xFFFF,>setmem0x3FF5008,0xFFFF,setmem8位、1632位,在此,对通用I/O口的模式寄存器和数据寄存器设置相应的值,点亮LED。0xFFFFI/O口置为输出方式。I/O0x3FF5008,设定该寄存器的值为0xFFFF,将I/O口的输出置为高电平。Debug:let0x3FF5000=Debug:let0x3FF5008=在系统的两类器中,SDRAM相对于FLASH器控制信号较多,似乎调试应该一些,但由于SDRAM的所有刷新及控制信号均由S3C4510B片内的专门部件控制,无需用户干预,在再进行Flash器系统的调试。功能寄存器ROMCON0~ROMCON5控制;DRAM/SDRAM0~DRAM/SDRAM3DRAMSDRAM,分别由特殊功能寄存器DRAMCON0~DRAMCON3控制;I/O0~I/O3特殊功能寄存器组用于配置S3C4510B片内特殊功能寄存器的址以及片内的8KSRAM,由特殊功能寄存器SYSCFG控制;参照表5-2-4和5.2.4节对应特殊功能寄存器的相关描述可知,当系统复位时,只有址被映射到0x03FF,0000,片内8KSRAM的起始地址被映射到0x03FE,0000,它们是可访5-4-1SYSCFG0xE7FF,FF82EXTDBWTH0x0000,3000ROMCON00x0200,0060DRAMCON00x1401,0380DRAMCON00xCE33,83FDsetmemsetmem setmem setmem0x3FF302C,0x setmem0x3FF303C,0xCE3383FD,32>obey0x0000,0000~(0x0020,0000-1)0x0040,0000~(0x0140,0000-1)选择菜单ProcessorViews→Memory选项,出现器窗口,在器起始地址栏输入SDRAM双击其中的任一数据,输入新的值,如输入0xAA,若对应的单元能正确显示刚才输入的数据,则表明SDRAM器已能正常工作。在C:\下建立文本文件memmap.txt,其内容为:let0x3FF0000=let0x3FF3010=0xlet0x3FF3014=0xlet0x3FF302C=let0x3FF303C=>obey此时,Flash器和SDRAM已分别映射到地址空间的0x0000,0000~(0x0020,0000-1)和选择菜单View→Memory选项,出现器的起始地址输入窗口,在此输入SDRAM的映射起始Flash器的调试主要包括Flash器的编程(烧写)和擦除,与一般的器件不同,用户只需对Flash器发出相应令序列,Flash器通过内部嵌入的算法即可完成对>obey此时,2MB的Flash器映射到地址空间的0x0000,0000~0x001F,FFFF处,选择菜单ProcessorViews→Memory选项,出现器窗口,在器起始地址栏输入Flash器的映射要编程验证,通过程序对Flash器进行编程和擦除操作,放在下一章的内容里说明。MAC控制器和物理层接口(PhysicalLayer,PHY)两大部分构成,而控制器的工作原理相对复杂,相应的特殊功能寄存器也比较多,在此不作详述,对此有的读者可参考已移植到S3C4510BuClinux内核代码中对MAC控制器的驱动部分。RTL8201S3C4510BMII接口,对应引脚及功能定义明确,只要正确连接,一般都能正均应有波形输出,同时,对应的LED指示灯也能正确指示的工作状态。6SC4510BMARMPC平台的程序开发,嵌入式系统的程序设计具有其自身的特点,程序设计的方法81632位微控制提高系统的性能。对于一个特定的系统来说,其系统资源,如Flash、EEPROM、省空间并减少程序执行时间。可靠性,因此,应用程序的技术也是必须考虑的,这也是嵌入式系统应用程序不同于其他应通用I/O或特殊功能模式,由片内的特殊功能寄存器IOPMOD和IOPCON控制。XDREQ0、XDREQ11415DMAXDACK0、XDACK1160TOUT0171TOUT1。6.2.1I/OI/OIOPCONP8~P17的特殊功能,当这些端口用作特殊功能(如寄存器控制,而不再由IOPMOD寄存器。0=1=使0=低电平有效1=[2]0=滤波器 1=滤波器 00=电平检 01=上升沿检10=下降沿检测11=[22]12DMA0(nXDREQ0)0=1=使能[21]0=滤波器 1=滤波器[20]0=低电平有效1=[25]13DMA1(nXDREQ1)0=1=使能[24]0=滤波器 1=滤波器[23]0=低电平有效1=[27]14DMA0(nXDACK0)0=1=使能[26]0=低电平有效1=[29]15DMA1(nXDACK1)0=1=使能[28]0=低电平有效1=0=1=使0=1=使当配置为输入模式时,I/O口数据寄存器IOPDATA的每一位对应输入状态,当配置为输出模式时,写每一位对应输出状态。位CodeWarriorforARMDeveloperSuite(ARMProjectManager),新建一个项目,并新建一个文件,名为Init.s,具体内容如下:;Instituteof Academyof;File LDRR0,LDRR1,=0xE7FFFF80;配置SYSCFG,片内4KCache,4KSRAM R1,[R0]LDRSP,0x3FE1000;SP4KSRAM SRAM,并将用户堆栈设置在片内的SRAM中。生成,将SP初始化为0x3FE,1000。保存Init.s,并添加到新建的项目。Instituteof AcademyofFile #defineIOPMOD (*(volatileunsigned*)0x03FF5000)//IOportmoderegister#defineIOPDATA(*(volatileunsigned*)0x03FF5008)//IOportdataregistervoidDelay(unsignedint);int{unsignedlong }}voidDelay(unsignedint{unsignedinti,j,k;}认程序的地址为0x8000,该值应根据实际的SDRAM映射地址进行修改。打开AXDDebugger(或ARMDebuggerforWindows)令行窗口,执行obey命令>obey乎所有的微控制器、PC都提供串行通讯接口。在CPU和串行I/O口之间传送数据。5、6、78每一个异步串行通讯口都具有独立的波特率发生器、发送器、和控制单元。波特率发生器可由片内系统时钟MCLK驱动,或由外部时钟UCLK(Pin64)驱动;发送器和都有独立待发送的数据首先传送到发送缓冲寄存器,然后拷贝到发送移位器并通过发送数据引脚UATXDnUARXDn移入移位器,当接收到一个字节时就UARTUARTUART的发送缓冲寄存器,这样,当发送缓冲寄存器空时就可以产生UART的发送中断。6.2.2

6-2-1UART读UART0读写写读读写写写写UART(UARTLineControlRegisters,ULCON0、6-2-2UART位位,‘01’6位,‘10’7位,‘11’8该位指示每帧数据的停止位数:‘0’每帧一个停止位,‘1’=每帧两个停止位。验并进行检测:‘0XX’=无校验,‘100’=奇校==0=内部时钟1=外部时钟正常UART模式。00=5 01=610=7 11=80=1=每帧两个停止位=100=101=1101110=内部时钟1=外部时钟0=1=6-2-3UART位‘00’=Rx模式,‘0’=‘1’=‘00’=Tx模式,0=DSR1=DSR输出(nUADSR引脚)0=1=在内部直接连接到接收缓冲寄存器URXBUF。00=01=10=GDMA011=GDMA10=1==01=10=GDMA011=GDMA10=DSR输出(nUADSR引脚1=DSR输出(nUADSR引脚0=1=0=1=使能回环模式(仅用于测试读读6-2-4UART位在接收串行数据的操作中,当发生Overrun错误时,该被新收到的数据所覆盖时发生Overrun错误。动UCON[2]为‘1’,则当帧错动动。URXBUFUTXBUF发送完成帧错误UART(UARTTransmitBufferRegisters,UTXBUF0、写写写6-2-5UART位UART(UARTReceiveBufferRegister,URXBUF0、据帧,UART的状态寄存器USTAT[5]置为1。当URXBUF时,USTAT[5]自动。读读6-2-6UART位UART(UARTBaudRateDivisorRegisters,UBRDIV0、[3:0]xxx0= 16[15:4]时间常数值(CNT0)CNT0 50MHz时,则最大的波特率时钟MCLK2/16(=1.5625MHz)MCLK2为系统时钟MCLK2。协议为:19200波特、8位数据、1位停止、无校验。CodeWarriorforARMDeveloperSuite(ARMProjectManager),新建一个项目,并新建一个文件,名为Init.s,具体内容与第一个例子相同。Instituteof AcademyofFile #defineULCON0 (*(volatileunsigned*)0x03FFD000)//UARTchannel0linecontrol#define #defineUSTAT0 #defineUTXBUF0 (*(volatileunsigned*)0x03FFD00c)//UARTchannel0transimitholdingregister#defineURXBUF0 (*(volatileunsigned*)0x03FFD010)//UARTchannel0recievebuffer#defineUBRDIV0 (*(volatileunsigned*)0x03FFD014)//Baudratedivisorregister0#defineULCON1 (*(volatileunsigned*)0x03FFE000)//UARTchannel1linecontrol#defineUCON1 #defineUSTAT1 #defineUTXBUF1 (*(volatileunsigned*)0x03FFE00c)//UARTchannel1transimitholdingregister#defineURXBUF1 (*(volatileunsigned*)0x03FFE010)//UARTchannel1recievebuffer#defineUBRDIV1 (*(volatileunsigned*)0x03FFE014)//Baudratedivisorregister1voidInitUART(intPort,intBaudrate);voidPrintUART(intPort,char*s);intMain(){InitUART(0,0x500);//19200bpsCPU工作频率 }}voidPrintUART(intPort,char{{);}{);}}voidInitUART(intPort,int{}}}CPU都支持中断,S3C4510BARM7TDMI核可以识别两种类型的中断:正常中断请求(NormalInterruptRequest,IRQ)和快速中断请求(FastInterruptRequest,FIQ),因此,S3C4510BIRQ或FIQ。S3C4510B的中断控制器对每一个中断源都有一个中断悬挂位(InterruptPendingBit)。中断优先级寄存器,以获得特定的优先级。中断优先级预定义为从0~20。中断悬挂寄存器(neruptendngegser未处理)。U1意是‘1清除,而是写0’。当中断悬挂被置位时无论中断寄器是否为‘’,中断服务程序都开始执行。在中断服务程序中,必须通过向中断悬挂寄存器的相断位(位21)为‘1’,则所有的中断都会被。当有中断请求产生时,对应的中断悬挂位S3C4510B的中断源(InterruptSources) S3C4510B的中断HDLC通道BHDLC通道BHDLC通道AHDLC通道A中断控制器的特殊功能寄存器(InterruptControllerSpecialRegisters)中断模式寄存器(InterruptMod

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论