《ARM嵌入式C编程标准教程》.ppt

上传人:re****.1 文档编号:571847701 上传时间:2024-08-12 格式:PPT 页数:146 大小:3.02MB
返回 下载 相关 举报
《ARM嵌入式C编程标准教程》.ppt_第1页
第1页 / 共146页
《ARM嵌入式C编程标准教程》.ppt_第2页
第2页 / 共146页
《ARM嵌入式C编程标准教程》.ppt_第3页
第3页 / 共146页
《ARM嵌入式C编程标准教程》.ppt_第4页
第4页 / 共146页
《ARM嵌入式C编程标准教程》.ppt_第5页
第5页 / 共146页
点击查看更多>>
资源描述

《《ARM嵌入式C编程标准教程》.ppt》由会员分享,可在线阅读,更多相关《《ARM嵌入式C编程标准教程》.ppt(146页珍藏版)》请在金锄头文库上搜索。

1、n n第一章习题与练习第一章习题与练习第一章习题与练习第一章习题与练习n n1 1,嵌入式控制系统按操作系统分,大致可分哪几,嵌入式控制系统按操作系统分,大致可分哪几,嵌入式控制系统按操作系统分,大致可分哪几,嵌入式控制系统按操作系统分,大致可分哪几类,每类的设计方法有什么不同?类,每类的设计方法有什么不同?类,每类的设计方法有什么不同?类,每类的设计方法有什么不同?n n2 2,嵌入式控制不加嵌入式操作系统支持,遇到多,嵌入式控制不加嵌入式操作系统支持,遇到多,嵌入式控制不加嵌入式操作系统支持,遇到多,嵌入式控制不加嵌入式操作系统支持,遇到多线程或局域网问题如何解决?线程或局域网问题如何解决

2、?线程或局域网问题如何解决?线程或局域网问题如何解决?n n 3 3,ARMARM体系中的字,半字和字节各占多少位体系中的字,半字和字节各占多少位体系中的字,半字和字节各占多少位体系中的字,半字和字节各占多少位(bitbit)?)?)?)?n n 4, 4, 什么是大端存储什么是大端存储什么是大端存储什么是大端存储 (Big (Big EnddianEnddian ) ) 格式和小端存格式和小端存格式和小端存格式和小端存储储储储 (Little (Little EnddianEnddian ) ) 格式,格式,格式,格式,ARM920TARM920T内核的嵌内核的嵌内核的嵌内核的嵌入式系统中,

3、常用哪种存储格式来存储字数据?入式系统中,常用哪种存储格式来存储字数据?入式系统中,常用哪种存储格式来存储字数据?入式系统中,常用哪种存储格式来存储字数据?n n 5, 5, 什么是什么是什么是什么是ThumbThumb指令集指令集指令集指令集? ?它和它和它和它和3232位位位位ARMARM指令集的指令集的指令集的指令集的区别区别区别区别? ?第二章第二章ADS 1.2开发环境创建与简介开发环境创建与简介n n2.1 ADS1.2开发环境创建开发环境创建n n2.1.1 ADS1.22.1.1 ADS1.2概述概述概述概述n n ADSADS是个集成开发环境,主要包括编译器、链接器、调试是个

4、集成开发环境,主要包括编译器、链接器、调试是个集成开发环境,主要包括编译器、链接器、调试是个集成开发环境,主要包括编译器、链接器、调试器、器、器、器、C C和和和和C+C+库等,是库等,是库等,是库等,是ARMARM公司推出的新一代公司推出的新一代公司推出的新一代公司推出的新一代ARMARM集成开集成开集成开集成开发工具。最新版本是发工具。最新版本是发工具。最新版本是发工具。最新版本是ADS1.2ADS1.2,该版本支持包括,该版本支持包括,该版本支持包括,该版本支持包括WindowsWindows和和和和LinuxLinux在内的多种操作环境。在内的多种操作环境。在内的多种操作环境。在内的多

5、种操作环境。ADS1.2ADS1.2的组成如下所述。的组成如下所述。的组成如下所述。的组成如下所述。n n1. 1. 编译器编译器编译器编译器n nADSADS提供多种编译器,以支持提供多种编译器,以支持提供多种编译器,以支持提供多种编译器,以支持ARMARM和和和和ThumbThumb指令的编译,指令的编译,指令的编译,指令的编译,主要有:主要有:主要有:主要有:n n armccarmcc:是:是:是:是ARM CARM C编译器。编译器。编译器。编译器。n n tcctcc:是:是:是:是Thumb CThumb C编译器。编译器。编译器。编译器。n n armcpparmcpp:是:是

6、:是:是ARM C+ARM C+编译器。编译器。编译器。编译器。n n tcpptcpp:是:是:是:是Thumb C+Thumb C+编译器。编译器。编译器。编译器。n n armasmarmasm:是:是:是:是ARMARM和和和和ThumbThumb的汇编语言编译器。的汇编语言编译器。的汇编语言编译器。的汇编语言编译器。2. 2. 链接器链接器链接器链接器armlinkarmlink是是是是ARMARM链接器。该命令既可以将编译得到的链接器。该命令既可以将编译得到的链接器。该命令既可以将编译得到的链接器。该命令既可以将编译得到的一个或多个目标文件和相关的一个或多个库文件进一个或多个目标文

7、件和相关的一个或多个库文件进一个或多个目标文件和相关的一个或多个库文件进一个或多个目标文件和相关的一个或多个库文件进行链接,生成一个可执行文件,也可以将多个目标行链接,生成一个可执行文件,也可以将多个目标行链接,生成一个可执行文件,也可以将多个目标行链接,生成一个可执行文件,也可以将多个目标文件部分链接成一个目标文件,以供进一步的链接。文件部分链接成一个目标文件,以供进一步的链接。文件部分链接成一个目标文件,以供进一步的链接。文件部分链接成一个目标文件,以供进一步的链接。3 3 符号调试器符号调试器符号调试器符号调试器armsdarmsd是是是是ARMARM和和和和ThumbThumb的符号调

8、试器,能进行源码的符号调试器,能进行源码的符号调试器,能进行源码的符号调试器,能进行源码级程序调试。用户可以在用级程序调试。用户可以在用级程序调试。用户可以在用级程序调试。用户可以在用C C或汇编语言写的代码中或汇编语言写的代码中或汇编语言写的代码中或汇编语言写的代码中进行单步调试、设置断点、查看变量值和内存单元进行单步调试、设置断点、查看变量值和内存单元进行单步调试、设置断点、查看变量值和内存单元进行单步调试、设置断点、查看变量值和内存单元的内容。的内容。的内容。的内容。4 4 fromELFfromELF将将将将ELFELF格式的文件转换为各种格式的输出文件,包格式的文件转换为各种格式的输

9、出文件,包格式的文件转换为各种格式的输出文件,包格式的文件转换为各种格式的输出文件,包括括括括BINBIN格式映像文件、格式映像文件、格式映像文件、格式映像文件、Motorola32Motorola32位位位位S S格式映像文件、格式映像文件、格式映像文件、格式映像文件、Intel32Intel32位格式映像文件和位格式映像文件和位格式映像文件和位格式映像文件和VerilogVerilog十六进制文件。十六进制文件。十六进制文件。十六进制文件。FromELFFromELF命令也能够为输入映像文件产生文本信息,命令也能够为输入映像文件产生文本信息,命令也能够为输入映像文件产生文本信息,命令也能够

10、为输入映像文件产生文本信息,例如代码和数据长度。例如代码和数据长度。例如代码和数据长度。例如代码和数据长度。5 5 armararmararmararmar是是是是ARMARM库函数生成器,它将一系列库函数生成器,它将一系列库函数生成器,它将一系列库函数生成器,它将一系列ELFELF格式格式格式格式的目标文件以库函数的形式集合在一起。用户可以的目标文件以库函数的形式集合在一起。用户可以的目标文件以库函数的形式集合在一起。用户可以的目标文件以库函数的形式集合在一起。用户可以把一个库传递给一个链接器以代替几个把一个库传递给一个链接器以代替几个把一个库传递给一个链接器以代替几个把一个库传递给一个链接

11、器以代替几个ELFELF文件。文件。文件。文件。6 6 CodeWarriorCodeWarriorCodeWarriorCodeWarrior集成开发环境(集成开发环境(集成开发环境(集成开发环境(IDEIDE)为管理和开发项目提供了)为管理和开发项目提供了)为管理和开发项目提供了)为管理和开发项目提供了简单多样化的图形用户界面,用户可以使用简单多样化的图形用户界面,用户可以使用简单多样化的图形用户界面,用户可以使用简单多样化的图形用户界面,用户可以使用ADSADS的的的的CodeWarriorIDECodeWarriorIDE为为为为ARMARM和和和和ThumbThumb处理开发用处理开

12、发用处理开发用处理开发用C C、C+C+或者或者或者或者ARMARM汇编语言编写的程序代码。汇编语言编写的程序代码。汇编语言编写的程序代码。汇编语言编写的程序代码。7 7 调试器调试器调试器调试器ADSADS中含有中含有中含有中含有3 3个调试器,即个调试器,即个调试器,即个调试器,即AXDAXD、ArmsdArmsd和和和和ADW/ADUADW/ADU。在在在在ARMARM体系中,可以选择多种调试方式,如体系中,可以选择多种调试方式,如体系中,可以选择多种调试方式,如体系中,可以选择多种调试方式,如Multi-Multi-ICEICE(Multi-processor In-Circuit E

13、mulatorMulti-processor In-Circuit Emulator)、)、)、)、ARMulatorARMulator或或或或AngelAngel。Multi-ICEMulti-ICE是一个独立的产品,是是一个独立的产品,是是一个独立的产品,是是一个独立的产品,是ARMARM公司自己的公司自己的公司自己的公司自己的JTAGJTAG在线在线在线在线仿真器,不是由仿真器,不是由仿真器,不是由仿真器,不是由ADSADS提供的。提供的。提供的。提供的。ARMulatorARMulator是一个是一个是一个是一个ARMARM指令集仿真器,集成在指令集仿真器,集成在指令集仿真器,集成在指

14、令集仿真器,集成在ARMARM的的的的调试器调试器调试器调试器AXDAXD中,提供对中,提供对中,提供对中,提供对ARMARM处理器的指令集的仿真,处理器的指令集的仿真,处理器的指令集的仿真,处理器的指令集的仿真,为为为为ARMARM和和和和ThumbThumb提供精确的模拟。用户可以在硬件提供精确的模拟。用户可以在硬件提供精确的模拟。用户可以在硬件提供精确的模拟。用户可以在硬件尚未做好的情况下开发程序代码,利用模拟器方式调尚未做好的情况下开发程序代码,利用模拟器方式调尚未做好的情况下开发程序代码,利用模拟器方式调尚未做好的情况下开发程序代码,利用模拟器方式调试。试。试。试。 Angel An

15、gel是是是是ARMARM公司常驻在目标机公司常驻在目标机公司常驻在目标机公司常驻在目标机FlashFlash中的监控程中的监控程中的监控程中的监控程序,只需通过序,只需通过序,只需通过序,只需通过RS-232CRS-232C串口与串口与串口与串口与PCPC主机相连,就可以对主机相连,就可以对主机相连,就可以对主机相连,就可以对基于基于基于基于ARMARM架构处理器的目标机进行监控器方式的调试。架构处理器的目标机进行监控器方式的调试。架构处理器的目标机进行监控器方式的调试。架构处理器的目标机进行监控器方式的调试。C C和和和和C+C+库库库库ADSADS提供提供提供提供ANSI CANSI C

16、库函数和库函数和库函数和库函数和C+C+库函数,支持被编译的库函数,支持被编译的库函数,支持被编译的库函数,支持被编译的C C和和和和C+C+代码。用户可以把代码。用户可以把代码。用户可以把代码。用户可以把C C库中的与目标相关的函数作为自己应库中的与目标相关的函数作为自己应库中的与目标相关的函数作为自己应库中的与目标相关的函数作为自己应用程序中的一部分,重新进行代码的实现。这就为用户带来用程序中的一部分,重新进行代码的实现。这就为用户带来用程序中的一部分,重新进行代码的实现。这就为用户带来用程序中的一部分,重新进行代码的实现。这就为用户带来了极大的方便,针对自己的应用程序的要求,对与目标无关

17、了极大的方便,针对自己的应用程序的要求,对与目标无关了极大的方便,针对自己的应用程序的要求,对与目标无关了极大的方便,针对自己的应用程序的要求,对与目标无关的库函数进行适当的裁剪。在的库函数进行适当的裁剪。在的库函数进行适当的裁剪。在的库函数进行适当的裁剪。在C C库中有很多函数是独立于其他库中有很多函数是独立于其他库中有很多函数是独立于其他库中有很多函数是独立于其他函数的,并且与目标硬件没有任何依赖关系。对于这类函数,函数的,并且与目标硬件没有任何依赖关系。对于这类函数,函数的,并且与目标硬件没有任何依赖关系。对于这类函数,函数的,并且与目标硬件没有任何依赖关系。对于这类函数,用户可以很容易

18、地在汇编代码中使用。用户可以很容易地在汇编代码中使用。用户可以很容易地在汇编代码中使用。用户可以很容易地在汇编代码中使用。 有了这些部件,用户就可以为有了这些部件,用户就可以为有了这些部件,用户就可以为有了这些部件,用户就可以为ARMARM系列的系列的系列的系列的RISCRISC处理器编写处理器编写处理器编写处理器编写和调试自己的开发应用程序了。和调试自己的开发应用程序了。和调试自己的开发应用程序了。和调试自己的开发应用程序了。2.1.2 ADS1.22.1.2 ADS1.2的安装的安装的安装的安装 n nADSADS全称为全称为全称为全称为ARM Developer SuiteARM Dev

19、eloper Suite,是,是,是,是ARMARM公司推出的新公司推出的新公司推出的新公司推出的新的一代的一代的一代的一代ARMARM集成开发工具。现在集成开发工具。现在集成开发工具。现在集成开发工具。现在ADSADS的最新版本是的最新版本是的最新版本是的最新版本是1.21.2,它取代了早期的它取代了早期的它取代了早期的它取代了早期的ADS1.1ADS1.1和和和和ADS1.0ADS1.0,该版本支持包,该版本支持包,该版本支持包,该版本支持包WindowsWindows和和和和LinuxLinux在内的多种操作系统。安装步骤如下:在内的多种操作系统。安装步骤如下:在内的多种操作系统。安装步

20、骤如下:在内的多种操作系统。安装步骤如下:n n在在在在ADS1.2ADS1.2的安装盘中运行的安装盘中运行的安装盘中运行的安装盘中运行setup.exesetup.exe,安装,安装,安装,安装ARM Developer ARM Developer Suite v1.2Suite v1.2。出现图。出现图。出现图。出现图2-12-1对话框和图对话框和图对话框和图对话框和图2-22-2对话框,同意产权协对话框,同意产权协对话框,同意产权协对话框,同意产权协义,选省缺安装路径义,选省缺安装路径义,选省缺安装路径义,选省缺安装路径(C:Program FilesARMvADS1.2)(C:Prog

21、ram FilesARMvADS1.2)和和和和典型安装模式典型安装模式典型安装模式典型安装模式( (TypiflcationTypiflcation) ),按,按,按,按NextNext进入下一步,出现进入下一步,出现进入下一步,出现进入下一步,出现选文件夹、编程语言和当前设定对话框,均按选文件夹、编程语言和当前设定对话框,均按选文件夹、编程语言和当前设定对话框,均按选文件夹、编程语言和当前设定对话框,均按NextNext,开始,开始,开始,开始安装,如图安装,如图安装,如图安装,如图2-32-3示。示。示。示。n n安装结束,安装许可文件(安装结束,安装许可文件(安装结束,安装许可文件(安

22、装结束,安装许可文件(Install LicenseInstall License),这一步可按),这一步可按),这一步可按),这一步可按安装向导进行,单击安装向导进行,单击安装向导进行,单击安装向导进行,单击“ “下一步下一步下一步下一步” ”按钮,会出现如图按钮,会出现如图按钮,会出现如图按钮,会出现如图2-42-4和图和图和图和图2-52-5所示的对话框。所示的对话框。所示的对话框。所示的对话框。在图在图在图在图2-52-5对话框中选浏览(对话框中选浏览(对话框中选浏览(对话框中选浏览(BrowserBrowser)查许可文件)查许可文件)查许可文件)查许可文件, ,在在在在Progra

23、m Program FilesARMADSV1_2licenseFilesARMADSV1_2license中选中选中选中选license.datlicense.dat文件并打开,文件并打开,文件并打开,文件并打开,单击单击单击单击“ “下一步下一步下一步下一步” ”按钮,如图按钮,如图按钮,如图按钮,如图2-62-6,即可完成,即可完成,即可完成,即可完成ADS1.2ADS1.2的安装。的安装。的安装。的安装。最后,程序还要注册,注册文件在最后,程序还要注册,注册文件在最后,程序还要注册,注册文件在最后,程序还要注册,注册文件在Program Program FilesARMADSV1_2F

24、ilesARMADSV1_2文件夹中,单击注册文件,即完成程序文件夹中,单击注册文件,即完成程序文件夹中,单击注册文件,即完成程序文件夹中,单击注册文件,即完成程序注册,如图注册,如图注册,如图注册,如图2-72-7所示。所示。所示。所示。2.2 ADS集成开发环境的使用集成开发环境的使用n n2.2.12.2.1建立一个新工程建立一个新工程建立一个新工程建立一个新工程n n运运运运 行行行行 ADS1.2ADS1.2集集集集 成成成成 开开开开 发发发发 环环环环 境境境境 ( CodeWarrior CodeWarrior for for ARM ARM Developer Develop

25、er SuiteSuite),点点点点击击击击File|NewFile|New, ,在在在在NewNew对对对对话话话话框框框框中中中中,共共共共有有有有7 7项项项项,ARM ARM Executable Executable ImageImage是是是是ARMARM的的的的通通通通用用用用模模模模板板板板。选选选选中中中中它它它它即可生成即可生成即可生成即可生成ARMARM的执行文件,如图的执行文件,如图的执行文件,如图的执行文件,如图2-82-8所示。所示。所示。所示。还要在还要在还要在还要在Project nameProject name栏中输入项目的名称,以及在栏中输入项目的名称,以

26、及在栏中输入项目的名称,以及在栏中输入项目的名称,以及在LocationLocation中中中中输入其存放的位置,按确定保存项目。输入其存放的位置,按确定保存项目。输入其存放的位置,按确定保存项目。输入其存放的位置,按确定保存项目。n n2.2.2 2.2.2 开发环境设置开发环境设置开发环境设置开发环境设置n n在新建的工程中,选择在新建的工程中,选择在新建的工程中,选择在新建的工程中,选择DebugDebug版本,如图版本,如图版本,如图版本,如图2-92-9,使用,使用,使用,使用Edit|DebugEdit|Debug Settings Settings菜单对菜单对菜单对菜单对Debu

27、gDebug版本进行参数设置。版本进行参数设置。版本进行参数设置。版本进行参数设置。 在如图在如图在如图在如图2-102-10中,点击中,点击中,点击中,点击Debug Setting Debug Setting 按钮,弹出按钮,弹出按钮,弹出按钮,弹出2-112-11图,选图,选图,选图,选中中中中Target SettingTarget Setting 项,在项,在项,在项,在Post-linkerPost-linker栏中选中栏中选中栏中选中栏中选中ARM ARM fromELFfromELF项。按项。按项。按项。按OKOK确定。确定。确定。确定。这是为生成可执行的代码的初始开关。这是为

28、生成可执行的代码的初始开关。这是为生成可执行的代码的初始开关。这是为生成可执行的代码的初始开关。3. 3. 在如图在如图在如图在如图2-122-12中,点击中,点击中,点击中,点击ARM Assembler ARM Assembler ,在,在,在,在Architecture or Architecture or Processer Processer 栏中选栏中选栏中选栏中选ARM920TARM920T。这是项目选择的。这是项目选择的。这是项目选择的。这是项目选择的CPUCPU类型。类型。类型。类型。4. 4. 在如图在如图在如图在如图2-132-13中,点击中,点击中,点击中,点击ARM

29、C ARM C ComplilerCompliler ,在,在,在,在Architecture or Architecture or ProcesserProcesser栏中选栏中选栏中选栏中选ARM920TARM920T。这是要编译的。这是要编译的。这是要编译的。这是要编译的CPUCPU核。核。核。核。5. 5. 在如图在如图在如图在如图2-142-14中,点击中,点击中,点击中,点击ARM linker ARM linker ,在,在,在,在outpuroutpur栏中设定程序栏中设定程序栏中设定程序栏中设定程序的代码段地址,以及数据使用的地址。图中的的代码段地址,以及数据使用的地址。图中

30、的的代码段地址,以及数据使用的地址。图中的的代码段地址,以及数据使用的地址。图中的RO BaseRO Base栏中栏中栏中栏中填写程序代码存放的起始地址,填写程序代码存放的起始地址,填写程序代码存放的起始地址,填写程序代码存放的起始地址,RW BaseRW Base栏中填写程序数据栏中填写程序数据栏中填写程序数据栏中填写程序数据存放的起始地址。该地址是属于存放的起始地址。该地址是属于存放的起始地址。该地址是属于存放的起始地址。该地址是属于SDRAMSDRAM的地址。的地址。的地址。的地址。在在在在optionsoptions栏中,如图栏中,如图栏中,如图栏中,如图2-152-15,Image

31、entry pointImage entry point要填写程序代码要填写程序代码要填写程序代码要填写程序代码的入口地址,其他保持不变,如果是在的入口地址,其他保持不变,如果是在的入口地址,其他保持不变,如果是在的入口地址,其他保持不变,如果是在SDRAMSDRAM中运行,则可中运行,则可中运行,则可中运行,则可在在在在0x300000000x33ffffff0x300000000x33ffffff中选值,这是中选值,这是中选值,这是中选值,这是64M SDRAM64M SDRAM的地址,的地址,的地址,的地址,但是这里用的是起始地址,所以必须把你的程序空间给留出但是这里用的是起始地址,所以

32、必须把你的程序空间给留出但是这里用的是起始地址,所以必须把你的程序空间给留出但是这里用的是起始地址,所以必须把你的程序空间给留出来,并且还要留出足够的程序使用的数据空间,而且还必须来,并且还要留出足够的程序使用的数据空间,而且还必须来,并且还要留出足够的程序使用的数据空间,而且还必须来,并且还要留出足够的程序使用的数据空间,而且还必须是是是是4 4字节对齐的地址(字节对齐的地址(字节对齐的地址(字节对齐的地址(ARMARM状态)。通常入口点状态)。通常入口点状态)。通常入口点状态)。通常入口点Image entry Image entry point point 为为为为0x30000000,

33、ro_base0x30000000,ro_base也为也为也为也为0x300000000x30000000。 在在在在LayoutLayout栏中,如图栏中,如图栏中,如图栏中,如图2-162-16,在,在,在,在Place at beginning of imagePlace at beginning of image框内,需要填写项目的入口程序的目标文件名,如,整个工框内,需要填写项目的入口程序的目标文件名,如,整个工框内,需要填写项目的入口程序的目标文件名,如,整个工框内,需要填写项目的入口程序的目标文件名,如,整个工程项目的入口程序是程项目的入口程序是程项目的入口程序是程项目的入口程序

34、是2410init.s2410init.s,那么应在,那么应在,那么应在,那么应在Object/SymbolObject/Symbol处填处填处填处填写其目标文件名写其目标文件名写其目标文件名写其目标文件名2410init.o2410init.o,在,在,在,在SectionSection处填写程序入口的起始处填写程序入口的起始处填写程序入口的起始处填写程序入口的起始段标号。它的作用是通知编译器,整个项目的开始运行,是段标号。它的作用是通知编译器,整个项目的开始运行,是段标号。它的作用是通知编译器,整个项目的开始运行,是段标号。它的作用是通知编译器,整个项目的开始运行,是从该段开始的。从该段开

35、始的。从该段开始的。从该段开始的。6. 6. 在如图在如图在如图在如图2-172-17中,即在中,即在中,即在中,即在Debug SettingDebug Setting对话框中点击左栏的对话框中点击左栏的对话框中点击左栏的对话框中点击左栏的ARM ARM fromELFfromELF项,在项,在项,在项,在Output file nameOutput file name栏中设置输出文件名栏中设置输出文件名栏中设置输出文件名栏中设置输出文件名* *.bin.bin,前缀名可以自己取,在,前缀名可以自己取,在,前缀名可以自己取,在,前缀名可以自己取,在Output format Output f

36、ormat 栏中选择栏中选择栏中选择栏中选择Plain Plain binarybinary,这是设置要下载到,这是设置要下载到,这是设置要下载到,这是设置要下载到flashflash中的二进制文件。图中的二进制文件。图中的二进制文件。图中的二进制文件。图2-172-17中中中中使用的是使用的是使用的是使用的是test.bintest.bin。 7. 7. 到此,在到此,在到此,在到此,在ADS1.2ADS1.2中的基本设置已经完成,可以将该新建中的基本设置已经完成,可以将该新建中的基本设置已经完成,可以将该新建中的基本设置已经完成,可以将该新建的空的项目文件作为模板保存起来。首先,要将该项目

37、工程文的空的项目文件作为模板保存起来。首先,要将该项目工程文的空的项目文件作为模板保存起来。首先,要将该项目工程文的空的项目文件作为模板保存起来。首先,要将该项目工程文件改一个合适的名字,如件改一个合适的名字,如件改一个合适的名字,如件改一个合适的名字,如S3C2410 S3C2410 ARM.mcpARM.mcp等,然后,在等,然后,在等,然后,在等,然后,在ADS1.2ADS1.2软件安装的目录下新建一个合适的模板目录名,如,软件安装的目录下新建一个合适的模板目录名,如,软件安装的目录下新建一个合适的模板目录名,如,软件安装的目录下新建一个合适的模板目录名,如,S3C2410 ARM Ex

38、ecutable ImageS3C2410 ARM Executable Image,再将刚刚设置完的,再将刚刚设置完的,再将刚刚设置完的,再将刚刚设置完的S3c2410 S3c2410 ARM.mcpARM.mcp项目文件存放到该目录下即可。项目文件存放到该目录下即可。项目文件存放到该目录下即可。项目文件存放到该目录下即可。 8. 8. 新建项目工程后,就可以执行菜单新建项目工程后,就可以执行菜单新建项目工程后,就可以执行菜单新建项目工程后,就可以执行菜单Project|AddProject|Add Files Files把和把和把和把和工程所有相关的文件加入,工程所有相关的文件加入,工程所

39、有相关的文件加入,工程所有相关的文件加入,ADS1.2ADS1.2不能自动进行文件分类,用不能自动进行文件分类,用不能自动进行文件分类,用不能自动进行文件分类,用户必须通过户必须通过户必须通过户必须通过Project|CreateProject|Create Group Group来创建文件夹,然后把加入来创建文件夹,然后把加入来创建文件夹,然后把加入来创建文件夹,然后把加入的文件选中,移入文件夹。或者鼠标放在文件填加区,右键点的文件选中,移入文件夹。或者鼠标放在文件填加区,右键点的文件选中,移入文件夹。或者鼠标放在文件填加区,右键点的文件选中,移入文件夹。或者鼠标放在文件填加区,右键点击,如

40、图击,如图击,如图击,如图2-182-18所示。所示。所示。所示。 先选先选Add Files,加入文件,再选,加入文件,再选Create Group,创建文,创建文件夹,然后把文件移入文件夹内。读者可根据自己习惯,更件夹,然后把文件移入文件夹内。读者可根据自己习惯,更改改Edit|Preference窗口内关于文本编辑的颜色、字体大小,窗口内关于文本编辑的颜色、字体大小,形状,变量、函数的颜色等等设置。如图形状,变量、函数的颜色等等设置。如图2-19。2.2.3 ADS1.22.2.3 ADS1.2下仿真、调试下仿真、调试下仿真、调试下仿真、调试n n在在在在ADS1.2ADS1.2下进行仿

41、真调试,首先需要一根仿真调试电缆和下进行仿真调试,首先需要一根仿真调试电缆和下进行仿真调试,首先需要一根仿真调试电缆和下进行仿真调试,首先需要一根仿真调试电缆和JTAGJTAG仿真器,用调试电缆把仿真器,用调试电缆把仿真器,用调试电缆把仿真器,用调试电缆把 JTAGJTAG仿真器和上位机并口相仿真器和上位机并口相仿真器和上位机并口相仿真器和上位机并口相连,连,连,连, JTAGJTAG仿真器的驱动程序为两个动态链接库,也要事仿真器的驱动程序为两个动态链接库,也要事仿真器的驱动程序为两个动态链接库,也要事仿真器的驱动程序为两个动态链接库,也要事先安装。先安装。先安装。先安装。n n打开调试软件打

42、开调试软件打开调试软件打开调试软件AXD DebuggerAXD Debugger。点击。点击。点击。点击File|loadFile|load image image 加载可执行文件加载可执行文件加载可执行文件加载可执行文件xx.axfxx.axf,打开超级终端,设置其参数为:,打开超级终端,设置其参数为:,打开超级终端,设置其参数为:,打开超级终端,设置其参数为:波特率为波特率为波特率为波特率为115200115200,数据位数,数据位数,数据位数,数据位数8 8,奇偶校验无,停止位无,奇偶校验无,停止位无,奇偶校验无,停止位无,奇偶校验无,停止位无1 1,数据流控无。点击全速运行,在我们的

43、例子程序中,出现数据流控无。点击全速运行,在我们的例子程序中,出现数据流控无。点击全速运行,在我们的例子程序中,出现数据流控无。点击全速运行,在我们的例子程序中,出现图图图图2-202-20的界面:的界面:的界面:的界面:最后介绍调试按钮,调试按钮在程序进入最后介绍调试按钮,调试按钮在程序进入最后介绍调试按钮,调试按钮在程序进入最后介绍调试按钮,调试按钮在程序进入AXD AXD DebuggeDebugge状态状态状态状态时会出现在主菜单项,主要几个调试按钮如图时会出现在主菜单项,主要几个调试按钮如图时会出现在主菜单项,主要几个调试按钮如图时会出现在主菜单项,主要几个调试按钮如图2-212-2

44、1所示。所示。所示。所示。 图图2-21,左起第一个是全速运行,第二个是停止运行,第,左起第一个是全速运行,第二个是停止运行,第三个跳入函数内部单步执行,第四个把一个函数做为一个语句三个跳入函数内部单步执行,第四个把一个函数做为一个语句单步执行,第五个跳出函数。单步执行,第五个跳出函数。 关于在关于在ADS1.2下进行仿真调试,下面还要祥细介绍。下进行仿真调试,下面还要祥细介绍。2.2.4 2.2.4 其他开发环境介绍其他开发环境介绍其他开发环境介绍其他开发环境介绍n nIARIAR(瑞典爱亚软件技术咨询公司)(瑞典爱亚软件技术咨询公司)(瑞典爱亚软件技术咨询公司)(瑞典爱亚软件技术咨询公司)

45、 Embedded Embedded Workbench for ARM Workbench for ARM 是是是是IAR Systems IAR Systems 公司为公司为公司为公司为ARM ARM 微处理器微处理器微处理器微处理器开发的一个集成开发环境,下面简称开发的一个集成开发环境,下面简称开发的一个集成开发环境,下面简称开发的一个集成开发环境,下面简称IAR EWARMIAR EWARM。比较。比较。比较。比较其他的其他的其他的其他的ARM ARM 开发环境,开发环境,开发环境,开发环境,IAR EWARM IAR EWARM 具有入门容易、使具有入门容易、使具有入门容易、使具有入

46、门容易、使用方便和代码紧凑等特点。故在这里做简单介绍。用方便和代码紧凑等特点。故在这里做简单介绍。用方便和代码紧凑等特点。故在这里做简单介绍。用方便和代码紧凑等特点。故在这里做简单介绍。n nIAR Systems IAR Systems 公司目前推出的最新版本是公司目前推出的最新版本是公司目前推出的最新版本是公司目前推出的最新版本是IAR Embedded IAR Embedded Workbench for ARM version 4.42Workbench for ARM version 4.42,并提供一个,并提供一个,并提供一个,并提供一个32k 32k 代码限代码限代码限代码限制学

47、习版或制学习版或制学习版或制学习版或30 30 天时间限制的免费评估版,可以到天时间限制的免费评估版,可以到天时间限制的免费评估版,可以到天时间限制的免费评估版,可以到IAR IAR 公司公司公司公司的网站的网站的网站的网站 下载。下载。下载。下载。n nIAR EWARM IAR EWARM 中包含一个全软件的模拟程序(中包含一个全软件的模拟程序(中包含一个全软件的模拟程序(中包含一个全软件的模拟程序(simulatorsimulator)。)。)。)。用户不需要任何硬件支持就可以模拟各种用户不需要任何硬件支持就可以模拟各种用户不需要任何硬件支持就可以模拟各种用户不需要任何硬件支持就可以模拟

48、各种ARMARM内核、外部内核、外部内核、外部内核、外部设备甚至中断的软件运行环境。从中可以了解和评估设备甚至中断的软件运行环境。从中可以了解和评估设备甚至中断的软件运行环境。从中可以了解和评估设备甚至中断的软件运行环境。从中可以了解和评估IAR IAR EWARM EWARM 的功能和使用方法。的功能和使用方法。的功能和使用方法。的功能和使用方法。IAR EWARM IAR EWARM 中包含一个全软件的模拟程序(中包含一个全软件的模拟程序(中包含一个全软件的模拟程序(中包含一个全软件的模拟程序(simulatorsimulator)。)。)。)。用户不需要任何硬件支持就可以模拟各种用户不需

49、要任何硬件支持就可以模拟各种用户不需要任何硬件支持就可以模拟各种用户不需要任何硬件支持就可以模拟各种ARMARM内核、外部设内核、外部设内核、外部设内核、外部设备甚至中断的软件运行环境。从中可以了解和评估备甚至中断的软件运行环境。从中可以了解和评估备甚至中断的软件运行环境。从中可以了解和评估备甚至中断的软件运行环境。从中可以了解和评估IAR IAR EWARM EWARM 的功能和使用方法。的功能和使用方法。的功能和使用方法。的功能和使用方法。IAR Embedded Workbench for ARM version 4.42 IAR Embedded Workbench for ARM v

50、ersion 4.42 是一个针对是一个针对是一个针对是一个针对ARM ARM 处理器的集成开发环境,包含项目管理器、编辑器、编处理器的集成开发环境,包含项目管理器、编辑器、编处理器的集成开发环境,包含项目管理器、编辑器、编处理器的集成开发环境,包含项目管理器、编辑器、编译连接工具和支持译连接工具和支持译连接工具和支持译连接工具和支持RTOSRTOS(嵌入式实时控制系统)的调试工具,(嵌入式实时控制系统)的调试工具,(嵌入式实时控制系统)的调试工具,(嵌入式实时控制系统)的调试工具,在该环境下可以使用在该环境下可以使用在该环境下可以使用在该环境下可以使用C/C+C/C+和汇编语言方便地开发嵌入

51、式应和汇编语言方便地开发嵌入式应和汇编语言方便地开发嵌入式应和汇编语言方便地开发嵌入式应用程序。用程序。用程序。用程序。IAR EWARM IAR EWARM 的主要模块如下:的主要模块如下:的主要模块如下:的主要模块如下:项目管理器项目管理器项目管理器项目管理器功能强大的编辑器功能强大的编辑器功能强大的编辑器功能强大的编辑器高度优化的高度优化的高度优化的高度优化的IAR ARM C/C+ CompilerIAR ARM C/C+ Compiler IAR ARM AssemblerIAR ARM Assembler1 1 个通用的个通用的个通用的个通用的IAR XLINK LinkerIAR

52、 XLINK LinkerIAR XAR IAR XAR 和和和和XLIB XLIB 建库程序和建库程序和建库程序和建库程序和IAR DLIB C/C+IAR DLIB C/C+运行库运行库运行库运行库 IAR C-SPY IAR C-SPY 调试器(先进的高级语言调试器)调试器(先进的高级语言调试器)调试器(先进的高级语言调试器)调试器(先进的高级语言调试器)命令行实用程序命令行实用程序命令行实用程序命令行实用程序以下介绍一下以下介绍一下以下介绍一下以下介绍一下EWARM 4.42 EWARM 4.42 版本及其相关配套硬件的一些特版本及其相关配套硬件的一些特版本及其相关配套硬件的一些特版本

53、及其相关配套硬件的一些特点:点:点:点:1 1 IAR EWAM IAR EWAM 软件的特点软件的特点软件的特点软件的特点 EWARM 4.42 EWARM 4.42 版基本特点版基本特点版基本特点版基本特点 完善的完善的完善的完善的ARM ARM 内核支持内核支持内核支持内核支持最新支持到最新支持到最新支持到最新支持到ARM11 ARM11 及及及及Cortex M3 Cortex M3 内核内核内核内核支持的其他支持的其他支持的其他支持的其他ARM ARM 内核内核内核内核ARM7ARM7(ARM7TDMIARM7TDMI,ARM7TDMI-SARM7TDMI-S,ARM720TARM7

54、20T)ARM9ARM9(ARM9TDMIARM9TDMI,ARM920TARM920T,ARM922TARM922T,ARM940TARM940T,ARM9EARM9E,ARM9E-SARM9E-S,ARM926EJ-SARM926EJ-S,ARM946E-SARM946E-S,ARM966E-SARM966E-S,ARM968E-SARM968E-S)ARM10ARM10(ARM10EARM10E,ARM1020EARM1020E,ARM1022EARM1022E,ARM1026EJ-SARM1026EJ-S)XScaleXScale(XScaleXScale,XScale-IR7XSca

55、le-IR7)更加客户化地提供芯片级的支持更加客户化地提供芯片级的支持更加客户化地提供芯片级的支持更加客户化地提供芯片级的支持完备的各厂商完备的各厂商完备的各厂商完备的各厂商ARM ARM 处理器的处理器的处理器的处理器的C/C+C/C+和汇编语言外设寄存和汇编语言外设寄存和汇编语言外设寄存和汇编语言外设寄存器定义文件器定义文件器定义文件器定义文件支持的芯片厂商有支持的芯片厂商有支持的芯片厂商有支持的芯片厂商有Analog DevicesAnalog Devices、ARMARM、AtmelAtmel、Cirrus Cirrus LogicLogic、FreescaleFreescale、In

56、telIntel、NetSiliconNetSilicon、OKIOKI、PhilipsPhilips、SamsungSamsung、SharpSharp、ST ST 和和和和TI TI 等等等等支持支持支持支持Analog DevicesAnalog Devices、AtmelAtmel、FreescaleFreescale、OKIOKI、PhilipsPhilips、ST ST 和和和和TI TI 等厂商的等厂商的等厂商的等厂商的ARM ARM 处理器的处理器的处理器的处理器的Flash Loader Flash Loader 程序程序程序程序 软件集成了软件集成了软件集成了软件集成了40

57、0 400 余个代码例程,对应于各种不同的芯片,余个代码例程,对应于各种不同的芯片,余个代码例程,对应于各种不同的芯片,余个代码例程,对应于各种不同的芯片,位于位于位于位于.armsrcexamplesarmsrcexamples 目录下目录下目录下目录下进一步改进了编译器速度优化,重写了的浮点运算库进一步改进了编译器速度优化,重写了的浮点运算库进一步改进了编译器速度优化,重写了的浮点运算库进一步改进了编译器速度优化,重写了的浮点运算库对更多嵌入式操作系统的支持对更多嵌入式操作系统的支持对更多嵌入式操作系统的支持对更多嵌入式操作系统的支持新增支持新增支持新增支持新增支持OSEK OSEK 类操

58、作系统的类操作系统的类操作系统的类操作系统的OSEK OSEK Run-TimeRun-Time Interface Interface (ORTI)(ORTI)新增支持新增支持新增支持新增支持OSE Epsilon RTOS OSE Epsilon RTOS 的的的的Kernel Awareness Kernel Awareness 调试调试调试调试新增支持新增支持新增支持新增支持embOSembOS、SMXSMX、NORTiNORTi 等的支持等的支持等的支持等的支持调试器的增强功能调试器的增强功能调试器的增强功能调试器的增强功能对堆栈运行的监测功能对堆栈运行的监测功能对堆栈运行的监测功能

59、对堆栈运行的监测功能配合配合配合配合IAR J-Link IAR J-Link 仿真器的新增功能仿真器的新增功能仿真器的新增功能仿真器的新增功能J-Link TCP/IP J-Link TCP/IP 服务器服务器服务器服务器调试器和调试器和调试器和调试器和IAR J-Link IAR J-Link 仿真器协同配合,实现对仿真器协同配合,实现对仿真器协同配合,实现对仿真器协同配合,实现对ARM ARM 处理处理处理处理器的多核调试器的多核调试器的多核调试器的多核调试对对对对IAR J-Trace IAR J-Trace 仿真器提供全面的支持仿真器提供全面的支持仿真器提供全面的支持仿真器提供全面的

60、支持在在在在C-SPY C-SPY 模拟器中可执行模拟器中可执行模拟器中可执行模拟器中可执行Trace Trace 的模拟的模拟的模拟的模拟支持同一芯片上多颗支持同一芯片上多颗支持同一芯片上多颗支持同一芯片上多颗Flash Flash 的的的的Flash Loader Flash Loader 程序,以及通程序,以及通程序,以及通程序,以及通用的用的用的用的Flash Loader Flash Loader 开发指南开发指南开发指南开发指南n n EWARM EWARM 软件在芯片级支持方面的特色软件在芯片级支持方面的特色软件在芯片级支持方面的特色软件在芯片级支持方面的特色完备的各厂商完备的各

61、厂商完备的各厂商完备的各厂商ARM ARM 处理器的处理器的处理器的处理器的C/C+C/C+和汇编语言外设寄和汇编语言外设寄和汇编语言外设寄和汇编语言外设寄存器定义文件存器定义文件存器定义文件存器定义文件大量适合于嵌入式代码的编程语言扩展特性,包括存储大量适合于嵌入式代码的编程语言扩展特性,包括存储大量适合于嵌入式代码的编程语言扩展特性,包括存储大量适合于嵌入式代码的编程语言扩展特性,包括存储器关键字,函数,中断函数,存储器映射器关键字,函数,中断函数,存储器映射器关键字,函数,中断函数,存储器映射器关键字,函数,中断函数,存储器映射I/O I/O 等等等等针对评估板的例程,包含针对评估板的例

62、程,包含针对评估板的例程,包含针对评估板的例程,包含IARIAR、Analog DevicesAnalog Devices、AijiAiji SystemSystem、ARMARM、AtmelAtmel、Cirrus LogicCirrus Logic、FreescaleFreescale、KeilKeil、OKIOKI、OlimexOlimex、PasatPasat、PhilipsPhilips、PhytecPhytec、ST ST 和和和和TI TI 等厂家的开发支持等厂家的开发支持等厂家的开发支持等厂家的开发支持ARM ARM 或或或或Thumb Thumb 模式下大至模式下大至模式下大

63、至模式下大至4G 4G 字节的应用程序字节的应用程序字节的应用程序字节的应用程序每个函数都能选择在每个函数都能选择在每个函数都能选择在每个函数都能选择在ARM ARM 或或或或Thumb Thumb 模式下编译模式下编译模式下编译模式下编译可生成可生成可生成可生成VFP VFP 向量浮点协处理器代码向量浮点协处理器代码向量浮点协处理器代码向量浮点协处理器代码支持支持支持支持Analog DevicesAnalog Devices、AtmelAtmel、FreescaleFreescale、OKIOKI、PhilipsPhilips、ST ST 和和和和TI TI 等厂商的等厂商的等厂商的等厂商

64、的ARM ARM 处处处处器的器的器的器的Flash Loader Flash Loader 程序程序程序程序 支持支持支持支持ARM Angel Debug monitorARM Angel Debug monitorn n EWARM EWARM 编译器的软件特色编译器的软件特色编译器的软件特色编译器的软件特色n n先进的通用编译器优化和针对特定处理器的速度优化先进的通用编译器优化和针对特定处理器的速度优化先进的通用编译器优化和针对特定处理器的速度优化先进的通用编译器优化和针对特定处理器的速度优化及存储器优化功能及存储器优化功能及存储器优化功能及存储器优化功能n n轻量运行库,用户可以根据

65、需要自行配置,提供全部轻量运行库,用户可以根据需要自行配置,提供全部轻量运行库,用户可以根据需要自行配置,提供全部轻量运行库,用户可以根据需要自行配置,提供全部源代码源代码源代码源代码n n灵活的存储器控制,允许详细地为代码和数据分配地灵活的存储器控制,允许详细地为代码和数据分配地灵活的存储器控制,允许详细地为代码和数据分配地灵活的存储器控制,允许详细地为代码和数据分配地址址址址n n去除不需要的函数和变量去除不需要的函数和变量去除不需要的函数和变量去除不需要的函数和变量n nC/C+C/C+变量和函数连接时全局类型检查变量和函数连接时全局类型检查变量和函数连接时全局类型检查变量和函数连接时全

66、局类型检查n n可选的校验和生成功能,用于运行时映象校验可选的校验和生成功能,用于运行时映象校验可选的校验和生成功能,用于运行时映象校验可选的校验和生成功能,用于运行时映象校验n n自动将代码和数据放置到非连续的存储器区域自动将代码和数据放置到非连续的存储器区域自动将代码和数据放置到非连续的存储器区域自动将代码和数据放置到非连续的存储器区域n n强大的可重定位宏汇编器,支持丰富的命令集和操作强大的可重定位宏汇编器,支持丰富的命令集和操作强大的可重定位宏汇编器,支持丰富的命令集和操作强大的可重定位宏汇编器,支持丰富的命令集和操作符符符符 EWARM EWARM 调试器的软件特色调试器的软件特色调

67、试器的软件特色调试器的软件特色. . 完全集成的源代码和反汇编程序调试器完全集成的源代码和反汇编程序调试器完全集成的源代码和反汇编程序调试器完全集成的源代码和反汇编程序调试器. . 非常细化的执行控制(函数调用级步进)非常细化的执行控制(函数调用级步进)非常细化的执行控制(函数调用级步进)非常细化的执行控制(函数调用级步进). . 复杂的代码和数据断点复杂的代码和数据断点复杂的代码和数据断点复杂的代码和数据断点. . 丰富的数据监视功能丰富的数据监视功能丰富的数据监视功能丰富的数据监视功能. Locals. Locals,WatchWatch,AutoAuto,Live Watch Live

68、Watch 和和和和Quick Watch Quick Watch 等变等变等变等变量查看窗口量查看窗口量查看窗口量查看窗口. . 寄存器和存储器查看窗口寄存器和存储器查看窗口寄存器和存储器查看窗口寄存器和存储器查看窗口. . 支持支持支持支持STL STL 容器容器容器容器n n. C/C+. C/C+调用栈窗口,同时还可以显示将要进入的函数调用栈窗口,同时还可以显示将要进入的函数调用栈窗口,同时还可以显示将要进入的函数调用栈窗口,同时还可以显示将要进入的函数n n. . 双击调用链上的任何函数将更新编辑器、局部变量、寄双击调用链上的任何函数将更新编辑器、局部变量、寄双击调用链上的任何函数将

69、更新编辑器、局部变量、寄双击调用链上的任何函数将更新编辑器、局部变量、寄存器、变量查看和反汇编窗口,以显示在该函数调用时的存器、变量查看和反汇编窗口,以显示在该函数调用时的存器、变量查看和反汇编窗口,以显示在该函数调用时的存器、变量查看和反汇编窗口,以显示在该函数调用时的状态状态状态状态n n. . 跟踪功能,可以检查执行的历史记录。在跟踪窗口中移跟踪功能,可以检查执行的历史记录。在跟踪窗口中移跟踪功能,可以检查执行的历史记录。在跟踪窗口中移跟踪功能,可以检查执行的历史记录。在跟踪窗口中移动时将更新编辑器和反汇编窗口以显示合适的位置。动时将更新编辑器和反汇编窗口以显示合适的位置。动时将更新编辑

70、器和反汇编窗口以显示合适的位置。动时将更新编辑器和反汇编窗口以显示合适的位置。n n. . 控制台控制台控制台控制台I/O I/O 仿真仿真仿真仿真n n. . 中断和中断和中断和中断和I/O I/O 模拟仿真模拟仿真模拟仿真模拟仿真n n. . 类似类似类似类似C C 语言的宏系统,可扩充调试器的功能语言的宏系统,可扩充调试器的功能语言的宏系统,可扩充调试器的功能语言的宏系统,可扩充调试器的功能n n. . 由主机执行的应用程序系统调用仿真由主机执行的应用程序系统调用仿真由主机执行的应用程序系统调用仿真由主机执行的应用程序系统调用仿真n n. . 代码覆盖率和执行时间分析工具代码覆盖率和执行

71、时间分析工具代码覆盖率和执行时间分析工具代码覆盖率和执行时间分析工具n n. . 通用的通用的通用的通用的Flash Loader Flash Loader 程序及开发指南程序及开发指南程序及开发指南程序及开发指南n n. . 同时支持多颗同时支持多颗同时支持多颗同时支持多颗Flash Flash 的的的的Flash Loader Flash Loader 程序程序程序程序n n. . 支持支持支持支持OSEK Run-Time Interface (ORTI)OSEK Run-Time Interface (ORTI)n n. . 提供为调试器扩充第三方功能的软件开发包,如提供为调试器扩充第

72、三方功能的软件开发包,如提供为调试器扩充第三方功能的软件开发包,如提供为调试器扩充第三方功能的软件开发包,如RTOS RTOS 调试扩充和仿真器驱动扩充调试扩充和仿真器驱动扩充调试扩充和仿真器驱动扩充调试扩充和仿真器驱动扩充n n. . 命令行调试工具命令行调试工具命令行调试工具命令行调试工具n n IAR C-SPY IAR C-SPY 支持的调试方法支持的调试方法支持的调试方法支持的调试方法n n. IAR J-Link JTAG . IAR J-Link JTAG 接口(支持所有接口(支持所有接口(支持所有接口(支持所有ARM7 ARM7 和和和和ARM9 ARM9 核,通过核,通过核,

73、通过核,通过USB USB 或或或或TCP/IP TCP/IP 连接)连接)连接)连接)n n. RDI . RDI 接口类的第三方仿真器(接口类的第三方仿真器(接口类的第三方仿真器(接口类的第三方仿真器(AbatronAbatron BDI1000 & BDI2000, BDI1000 & BDI2000, EPI EPI MajicMajic, , AshlingAshling OpellaOpella, , AijiAijin nOpenICEOpenICE, , SignumSignum JTAGjetJTAGjet, ARM Multi-ICE , ARM Multi-ICE 等)等

74、)等)等)n n. . MacraigorMacraigor Wiggler, Raven, Wiggler, Raven, mpDemonmpDemon 和和和和USBdemonUSBdemon 等调试等调试等调试等调试接口接口接口接口n n. EPI . EPI JeeniJeeni 仿真器支持仿真器支持仿真器支持仿真器支持n n. IAR . IAR 的的的的 ROM-MonitorROM-Monitorn n. ARM . ARM 公司的公司的公司的公司的Angel ROM-MonitorAngel ROM-Monitor(用于(用于(用于(用于Atmel Atmel 和和和和Cirr

75、us Cirrus Logic Logic 的评估板)的评估板)的评估板)的评估板)n n EWARM EWARM 图形化的集成开发环境的界面特色图形化的集成开发环境的界面特色图形化的集成开发环境的界面特色图形化的集成开发环境的界面特色n n. . 分层次的工程组织分层次的工程组织分层次的工程组织分层次的工程组织n n. . 同一工作空间中允许存放多个工程同一工作空间中允许存放多个工程同一工作空间中允许存放多个工程同一工作空间中允许存放多个工程n n. . 可停靠的窗口和多视图可停靠的窗口和多视图可停靠的窗口和多视图可停靠的窗口和多视图n n. . 源代码浏览源代码浏览源代码浏览源代码浏览n

76、n. . 创建和维护库的工具创建和维护库的工具创建和维护库的工具创建和维护库的工具n n. . 可以和源代码控制系统相集成可以和源代码控制系统相集成可以和源代码控制系统相集成可以和源代码控制系统相集成n n. . 文本编辑器文本编辑器文本编辑器文本编辑器n n. . 支持多字节字符(汉字)支持多字节字符(汉字)支持多字节字符(汉字)支持多字节字符(汉字)n n. . 上下文相关的帮助系统上下文相关的帮助系统上下文相关的帮助系统上下文相关的帮助系统n n. . 根据句法着色根据句法着色根据句法着色根据句法着色n n. . 无限制的无限制的无限制的无限制的undo/redoundo/redon n

77、. . 搜寻、替换和增量搜寻搜寻、替换和增量搜寻搜寻、替换和增量搜寻搜寻、替换和增量搜寻n n. Go to. Go ton n. . 书签书签书签书签n n. . 错误标签:查阅前一个错误标签:查阅前一个错误标签:查阅前一个错误标签:查阅前一个/ /下一个下一个下一个下一个n n. . 自动括号配对自动括号配对自动括号配对自动括号配对n n. . 智能缩排智能缩排智能缩排智能缩排n n. . 类似网页浏览器的前向类似网页浏览器的前向类似网页浏览器的前向类似网页浏览器的前向/ /后向源码查阅后向源码查阅后向源码查阅后向源码查阅n n. . 代码断点的设置代码断点的设置代码断点的设置代码断点的设

78、置/ /清除清除清除清除/ /使能使能使能使能/ /禁止禁止禁止禁止n n. . 命令行编译连接工具命令行编译连接工具命令行编译连接工具命令行编译连接工具 EWARM EWARM 的编程语言和标准的编程语言和标准的编程语言和标准的编程语言和标准. . 遵循遵循遵循遵循ISO/ANSI C94ISO/ANSI C94(带有一些从(带有一些从(带有一些从(带有一些从C99 C99 标准中挑选的特性)标准中挑选的特性)标准中挑选的特性)标准中挑选的特性)标准的标准的标准的标准的C C 编程语言编程语言编程语言编程语言. . 嵌入式嵌入式嵌入式嵌入式C+C+扩展,支持模板、多重继承和虚拟继承、名字扩展

79、,支持模板、多重继承和虚拟继承、名字扩展,支持模板、多重继承和虚拟继承、名字扩展,支持模板、多重继承和虚拟继承、名字空间以及其它不增加执行时间或存储器开销的空间以及其它不增加执行时间或存储器开销的空间以及其它不增加执行时间或存储器开销的空间以及其它不增加执行时间或存储器开销的C+C+特性。特性。特性。特性。完整的嵌入式完整的嵌入式完整的嵌入式完整的嵌入式C+C+库还包含字符串、流等特性。库还包含字符串、流等特性。库还包含字符串、流等特性。库还包含字符串、流等特性。 . IEEE-754 . IEEE-754 浮点运算规则浮点运算规则浮点运算规则浮点运算规则. MISRA C . MISRA C

80、 检查器检查器检查器检查器. . 支持大量工业标准的调试和映象文件格式(如支持大量工业标准的调试和映象文件格式(如支持大量工业标准的调试和映象文件格式(如支持大量工业标准的调试和映象文件格式(如ELF/DWARFELF/DWARF),与大多数常见的调试器和仿真器兼容),与大多数常见的调试器和仿真器兼容),与大多数常见的调试器和仿真器兼容),与大多数常见的调试器和仿真器兼容 用户帮助用户帮助用户帮助用户帮助. . 完备的例程和工程模板。完备的例程和工程模板。完备的例程和工程模板。完备的例程和工程模板。. . 上下文相关的联机帮助系统,带有库函数查阅功能上下文相关的联机帮助系统,带有库函数查阅功能

81、上下文相关的联机帮助系统,带有库函数查阅功能上下文相关的联机帮助系统,带有库函数查阅功能. . 印刷好的用户指南,带有详细的印刷好的用户指南,带有详细的印刷好的用户指南,带有详细的印刷好的用户指南,带有详细的step-by-step step-by-step 教程教程教程教程. . 友好、详尽和精确的错误信息和警告信息友好、详尽和精确的错误信息和警告信息友好、详尽和精确的错误信息和警告信息友好、详尽和精确的错误信息和警告信息2.3 用用AXD进行代码仿真、调试进行代码仿真、调试n n2.3.1 AXD2.3.1 AXD简介简介简介简介n nADX(ARM extended Debugger)A

82、DX(ARM extended Debugger)是是是是ADSADS软件中独立软件中独立软件中独立软件中独立于于于于Code Warrior IDECode Warrior IDE的图形软件,可从的图形软件,可从的图形软件,可从的图形软件,可从Code Code Warrior for ARM Developer SuiteWarrior for ARM Developer Suite中进入中进入中进入中进入ADXADX进行进行进行进行调试,或在调试,或在调试,或在调试,或在WindowsWindows下选择下选择下选择下选择“ “程序程序程序程序” ” ARM ARM Developer

83、Suite v1.2Developer Suite v1.2 AXD DebuggerAXD Debugger进入调试。要进入调试。要进入调试。要进入调试。要使用使用使用使用AXDAXD必须首先有生成包含调试信息的程序,必须首先有生成包含调试信息的程序,必须首先有生成包含调试信息的程序,必须首先有生成包含调试信息的程序,即由即由即由即由Code Warrior for ARM Developer SuiteCode Warrior for ARM Developer Suite编译生编译生编译生编译生成含有调试信息的可执行成含有调试信息的可执行成含有调试信息的可执行成含有调试信息的可执行ELF

84、ELF格式的映像文件格式的映像文件格式的映像文件格式的映像文件(* *. .axfaxf)。)。)。)。 1 1 在在在在AXDAXD中打开调试文件中打开调试文件中打开调试文件中打开调试文件n n在在在在Code Warrior for ARM Developer SuiteCode Warrior for ARM Developer Suite界面中,点击界面中,点击界面中,点击界面中,点击DebuggerDebugger进入进入进入进入AXDAXD调试界面。调试界面。调试界面。调试界面。n n选择选择选择选择FileFile LoadLoad image image命令,打开命令,打开命令

85、,打开命令,打开Load imageLoad image对话框,找到对话框,找到对话框,找到对话框,找到要装入的要装入的要装入的要装入的. .axfaxf映像文件,单击映像文件,单击映像文件,单击映像文件,单击“ “打开打开打开打开” ”按钮,就可以把映按钮,就可以把映按钮,就可以把映按钮,就可以把映像文件装载到目标内存中,如图像文件装载到目标内存中,如图像文件装载到目标内存中,如图像文件装载到目标内存中,如图2-222-22所示。所示。所示。所示。n n利用利用利用利用ExeuteExeute菜单中的子菜单项对可执行映像文件进行调试,菜单中的子菜单项对可执行映像文件进行调试,菜单中的子菜单项

86、对可执行映像文件进行调试,菜单中的子菜单项对可执行映像文件进行调试,各选项的含义如下:各选项的含义如下:各选项的含义如下:各选项的含义如下:n n. . 选择选择选择选择GoGo子菜单或按子菜单或按子菜单或按子菜单或按F5F5键,将全速运行代码。键,将全速运行代码。键,将全速运行代码。键,将全速运行代码。n n. . 选择选择选择选择StopStop子菜单或按子菜单或按子菜单或按子菜单或按Shift+F5Shift+F5键,将停止运行代码。键,将停止运行代码。键,将停止运行代码。键,将停止运行代码。n n. . 选择选择选择选择Step InStep In子菜单或按子菜单或按子菜单或按子菜单或

87、按F8F8键,以单步执行代码,若遇到键,以单步执行代码,若遇到键,以单步执行代码,若遇到键,以单步执行代码,若遇到函数,则进入函数内执行。函数,则进入函数内执行。函数,则进入函数内执行。函数,则进入函数内执行。n n. . 选择选择选择选择StepStep子菜单或按子菜单或按子菜单或按子菜单或按F10F10键,以单步执行代码,若遇到函键,以单步执行代码,若遇到函键,以单步执行代码,若遇到函键,以单步执行代码,若遇到函数,则把函数看成一条语句单步执行。数,则把函数看成一条语句单步执行。数,则把函数看成一条语句单步执行。数,则把函数看成一条语句单步执行。. . 选择选择选择选择Step OutSt

88、ep Out子菜单或按子菜单或按子菜单或按子菜单或按Shift+F8Shift+F8键,在键,在键,在键,在Step InStep In单步执行单步执行单步执行单步执行代码进入函数内后,若选该子菜单,则可以从函数中跳出代码进入函数内后,若选该子菜单,则可以从函数中跳出代码进入函数内后,若选该子菜单,则可以从函数中跳出代码进入函数内后,若选该子菜单,则可以从函数中跳出返回到上一级程序执行。返回到上一级程序执行。返回到上一级程序执行。返回到上一级程序执行。. . 选择选择选择选择Run To cursorRun To cursor子菜单或按子菜单或按子菜单或按子菜单或按F7F7键,以全速运行到光标

89、键,以全速运行到光标键,以全速运行到光标键,以全速运行到光标处停下。处停下。处停下。处停下。. . 选择选择选择选择Show Execution ContextShow Execution Context子菜单,可显示执行的内容。子菜单,可显示执行的内容。子菜单,可显示执行的内容。子菜单,可显示执行的内容。. . 选择选择选择选择Delete All BreakpointDelete All Breakpoint子菜单,清除所有的断点。子菜单,清除所有的断点。子菜单,清除所有的断点。子菜单,清除所有的断点。2 2查看存储器、寄存器、变量内容查看存储器、寄存器、变量内容查看存储器、寄存器、变量内

90、容查看存储器、寄存器、变量内容利用利用AXD菜单选项菜单选项Processor Views和和System Views中的子菜单中的子菜单选项可查看寄存器、变量值,还可以查看某个内存单元的数值选项可查看寄存器、变量值,还可以查看某个内存单元的数值等。各子菜单的含义如下:等。各子菜单的含义如下:n n选择选择选择选择RegistersRegisters子菜单或按子菜单或按子菜单或按子菜单或按Ctrl+RCtrl+R键,可查看或修改目标板处理键,可查看或修改目标板处理键,可查看或修改目标板处理键,可查看或修改目标板处理器中寄存器中的值器中寄存器中的值器中寄存器中的值器中寄存器中的值n n. . 选

91、择选择选择选择WatchWatch子菜单或按子菜单或按子菜单或按子菜单或按Ctrl+ECtrl+E键,可对处理器设置观察点,键,可对处理器设置观察点,键,可对处理器设置观察点,键,可对处理器设置观察点,观察点可以是寄存器、地址等,观察点可以是寄存器、地址等,观察点可以是寄存器、地址等,观察点可以是寄存器、地址等, 但不能修改。特别注意:但不能修改。特别注意:但不能修改。特别注意:但不能修改。特别注意:Processor ViewsProcessor Views菜单下的菜单下的菜单下的菜单下的WatchWatch只能观察处理器,而只能观察处理器,而只能观察处理器,而只能观察处理器,而System

92、 System ViewsViews菜单下的菜单下的菜单下的菜单下的WatchWatch或按或按或按或按Alt+EAlt+E键时可对目标板上的任何资源键时可对目标板上的任何资源键时可对目标板上的任何资源键时可对目标板上的任何资源建立观察,可增加或删除观察点。建立观察,可增加或删除观察点。建立观察,可增加或删除观察点。建立观察,可增加或删除观察点。n n. . 选择选择选择选择VariablesVariables菜单或按菜单或按菜单或按菜单或按Ctrl+ECtrl+E键,可查看或修改当前可执行键,可查看或修改当前可执行键,可查看或修改当前可执行键,可查看或修改当前可执行的映像文件(程序)中的变量

93、值,这些变量可以是局部变量、的映像文件(程序)中的变量值,这些变量可以是局部变量、的映像文件(程序)中的变量值,这些变量可以是局部变量、的映像文件(程序)中的变量值,这些变量可以是局部变量、全局变量、类属变量。可增加或删除查看或修改的变量。全局变量、类属变量。可增加或删除查看或修改的变量。全局变量、类属变量。可增加或删除查看或修改的变量。全局变量、类属变量。可增加或删除查看或修改的变量。n n. . 选择选择选择选择MemoryMemory子菜单或按子菜单或按子菜单或按子菜单或按Ctrl+MCtrl+M键,可查看或修改存储器中键,可查看或修改存储器中键,可查看或修改存储器中键,可查看或修改存储

94、器中的值。的值。的值。的值。 n n如在程序执行前,可以先查看两个宏变量如在程序执行前,可以先查看两个宏变量如在程序执行前,可以先查看两个宏变量如在程序执行前,可以先查看两个宏变量IOPMODIOPMOD和和和和IOPDATAIOPDATA的当前值。方法是:的当前值。方法是:的当前值。方法是:的当前值。方法是:n n. . 选择选择选择选择AXDAXD的的的的Processor Processor ViewsViews MemoryMemory命令或按命令或按命令或按命令或按Ctrl +MCtrl +M键后,键后,键后,键后,查看或修改存储器中的值,如图查看或修改存储器中的值,如图查看或修改存

95、储器中的值,如图查看或修改存储器中的值,如图2-232-23所示。所示。所示。所示。n n3. 3. 在在在在Memory Start addressMemory Start address文本框图上,用户可以根据要查文本框图上,用户可以根据要查文本框图上,用户可以根据要查文本框图上,用户可以根据要查看或修改的存储器地址输入起始地址,在下面的表格中会看或修改的存储器地址输入起始地址,在下面的表格中会看或修改的存储器地址输入起始地址,在下面的表格中会看或修改的存储器地址输入起始地址,在下面的表格中会列出连续的列出连续的列出连续的列出连续的6464个地址。因为个地址。因为个地址。因为个地址。因为I

96、/OI/O模式控制寄存器和模式控制寄存器和模式控制寄存器和模式控制寄存器和I/OI/O数据数据数据数据控制寄存器都是控制寄存器都是控制寄存器都是控制寄存器都是3232位的控制寄存器,所以从位的控制寄存器,所以从位的控制寄存器,所以从位的控制寄存器,所以从0x000000000x00000000开开开开始的连续始的连续始的连续始的连续4 4个地址空间存放的是个地址空间存放的是个地址空间存放的是个地址空间存放的是I/OI/O模式控制寄存器的值,模式控制寄存器的值,模式控制寄存器的值,模式控制寄存器的值,从图中可以读出该控制寄存器的值,数据控制寄存器的内从图中可以读出该控制寄存器的值,数据控制寄存器

97、的内从图中可以读出该控制寄存器的值,数据控制寄存器的内从图中可以读出该控制寄存器的值,数据控制寄存器的内容,注意因为用的是小端模式,所以读数据时注意高地址容,注意因为用的是小端模式,所以读数据时注意高地址容,注意因为用的是小端模式,所以读数据时注意高地址容,注意因为用的是小端模式,所以读数据时注意高地址中存放的高字节,低地址存放的是低字节。中存放的高字节,低地址存放的是低字节。中存放的高字节,低地址存放的是低字节。中存放的高字节,低地址存放的是低字节。n n4. 4. 断点设置、查看断点设置、查看断点设置、查看断点设置、查看n n在程序调试时经常设置断点,即在程序的某处设置在程序调试时经常设置

98、断点,即在程序的某处设置在程序调试时经常设置断点,即在程序的某处设置在程序调试时经常设置断点,即在程序的某处设置断点,当程序执行到断点处即可停下,这时开发人断点,当程序执行到断点处即可停下,这时开发人断点,当程序执行到断点处即可停下,这时开发人断点,当程序执行到断点处即可停下,这时开发人员可通过前面的方法查看寄存器、存储器或变量的员可通过前面的方法查看寄存器、存储器或变量的员可通过前面的方法查看寄存器、存储器或变量的员可通过前面的方法查看寄存器、存储器或变量的值,以判定程序是否正常。设置断点的方法是将光值,以判定程序是否正常。设置断点的方法是将光值,以判定程序是否正常。设置断点的方法是将光值,

99、以判定程序是否正常。设置断点的方法是将光标移到需设置断点处,使用快捷键标移到需设置断点处,使用快捷键标移到需设置断点处,使用快捷键标移到需设置断点处,使用快捷键F9F9在此处设置断在此处设置断在此处设置断在此处设置断点。点。点。点。n n查看断点的方法是:选择查看断点的方法是:选择查看断点的方法是:选择查看断点的方法是:选择System System ViewsViews breakpointbreakpoint viewview命令或按命令或按命令或按命令或按Alt+KAlt+K键,在断点状态对话框中右击,键,在断点状态对话框中右击,键,在断点状态对话框中右击,键,在断点状态对话框中右击,利

100、用快捷菜单可增加或删除断点。按利用快捷菜单可增加或删除断点。按利用快捷菜单可增加或删除断点。按利用快捷菜单可增加或删除断点。按F5F5键,程序将键,程序将键,程序将键,程序将运行到断点,如果要进入函数内查看如何运行的,运行到断点,如果要进入函数内查看如何运行的,运行到断点,如果要进入函数内查看如何运行的,运行到断点,如果要进入函数内查看如何运行的,可以选择可以选择可以选择可以选择ExecteExecte StepStep InwInw命令或按下命令或按下命令或按下命令或按下F8F8键,进入到键,进入到键,进入到键,进入到子函数内部进行单步程序的调试。子函数内部进行单步程序的调试。子函数内部进行

101、单步程序的调试。子函数内部进行单步程序的调试。2.3.2 JTAG概述概述n nJTAGJTAG是是是是Joint Test Action GroupJoint Test Action Group(联合测试行动小组)的(联合测试行动小组)的(联合测试行动小组)的(联合测试行动小组)的简称,由于简称,由于简称,由于简称,由于IEEE 1149.1IEEE 1149.1标准是由标准是由标准是由标准是由JTAGJTAG这个组织最初提出这个组织最初提出这个组织最初提出这个组织最初提出的,最终由的,最终由的,最终由的,最终由IEEEIEEE批准并且标准化的。所以批准并且标准化的。所以批准并且标准化的。所

102、以批准并且标准化的。所以IEEE 1149.1IEEE 1149.1这这这这个标准一般也俗称个标准一般也俗称个标准一般也俗称个标准一般也俗称JTAGJTAG调试标准。调试标准。调试标准。调试标准。n nJTAGJTAG标准主要用于芯片内部测试及对系统进行仿真、调标准主要用于芯片内部测试及对系统进行仿真、调标准主要用于芯片内部测试及对系统进行仿真、调标准主要用于芯片内部测试及对系统进行仿真、调试。试。试。试。JTAGJTAG技术是一种嵌入式调试技术,它在芯片内部封技术是一种嵌入式调试技术,它在芯片内部封技术是一种嵌入式调试技术,它在芯片内部封技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试

103、电路装了专门的测试电路装了专门的测试电路装了专门的测试电路TAPTAP(Test Access PortTest Access Port测试访问口),测试访问口),测试访问口),测试访问口),通过专用的通过专用的通过专用的通过专用的JTAGJTAG测试工具对内部节点进行测试。目前大测试工具对内部节点进行测试。目前大测试工具对内部节点进行测试。目前大测试工具对内部节点进行测试。目前大多数比较复杂的器件都支持多数比较复杂的器件都支持多数比较复杂的器件都支持多数比较复杂的器件都支持JTAGJTAG协议,如协议,如协议,如协议,如ARMARM、DSPDSP、FPGAFPGA器件等。标准的器件等。标准的

104、器件等。标准的器件等。标准的JTAGJTAG接口是接口是接口是接口是4 4线:线:线:线:TMSTMS、TCKTCK、TDITDI、TDOTDO,分别为测试模式选择、测试时钟、测试数据,分别为测试模式选择、测试时钟、测试数据,分别为测试模式选择、测试时钟、测试数据,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。输入和测试数据输出。输入和测试数据输出。输入和测试数据输出。JTAGJTAG测试允许多个器件通过测试允许多个器件通过测试允许多个器件通过测试允许多个器件通过JTAGJTAG接口串联在一起,形成一个接口串联在一起,形成一个接口串联在一起,形成一个接口串联在一起,形成一个JTAG

105、JTAG链,能实现对多个器件链,能实现对多个器件链,能实现对多个器件链,能实现对多个器件分别测试。分别测试。分别测试。分别测试。JTAGJTAG接口还常用于实现接口还常用于实现接口还常用于实现接口还常用于实现ISPISP(In-System In-System ProgrammableProgrammable在线系统可编程)功能,如对在线系统可编程)功能,如对在线系统可编程)功能,如对在线系统可编程)功能,如对FLASHFLASH器件器件器件器件进行编程等。进行编程等。进行编程等。进行编程等。n n在在在在JTAGJTAG调试中,边界扫描(调试中,边界扫描(调试中,边界扫描(调试中,边界扫描(

106、Boundary-ScanBoundary-Scan)是一个很重)是一个很重)是一个很重)是一个很重要的概念。边界扫描技术的基本思想是在靠近芯片的输入要的概念。边界扫描技术的基本思想是在靠近芯片的输入要的概念。边界扫描技术的基本思想是在靠近芯片的输入要的概念。边界扫描技术的基本思想是在靠近芯片的输入输出管脚上增加一个移位寄存器单元。因为这些移位寄存输出管脚上增加一个移位寄存器单元。因为这些移位寄存输出管脚上增加一个移位寄存器单元。因为这些移位寄存输出管脚上增加一个移位寄存器单元。因为这些移位寄存器单元都分布在芯片的边界上,所以被称为边界扫描寄存器单元都分布在芯片的边界上,所以被称为边界扫描寄存

107、器单元都分布在芯片的边界上,所以被称为边界扫描寄存器单元都分布在芯片的边界上,所以被称为边界扫描寄存器(器(器(器(Boundary-Scan Register CellBoundary-Scan Register Cell)。)。)。)。n n芯片处于调试状态的时候,这些边界扫描寄存器可以将芯芯片处于调试状态的时候,这些边界扫描寄存器可以将芯芯片处于调试状态的时候,这些边界扫描寄存器可以将芯芯片处于调试状态的时候,这些边界扫描寄存器可以将芯片和外围的输入输出隔离开来。通过这些边界扫描寄存器片和外围的输入输出隔离开来。通过这些边界扫描寄存器片和外围的输入输出隔离开来。通过这些边界扫描寄存器片和

108、外围的输入输出隔离开来。通过这些边界扫描寄存器单元,可以实现对芯片输入输出信号的观察和控制。如果单元,可以实现对芯片输入输出信号的观察和控制。如果单元,可以实现对芯片输入输出信号的观察和控制。如果单元,可以实现对芯片输入输出信号的观察和控制。如果需要捕获芯片某个管脚上的输出,首先需要把该管脚上的需要捕获芯片某个管脚上的输出,首先需要把该管脚上的需要捕获芯片某个管脚上的输出,首先需要把该管脚上的需要捕获芯片某个管脚上的输出,首先需要把该管脚上的输出装载到边界扫描链的寄存器单元中去,然后通过输出装载到边界扫描链的寄存器单元中去,然后通过输出装载到边界扫描链的寄存器单元中去,然后通过输出装载到边界扫

109、描链的寄存器单元中去,然后通过TDOTDO输出,这样,我们就可以从输出,这样,我们就可以从输出,这样,我们就可以从输出,这样,我们就可以从TDOTDO上得到相应管脚上上得到相应管脚上上得到相应管脚上上得到相应管脚上的输出信号。如果要在芯片的某个管脚上加载一个特定的的输出信号。如果要在芯片的某个管脚上加载一个特定的的输出信号。如果要在芯片的某个管脚上加载一个特定的的输出信号。如果要在芯片的某个管脚上加载一个特定的信号,则首先需要通过信号,则首先需要通过信号,则首先需要通过信号,则首先需要通过TDITDI把期望的信号移位到与相应管把期望的信号移位到与相应管把期望的信号移位到与相应管把期望的信号移位

110、到与相应管脚相连的边界扫描链的寄存器单元里去,然后将该寄存器脚相连的边界扫描链的寄存器单元里去,然后将该寄存器脚相连的边界扫描链的寄存器单元里去,然后将该寄存器脚相连的边界扫描链的寄存器单元里去,然后将该寄存器单元的值加载到相应的芯片管脚。单元的值加载到相应的芯片管脚。单元的值加载到相应的芯片管脚。单元的值加载到相应的芯片管脚。由于在正常的运行状态下,这些边界扫描寄存器对芯片来由于在正常的运行状态下,这些边界扫描寄存器对芯片来由于在正常的运行状态下,这些边界扫描寄存器对芯片来由于在正常的运行状态下,这些边界扫描寄存器对芯片来说是透明的,所以正常的运行不会受到任何影响。这样,说是透明的,所以正常

111、的运行不会受到任何影响。这样,说是透明的,所以正常的运行不会受到任何影响。这样,说是透明的,所以正常的运行不会受到任何影响。这样,边界扫描寄存器就提供了一个便捷的方式,用以观测和控边界扫描寄存器就提供了一个便捷的方式,用以观测和控边界扫描寄存器就提供了一个便捷的方式,用以观测和控边界扫描寄存器就提供了一个便捷的方式,用以观测和控制所需要调试的芯片。另外,芯片输入输出管脚上的边界制所需要调试的芯片。另外,芯片输入输出管脚上的边界制所需要调试的芯片。另外,芯片输入输出管脚上的边界制所需要调试的芯片。另外,芯片输入输出管脚上的边界扫描(移位)寄存器单元可以相互连接起来,在芯片的周扫描(移位)寄存器单

112、元可以相互连接起来,在芯片的周扫描(移位)寄存器单元可以相互连接起来,在芯片的周扫描(移位)寄存器单元可以相互连接起来,在芯片的周围形成一个边界扫描链(围形成一个边界扫描链(围形成一个边界扫描链(围形成一个边界扫描链(Boundary-Scan ChainBoundary-Scan Chain)。一般的)。一般的)。一般的)。一般的芯片都会提供几条独立的边界扫描链,用来实现完整的测芯片都会提供几条独立的边界扫描链,用来实现完整的测芯片都会提供几条独立的边界扫描链,用来实现完整的测芯片都会提供几条独立的边界扫描链,用来实现完整的测试功能。边界扫描链可以串行地输入和输出,通过相应的试功能。边界扫描

113、链可以串行地输入和输出,通过相应的试功能。边界扫描链可以串行地输入和输出,通过相应的试功能。边界扫描链可以串行地输入和输出,通过相应的时钟信号和控制信号,可以方便地观察和控制处在调试状时钟信号和控制信号,可以方便地观察和控制处在调试状时钟信号和控制信号,可以方便地观察和控制处在调试状时钟信号和控制信号,可以方便地观察和控制处在调试状态下的芯片。态下的芯片。态下的芯片。态下的芯片。JTAGJTAG仿真器需要设备驱动程序驱动,在我们使用的教学实仿真器需要设备驱动程序驱动,在我们使用的教学实仿真器需要设备驱动程序驱动,在我们使用的教学实仿真器需要设备驱动程序驱动,在我们使用的教学实验系统(验系统(验

114、系统(验系统(EDUKIT-EDUKIT-),),),),JTAGJTAG仿真器的驱动程序为两个动仿真器的驱动程序为两个动仿真器的驱动程序为两个动仿真器的驱动程序为两个动态链接库(态链接库(态链接库(态链接库(EasyICEArm9Plus.dllEasyICEArm9Plus.dll,EasyICEArm7Plus.dllEasyICEArm7Plus.dll),),),),把这两个文件拷贝到把这两个文件拷贝到把这两个文件拷贝到把这两个文件拷贝到C:EmbestIDEBinDeviceC:EmbestIDEBinDevice路径下,路径下,路径下,路径下,即可正常使用。即可正常使用。即可正常

115、使用。即可正常使用。2.3.3 Nor和和Nand Flash的区别和使用的区别和使用n n NorNor和和和和NandNand是现在市场上两种主要的非易失闪存技术。是现在市场上两种主要的非易失闪存技术。是现在市场上两种主要的非易失闪存技术。是现在市场上两种主要的非易失闪存技术。IntelIntel公司于公司于公司于公司于19881988年首先开发出年首先开发出年首先开发出年首先开发出Nor FlashNor Flash技术。这项技术的技术。这项技术的技术。这项技术的技术。这项技术的开发和投放市场彻底改变了原先由开发和投放市场彻底改变了原先由开发和投放市场彻底改变了原先由开发和投放市场彻底改

116、变了原先由EPROMEPROM和和和和EEPROMEEPROM一一一一统天下的局面。紧接着,统天下的局面。紧接着,统天下的局面。紧接着,统天下的局面。紧接着,19891989年东芝公司发表了年东芝公司发表了年东芝公司发表了年东芝公司发表了NandNand FlashFlash结构,强调降低每比特的成本,提供更高的性能,结构,强调降低每比特的成本,提供更高的性能,结构,强调降低每比特的成本,提供更高的性能,结构,强调降低每比特的成本,提供更高的性能,并且像磁盘一样可以通过接口轻松升级。在具有并且像磁盘一样可以通过接口轻松升级。在具有并且像磁盘一样可以通过接口轻松升级。在具有并且像磁盘一样可以通过

117、接口轻松升级。在具有NandNand FlashFlash接口的系统中,接口的系统中,接口的系统中,接口的系统中,NandNand Flash Flash存储器可以替代存储器可以替代存储器可以替代存储器可以替代Nor Nor FlashFlash存储器使用。许多业内人士也搞不清楚存储器使用。许多业内人士也搞不清楚存储器使用。许多业内人士也搞不清楚存储器使用。许多业内人士也搞不清楚NandNand闪存技闪存技闪存技闪存技术相对于术相对于术相对于术相对于NorNor技术的优越之处,因为大多数情况下闪存只技术的优越之处,因为大多数情况下闪存只技术的优越之处,因为大多数情况下闪存只技术的优越之处,因为

118、大多数情况下闪存只是用来存储少量的代码,这时是用来存储少量的代码,这时是用来存储少量的代码,这时是用来存储少量的代码,这时NorNor闪存更适合一些。而闪存更适合一些。而闪存更适合一些。而闪存更适合一些。而NandNand则是高数据存储密度的理想解决方案。则是高数据存储密度的理想解决方案。则是高数据存储密度的理想解决方案。则是高数据存储密度的理想解决方案。n nNorNor的特点是的特点是的特点是的特点是XIPXIP(eXecuteeXecute In Place In Place芯片内执行)特性,芯片内执行)特性,芯片内执行)特性,芯片内执行)特性,这样,应用程序可以直接在这样,应用程序可以

119、直接在这样,应用程序可以直接在这样,应用程序可以直接在FlashFlash闪存内运行,不必再把闪存内运行,不必再把闪存内运行,不必再把闪存内运行,不必再把代码读到系统代码读到系统代码读到系统代码读到系统RAMRAM中。中。中。中。NorNor的传输效率很高,在的传输效率很高,在的传输效率很高,在的传输效率很高,在14MB14MB的的的的小容量时具有很高的成本效益,但是很低的写入和擦除速小容量时具有很高的成本效益,但是很低的写入和擦除速小容量时具有很高的成本效益,但是很低的写入和擦除速小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。度大大影响了它的性能。度大大影响了它的性

120、能。度大大影响了它的性能。n n NandNand结构能提供极高的单元密度,可以达到高存储密度,结构能提供极高的单元密度,可以达到高存储密度,结构能提供极高的单元密度,可以达到高存储密度,结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用并且写入和擦除的速度也很快。应用并且写入和擦除的速度也很快。应用并且写入和擦除的速度也很快。应用NandNand的困难在于的困难在于的困难在于的困难在于FlashFlash的管理和需要特殊的系统接口。的管理和需要特殊的系统接口。的管理和需要特殊的系统接口。的管理和需要特殊的系统接口。n n 1. 1. 性能比较性能比较性能比较性能比

121、较n n FlashFlash闪存是非易失存储器,可以对称作块的存储器单元闪存是非易失存储器,可以对称作块的存储器单元闪存是非易失存储器,可以对称作块的存储器单元闪存是非易失存储器,可以对称作块的存储器单元块进行擦写和再编程。由于任何块进行擦写和再编程。由于任何块进行擦写和再编程。由于任何块进行擦写和再编程。由于任何FlashFlash器件的写入操作只能器件的写入操作只能器件的写入操作只能器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行在空或已擦除的单元内进行,所以大多数情况下,在进行在空或已擦除的单元内进行,所以大多数情况下,在进行在空或已擦除的单元内进行,所以大多数情况

122、下,在进行写入操作之前必须先执行擦除。写入操作之前必须先执行擦除。写入操作之前必须先执行擦除。写入操作之前必须先执行擦除。NandNand器件执行擦除操作是器件执行擦除操作是器件执行擦除操作是器件执行擦除操作是十分简单的,而十分简单的,而十分简单的,而十分简单的,而NorNor则要求在进行写入前先要将目标块内则要求在进行写入前先要将目标块内则要求在进行写入前先要将目标块内则要求在进行写入前先要将目标块内所有的位都写为所有的位都写为所有的位都写为所有的位都写为0 0。n n 由于擦除由于擦除由于擦除由于擦除NorNor器件时是以器件时是以器件时是以器件时是以64KB128KB64KB128KB的

123、块进行的,执行的块进行的,执行的块进行的,执行的块进行的,执行一个写入一个写入一个写入一个写入/ /擦除操作的时间为擦除操作的时间为擦除操作的时间为擦除操作的时间为5s5s,与此相反,擦除,与此相反,擦除,与此相反,擦除,与此相反,擦除NandNand器器器器件是以件是以件是以件是以8KB32KB8KB32KB的块进行的,执行相同的操作最多只需的块进行的,执行相同的操作最多只需的块进行的,执行相同的操作最多只需的块进行的,执行相同的操作最多只需要要要要4ms4ms。执行擦除时块尺寸的不同进一步拉大了。执行擦除时块尺寸的不同进一步拉大了。执行擦除时块尺寸的不同进一步拉大了。执行擦除时块尺寸的不同

124、进一步拉大了NorNor和和和和NandNand之间的性能差距,统计表明,对于给定的一套写入操之间的性能差距,统计表明,对于给定的一套写入操之间的性能差距,统计表明,对于给定的一套写入操之间的性能差距,统计表明,对于给定的一套写入操作,尤其是更新小文件时,在基于作,尤其是更新小文件时,在基于作,尤其是更新小文件时,在基于作,尤其是更新小文件时,在基于NorNor的单元中进行需要的单元中进行需要的单元中进行需要的单元中进行需要更多的擦除操作。这样,当选择存储解决方案时,设计师更多的擦除操作。这样,当选择存储解决方案时,设计师更多的擦除操作。这样,当选择存储解决方案时,设计师更多的擦除操作。这样,

125、当选择存储解决方案时,设计师必须权衡以下的各项因素:必须权衡以下的各项因素:必须权衡以下的各项因素:必须权衡以下的各项因素:n n . Nor. Nor的读速度比的读速度比的读速度比的读速度比NandNand稍快一些。稍快一些。稍快一些。稍快一些。 . . NandNand的写入速度比的写入速度比的写入速度比的写入速度比NorNor快很多,快很多,快很多,快很多,NandNand的的的的4ms4ms擦除速度远比擦除速度远比擦除速度远比擦除速度远比NorNor的的的的5s5s快。快。快。快。. . 大多数写入操作需要先进行擦除操作。大多数写入操作需要先进行擦除操作。大多数写入操作需要先进行擦除操

126、作。大多数写入操作需要先进行擦除操作。. . NandNand的擦除单元更小,相应的擦除电路更少。的擦除单元更小,相应的擦除电路更少。的擦除单元更小,相应的擦除电路更少。的擦除单元更小,相应的擦除电路更少。 2. 2. 容量和成本。容量和成本。容量和成本。容量和成本。 NandNand Flash Flash的单元尺寸几乎是的单元尺寸几乎是的单元尺寸几乎是的单元尺寸几乎是NorNor器件的一半,由于生产过器件的一半,由于生产过器件的一半,由于生产过器件的一半,由于生产过程更为简单,程更为简单,程更为简单,程更为简单,NandNand结构可以在给定的模具尺寸内提供更高的结构可以在给定的模具尺寸内

127、提供更高的结构可以在给定的模具尺寸内提供更高的结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。在容量,也就相应地降低了价格。在容量,也就相应地降低了价格。在容量,也就相应地降低了价格。在NandNand闪存中每个块的最大闪存中每个块的最大闪存中每个块的最大闪存中每个块的最大擦写次数是一百万次,而擦写次数是一百万次,而擦写次数是一百万次,而擦写次数是一百万次,而NorNor的擦写次数是十万次。的擦写次数是十万次。的擦写次数是十万次。的擦写次数是十万次。 Nor FlashNor Flash占据了容量为占据了容量为占据了容量为占据了容量为1MB16MB1MB16MB闪存市场的大部分

128、,而闪存市场的大部分,而闪存市场的大部分,而闪存市场的大部分,而NandNand Flash Flash只是用在只是用在只是用在只是用在8MB128MB8MB128MB的产品当中,这也说明的产品当中,这也说明的产品当中,这也说明的产品当中,这也说明NorNor主要应用在代码存储介质中,主要应用在代码存储介质中,主要应用在代码存储介质中,主要应用在代码存储介质中,NandNand适合于数据存储。适合于数据存储。适合于数据存储。适合于数据存储。NandNand在在在在Compact FlashCompact Flash、Secure DigitalSecure Digital、PC CardsPC

129、 Cards和和和和MMCMMC存储卡市存储卡市存储卡市存储卡市场上所占份额最大。场上所占份额最大。场上所占份额最大。场上所占份额最大。n n3. 3. 接口差别。接口差别。接口差别。接口差别。n n Nor FlashNor Flash带有带有带有带有SRAMSRAM接口,有足够的地址引脚来寻址,接口,有足够的地址引脚来寻址,接口,有足够的地址引脚来寻址,接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。基于可以很容易地存取其内部的每一个字节。基于可以很容易地存取其内部的每一个字节。基于可以很容易地存取其内部的每一个字节。基于NorNor的闪存的闪存的闪存的闪存使用非常方便,

130、可以像其他存储器那样连接,并可以在上使用非常方便,可以像其他存储器那样连接,并可以在上使用非常方便,可以像其他存储器那样连接,并可以在上使用非常方便,可以像其他存储器那样连接,并可以在上面直接运行代码。面直接运行代码。面直接运行代码。面直接运行代码。n nNandNand器件使用复杂的器件使用复杂的器件使用复杂的器件使用复杂的I/OI/O口来串行存取数据,各个产品或口来串行存取数据,各个产品或口来串行存取数据,各个产品或口来串行存取数据,各个产品或厂商的方法可能各不相同。厂商的方法可能各不相同。厂商的方法可能各不相同。厂商的方法可能各不相同。8 8个引脚用来传送控制、地址个引脚用来传送控制、地

131、址个引脚用来传送控制、地址个引脚用来传送控制、地址和数据信息。和数据信息。和数据信息。和数据信息。NandNand的读写操作采用的读写操作采用的读写操作采用的读写操作采用512512字节的块,这一点字节的块,这一点字节的块,这一点字节的块,这一点与硬盘管理操作类似,显然基于与硬盘管理操作类似,显然基于与硬盘管理操作类似,显然基于与硬盘管理操作类似,显然基于NandNand的存储器就可以取的存储器就可以取的存储器就可以取的存储器就可以取代硬盘或其他块设备。代硬盘或其他块设备。代硬盘或其他块设备。代硬盘或其他块设备。n n在使用在使用在使用在使用NandNand器件时,必须先写入驱动程序,才能继续

132、执器件时,必须先写入驱动程序,才能继续执器件时,必须先写入驱动程序,才能继续执器件时,必须先写入驱动程序,才能继续执行其他操作。向行其他操作。向行其他操作。向行其他操作。向NandNand器件写入信息需要相当的技巧,因器件写入信息需要相当的技巧,因器件写入信息需要相当的技巧,因器件写入信息需要相当的技巧,因为设计师决不能向坏块写入,这就意味着在为设计师决不能向坏块写入,这就意味着在为设计师决不能向坏块写入,这就意味着在为设计师决不能向坏块写入,这就意味着在NandNand器件上器件上器件上器件上自始至终都必须进行虚拟映射。自始至终都必须进行虚拟映射。自始至终都必须进行虚拟映射。自始至终都必须进

133、行虚拟映射。n n幸运的是,幸运的是,幸运的是,幸运的是,S3C2410S3C2410微处理器支持微处理器支持微处理器支持微处理器支持NandNand Flash Flash接口,大大接口,大大接口,大大接口,大大方便了在嵌入式系统设计中的应用。鉴于两种存储器各自方便了在嵌入式系统设计中的应用。鉴于两种存储器各自方便了在嵌入式系统设计中的应用。鉴于两种存储器各自方便了在嵌入式系统设计中的应用。鉴于两种存储器各自的优缺点,在的优缺点,在的优缺点,在的优缺点,在S3C2410S3C2410嵌入式系统中,对嵌入式系统中,对嵌入式系统中,对嵌入式系统中,对Nor FlashNor Flash和和和和N

134、andNand FlashFlash电路都进行了设计,以方便使用。电路都进行了设计,以方便使用。电路都进行了设计,以方便使用。电路都进行了设计,以方便使用。2.3.4 2.3.4 烧写烧写烧写烧写FlashFlashn n程序调试结束,要将其可执行文件烧写(或称固化)到目程序调试结束,要将其可执行文件烧写(或称固化)到目程序调试结束,要将其可执行文件烧写(或称固化)到目程序调试结束,要将其可执行文件烧写(或称固化)到目标机中标机中标机中标机中FlashFlash运行,这个过程要通过一个转门的下载软件运行,这个过程要通过一个转门的下载软件运行,这个过程要通过一个转门的下载软件运行,这个过程要通过

135、一个转门的下载软件来进行,以来进行,以来进行,以来进行,以EmbestEmbest OnLineOnLine Flash Programmer for ARM Flash Programmer for ARM为为为为例,来说明该软件的安装和使用。例,来说明该软件的安装和使用。例,来说明该软件的安装和使用。例,来说明该软件的安装和使用。n n1. 1. 安装安装安装安装Flash ProgrammerFlash Programmern nFlash ProgrammerFlash Programmer安装过程比较简单,运行安装过程比较简单,运行安装过程比较简单,运行安装过程比较简单,运行Flas

136、h Flash ProgrammerProgrammer安装包中的安装包中的安装包中的安装包中的Setup.exeSetup.exe,按照提示一步步执行,按照提示一步步执行,按照提示一步步执行,按照提示一步步执行即可。即可。即可。即可。n nFlash ProgrammerFlash Programmer安装程序将自动区分电脑是否已安装安装程序将自动区分电脑是否已安装安装程序将自动区分电脑是否已安装安装程序将自动区分电脑是否已安装EmbestEmbest IDE IDE软件的情况:软件的情况:软件的情况:软件的情况:n n 电脑已安装电脑已安装电脑已安装电脑已安装EmbestEmbest ID

137、E IDE软件,安装程序将会把软件,安装程序将会把软件,安装程序将会把软件,安装程序将会把Flash Flash ProgrammerProgrammer缺省安装到缺省安装到缺省安装到缺省安装到“ “EmbestEmbest IDE IDE安装目录安装目录安装目录安装目录ToolsToolsFlashProgrammerFlashProgrammer” ”目录,见图目录,见图目录,见图目录,见图2-242-24。同时安装程。同时安装程。同时安装程。同时安装程序将自动探测是否安装与序将自动探测是否安装与序将自动探测是否安装与序将自动探测是否安装与IDEIDE软件共享的设备模块和驱动软件共享的设备

138、模块和驱动软件共享的设备模块和驱动软件共享的设备模块和驱动程序,安装完毕后电脑无需重新启动。如果程序,安装完毕后电脑无需重新启动。如果程序,安装完毕后电脑无需重新启动。如果程序,安装完毕后电脑无需重新启动。如果IDEIDE已注册,已注册,已注册,已注册,软件可直接运行。软件可直接运行。软件可直接运行。软件可直接运行。n n 电脑未安装电脑未安装电脑未安装电脑未安装EmbestEmbest IDE IDE软件,安装程序将会把软件,安装程序将会把软件,安装程序将会把软件,安装程序将会把Flash Flash ProgrammerProgrammer缺省安装到缺省安装到缺省安装到缺省安装到“ “Pr

139、ogram Files Program Files EmbestFlashProgrammerEmbestFlashProgrammer” ”目录,安装完毕后需要重新启动。软目录,安装完毕后需要重新启动。软目录,安装完毕后需要重新启动。软目录,安装完毕后需要重新启动。软件正常运行时需要注册。软件安装完成后将缺省建立件正常运行时需要注册。软件安装完成后将缺省建立件正常运行时需要注册。软件安装完成后将缺省建立件正常运行时需要注册。软件安装完成后将缺省建立 EmbestEmbest Tools Tools 程序文件夹,包含执行程序和帮助的快捷方式。程序文件夹,包含执行程序和帮助的快捷方式。程序文件夹

140、,包含执行程序和帮助的快捷方式。程序文件夹,包含执行程序和帮助的快捷方式。2. Flash Programmer2. Flash Programmer的功能的功能的功能的功能n n点击点击点击点击Flash ProgrammerFlash Programmer图标,出现图图标,出现图图标,出现图图标,出现图2-252-25对话框,在第一对话框,在第一对话框,在第一对话框,在第一行有四个一级菜单,下面分别介绍。行有四个一级菜单,下面分别介绍。行有四个一级菜单,下面分别介绍。行有四个一级菜单,下面分别介绍。n n 文件菜单文件菜单文件菜单文件菜单n n文件菜单用于保存、打开用户设置的编程配置数据文

141、件,文件菜单用于保存、打开用户设置的编程配置数据文件,文件菜单用于保存、打开用户设置的编程配置数据文件,文件菜单用于保存、打开用户设置的编程配置数据文件,该文件一般以该文件一般以该文件一般以该文件一般以 * *. .cfgcfg形式存在。通过文件菜单,用户还可形式存在。通过文件菜单,用户还可形式存在。通过文件菜单,用户还可形式存在。通过文件菜单,用户还可以将已打开的编程配置数据文件里另存为其他文件,以及以将已打开的编程配置数据文件里另存为其他文件,以及以将已打开的编程配置数据文件里另存为其他文件,以及以将已打开的编程配置数据文件里另存为其他文件,以及打开最近打开过的四个编程配置文件。文件菜单各

142、子菜单打开最近打开过的四个编程配置文件。文件菜单各子菜单打开最近打开过的四个编程配置文件。文件菜单各子菜单打开最近打开过的四个编程配置文件。文件菜单各子菜单命令如表命令如表命令如表命令如表2-12-1所示。所示。所示。所示。n n表表表表2-1 2-1 文件菜单文件菜单文件菜单文件菜单n n n n图图图图2-25 Flash Programmer2-25 Flash Programmer对话框对话框对话框对话框n n 设置菜单设置菜单设置菜单设置菜单n n设置菜单仅包含设置菜单仅包含设置菜单仅包含设置菜单仅包含ConfigureConfigure子菜单。功能见表子菜单。功能见表子菜单。功能见

143、表子菜单。功能见表2-22-2n n表表表表2-2 2-2 设置菜单设置菜单设置菜单设置菜单n n选择选择选择选择Setting ConfigureSetting Configure子菜单,将弹出编程设备配置子菜单,将弹出编程设备配置子菜单,将弹出编程设备配置子菜单,将弹出编程设备配置对话框,如图对话框,如图对话框,如图对话框,如图2-262-26所示:所示:所示:所示:n n连接设备(连接设备(连接设备(连接设备(Remote DeviceRemote Device),该下拉框中显示所有本软件),该下拉框中显示所有本软件),该下拉框中显示所有本软件),该下拉框中显示所有本软件支持的编程设备,

144、用户可以选择其中一种,下拉框下方将支持的编程设备,用户可以选择其中一种,下拉框下方将支持的编程设备,用户可以选择其中一种,下拉框下方将支持的编程设备,用户可以选择其中一种,下拉框下方将显示对应该设备的说明和版本。显示对应该设备的说明和版本。显示对应该设备的说明和版本。显示对应该设备的说明和版本。n n通讯类型(通讯类型(通讯类型(通讯类型(Communication typeCommunication type),设置该设备与主机使),设置该设备与主机使),设置该设备与主机使),设置该设备与主机使用的连接方式和连接到的主机通讯口。用的连接方式和连接到的主机通讯口。用的连接方式和连接到的主机通讯

145、口。用的连接方式和连接到的主机通讯口。n n通讯口(通讯口(通讯口(通讯口(Parallel PortParallel Port),按实际连接设置。),按实际连接设置。),按实际连接设置。),按实际连接设置。n n Tools Tools 菜单菜单菜单菜单n nTools Tools 菜单设置菜单仅包含菜单设置菜单仅包含菜单设置菜单仅包含菜单设置菜单仅包含OptionOption子菜单,功能见子菜单,功能见子菜单,功能见子菜单,功能见2-32-3。n n表表表表2-3 Tools 2-3 Tools 菜单菜单菜单菜单选择选择Tools Option子菜单,将弹出应用选项对话框,见图子菜单,将弹

146、出应用选项对话框,见图2-27 n n输出信息记录文件(输出信息记录文件(输出信息记录文件(输出信息记录文件(Output information to log fileOutput information to log file),选择该),选择该),选择该),选择该检查框则应用程序将所有输出的提示信息和错误信息记录到安检查框则应用程序将所有输出的提示信息和错误信息记录到安检查框则应用程序将所有输出的提示信息和错误信息记录到安检查框则应用程序将所有输出的提示信息和错误信息记录到安装目录下的装目录下的装目录下的装目录下的 Info.logInfo.log文件。文件。文件。文件。n n编程时载入

147、扇区所有数据(编程时载入扇区所有数据(编程时载入扇区所有数据(编程时载入扇区所有数据(Loading all sector data when Loading all sector data when programmingprogramming),部分),部分),部分),部分FlashFlash芯片编程时需要一次性载入扇区芯片编程时需要一次性载入扇区芯片编程时需要一次性载入扇区芯片编程时需要一次性载入扇区全部数据,则用户可以选择本选项完成编程操作。全部数据,则用户可以选择本选项完成编程操作。全部数据,则用户可以选择本选项完成编程操作。全部数据,则用户可以选择本选项完成编程操作。n n超时(超

148、时(超时(超时(Time OutTime Out),设置超时时间,单位为秒。),设置超时时间,单位为秒。),设置超时时间,单位为秒。),设置超时时间,单位为秒。n n测试测试测试测试RAMRAM区大小(区大小(区大小(区大小(Test Ram SizeTest Ram Size),设置目标测试(),设置目标测试(),设置目标测试(),设置目标测试(Target Target TestTest)时测试的)时测试的)时测试的)时测试的RAMRAM存储区大小,单位为存储区大小,单位为存储区大小,单位为存储区大小,单位为KbyteKbyte;根据本软件;根据本软件;根据本软件;根据本软件运行时需要,一

149、般情况下应设置为运行时需要,一般情况下应设置为运行时需要,一般情况下应设置为运行时需要,一般情况下应设置为4K4K,对于必须一次性载入,对于必须一次性载入,对于必须一次性载入,对于必须一次性载入一个扇区数据的一个扇区数据的一个扇区数据的一个扇区数据的FlashFlash芯片,应该设置为芯片,应该设置为芯片,应该设置为芯片,应该设置为 4K+4K+扇区大小。扇区大小。扇区大小。扇区大小。n n执行执行执行执行FLASHFLASH操作前复位次数(操作前复位次数(操作前复位次数(操作前复位次数(Reset Count Before Flash Reset Count Before Flash Com

150、mandCommand),设置执行编程、擦除、保护等命令前复位芯),设置执行编程、擦除、保护等命令前复位芯),设置执行编程、擦除、保护等命令前复位芯),设置执行编程、擦除、保护等命令前复位芯片的次数。片的次数。片的次数。片的次数。 Help Help 菜单菜单菜单菜单Help Help 菜单该菜单最重要的是菜单该菜单最重要的是菜单该菜单最重要的是菜单该菜单最重要的是ContentsContents子菜单,内部有我们子菜单,内部有我们子菜单,内部有我们子菜单,内部有我们需要的许多资料,特别是用户手册,对我们正确使用需要的许多资料,特别是用户手册,对我们正确使用需要的许多资料,特别是用户手册,对我

151、们正确使用需要的许多资料,特别是用户手册,对我们正确使用Flash Flash ProgrammerProgrammer有很大帮助。帮助菜单项见表有很大帮助。帮助菜单项见表有很大帮助。帮助菜单项见表有很大帮助。帮助菜单项见表2-42-4:n n3. Flash Programmer3. Flash Programmer的使用的使用的使用的使用n nNet StartNet Start评估板是一款基于评估板是一款基于评估板是一款基于评估板是一款基于SAMSUNGSAMSUNG公司公司公司公司ARM7ARM7芯片芯片芯片芯片S3C4510S3C4510的评估电路板,板上包含的评估电路板,板上包含的

152、评估电路板,板上包含的评估电路板,板上包含2M2M字节的字节的字节的字节的FlashFlash芯片,型芯片,型芯片,型芯片,型号是号是号是号是AMDAMD公司公司公司公司AM29LV160DBAM29LV160DB,以及,以及,以及,以及16M16M字节的字节的字节的字节的SDRAMSDRAM,板上应用程序为板上应用程序为板上应用程序为板上应用程序为ucLinuxucLinux,是目前比较流行的一款评估板。,是目前比较流行的一款评估板。,是目前比较流行的一款评估板。,是目前比较流行的一款评估板。我们以我们以我们以我们以Net StartNet Start为例来说明为例来说明为例来说明为例来说明

153、Flash ProgrammerFlash Programmer的使用。的使用。的使用。的使用。n nNet StartNet Start评估板使用评估板使用评估板使用评估板使用FLASHFLASH前前前前64K64K存储空间,即存储空间,即存储空间,即存储空间,即1 1到到到到4 4号扇号扇号扇号扇区保存区保存区保存区保存BootLoaderBootLoader软件,该软件用于启动固化在软件,该软件用于启动固化在软件,该软件用于启动固化在软件,该软件用于启动固化在5 5到到到到3535号扇号扇号扇号扇区的区的区的区的ucLinuxucLinux,以及烧写,以及烧写,以及烧写,以及烧写5 5到

154、到到到3535号扇区内容。本节讲述如何号扇区内容。本节讲述如何号扇区内容。本节讲述如何号扇区内容。本节讲述如何使用使用使用使用Flash ProgrammerFlash Programmer对对对对Net StartNet Start评估板评估板评估板评估板FlashFlash进行编程,进行编程,进行编程,进行编程,用户可以参照本实例对其他电路板进行编程配置。用户可以参照本实例对其他电路板进行编程配置。用户可以参照本实例对其他电路板进行编程配置。用户可以参照本实例对其他电路板进行编程配置。n n选择合适的编程设备并设置通讯类型和通讯通道。选择合适的编程设备并设置通讯类型和通讯通道。选择合适的编

155、程设备并设置通讯类型和通讯通道。选择合适的编程设备并设置通讯类型和通讯通道。n n 处理器设置处理器设置处理器设置处理器设置n n选择处理器选择处理器选择处理器选择处理器CPUCPU子对话框,如图子对话框,如图子对话框,如图子对话框,如图2-292-29所示:所示:所示:所示:编程设备设置编程设备设置编程设备设置编程设备设置选择选择选择选择Setting ConfigureSetting Configure子菜单,弹出编程设备配置对话框,子菜单,弹出编程设备配置对话框,子菜单,弹出编程设备配置对话框,子菜单,弹出编程设备配置对话框,如图如图如图如图2-282-28所示:所示:所示:所示:n n

156、选择选择选择选择SAMSUNGSAMSUNG公司公司公司公司S3C4510S3C4510处理器,选择小端模式,按处理器,选择小端模式,按处理器,选择小端模式,按处理器,选择小端模式,按表表表表2-52-5设置以下寄存器:设置以下寄存器:设置以下寄存器:设置以下寄存器:n nFLASHFLASH芯片设置芯片设置芯片设置芯片设置n n选择选择选择选择FLASHFLASH子对话框,如图子对话框,如图子对话框,如图子对话框,如图2-302-30所示:所示:所示:所示:图图2-30 FLASH对话框对话框n n选择选择选择选择AMDAMD公司公司公司公司AM29LV160B/DBAM29LV160B/D

157、B芯片,选择访问宽度为芯片,选择访问宽度为芯片,选择访问宽度为芯片,选择访问宽度为1616位,选择芯片数目为位,选择芯片数目为位,选择芯片数目为位,选择芯片数目为1 1片,设置片,设置片,设置片,设置FlashFlash起始地址为为起始地址为为起始地址为为起始地址为为0x1800000x180000,如果要烧写,如果要烧写,如果要烧写,如果要烧写BootLoaderBootLoader程序,选择扇区范围为程序,选择扇区范围为程序,选择扇区范围为程序,选择扇区范围为1 1到到到到4 4,如果要烧写,如果要烧写,如果要烧写,如果要烧写ucLinuxucLinux,选择扇区范围为,选择扇区范围为,选

158、择扇区范围为,选择扇区范围为5 5到到到到3535。n n 编程数据设置编程数据设置编程数据设置编程数据设置n n选择编程子对话框,如图选择编程子对话框,如图选择编程子对话框,如图选择编程子对话框,如图2-312-31所示:所示:所示:所示:n n设置设置设置设置RAMRAM起始地址为起始地址为起始地址为起始地址为0 0,选择需要编程的,选择需要编程的,选择需要编程的,选择需要编程的BINBIN格式文件,格式文件,格式文件,格式文件,如果需要上载,选择上载文件。如果需要上载,选择上载文件。如果需要上载,选择上载文件。如果需要上载,选择上载文件。图图2-31 编程数据设置编程数据设置 5 5 目

159、标板测试目标板测试目标板测试目标板测试n n选择处理器选择处理器选择处理器选择处理器CPUCPU子对话框,点击目标板测试子对话框,点击目标板测试子对话框,点击目标板测试子对话框,点击目标板测试Target TestTarget Test按按按按钮,开始目标测试,测试时弹出以下对话框图钮,开始目标测试,测试时弹出以下对话框图钮,开始目标测试,测试时弹出以下对话框图钮,开始目标测试,测试时弹出以下对话框图2-312-31,通知,通知,通知,通知SYSCFGSYSCFG寄存器写入值和读取值不相同,原因是寄存器写入值和读取值不相同,原因是寄存器写入值和读取值不相同,原因是寄存器写入值和读取值不相同,原

160、因是SYSCFGSYSCFG寄存器中包含寄存器中包含寄存器中包含寄存器中包含S3C4510S3C4510器件标识,因此选择器件标识,因此选择器件标识,因此选择器件标识,因此选择YESYES继续测试。继续测试。继续测试。继续测试。弹出类似的对话框均选择弹出类似的对话框均选择弹出类似的对话框均选择弹出类似的对话框均选择YESYES继续测试。继续测试。继续测试。继续测试。图2-32目标板测试对话框RAM区测试完后,开始获取区测试完后,开始获取Flash设备标识号,如果获取的设备标识号,如果获取的Flash标识和保存的标识相同,表示测试成功,输出信息如下标识和保存的标识相同,表示测试成功,输出信息如下

161、图:图:图图2-33表示测试成功对话框表示测试成功对话框 6 FLASH6 FLASH编程编程编程编程 用户可以点击编程按钮进行编程操作或其他用户可以点击编程按钮进行编程操作或其他用户可以点击编程按钮进行编程操作或其他用户可以点击编程按钮进行编程操作或其他FlashFlash操作。操作。操作。操作。 n n2.3.5 程序的运行程序的运行n n 程序固化到程序固化到程序固化到程序固化到FLASHFLASH中后,运行前往往将其复制到中后,运行前往往将其复制到中后,运行前往往将其复制到中后,运行前往往将其复制到SDRAMSDRAM中去,这样可以提高运行速度,作者在科中去,这样可以提高运行速度,作者

162、在科中去,这样可以提高运行速度,作者在科中去,这样可以提高运行速度,作者在科研工作中,因工作需要,编写了一段将程序从研工作中,因工作需要,编写了一段将程序从研工作中,因工作需要,编写了一段将程序从研工作中,因工作需要,编写了一段将程序从FLASHFLASH中复制到中复制到中复制到中复制到DSRAMDSRAM中去的中去的中去的中去的C C语言程序,可供语言程序,可供语言程序,可供语言程序,可供参考,其中参考,其中参考,其中参考,其中ARM9init(void)ARM9init(void)程序略。程序略。程序略。程序略。 n n/-/-n n/ / 主程序主程序主程序主程序n n/-/-n n#i

163、nclude #include def.hdef.hn n#include #include 2410addr.h2410addr.hn n#include #include 2410lib.h2410lib.hn n#define ARM_ADDR 0X30000000#define ARM_ADDR 0X30000000;/ / 定义定义定义定义SDRAMSDRAM地址地址地址地址n nvoid (*void (*run)(voidrun)(void ) ); /定义函数指针定义函数指针定义函数指针定义函数指针n nvoid ARM9init(void)void ARM9init(void

164、);n nvoid CopyFromFlashToRAM(U32 * FlashAddr,U32 void CopyFromFlashToRAM(U32 * FlashAddr,U32 *ArmAddr,U32 *ArmAddr,U32 ulul) );n nvoid copy(void)void copy(void);n nvoid main(void)void main(void)n n n n run=(void(*)(void) ARM_ADDR run=(void(*)(void) ARM_ADDR;n n ARM9init()ARM9init();n ncopy()copy();n

165、 n run()run();n n /-/-/ / 复制程序复制程序复制程序复制程序/-/-CopyFromFlashToRAMCopyFromFlashToRAM(U32 * pulFlashAddr,U32 (U32 * pulFlashAddr,U32 *pulArmAddr,U32 *pulArmAddr,U32 ulul) ) U32 U32 *pulSource=pulFlashAddr*pulSource=pulFlashAddr;U32 U32 *pulDest=pulArmAddr*pulDest=pulArmAddr;U32 iU32 i;ul/=4ul/=4;for(i=

166、0for(i=0;iiulul;i+)i+) *pulDest+=*pulSource+*pulDest+=*pulSource+; /-/-/ / 调复制程序调复制程序调复制程序调复制程序/-/-copy(void)copy(void) U32*p1U32*p1;U32*p2U32*p2;P1=(U32 * )0x00200000P1=(U32 * )0x00200000;P2=(U32 * )0x30000000P2=(U32 * )0x30000000;CopyFromFlashToRAMCopyFromFlashToRAM(p1,p2,0x20000)(p1,p2,0x20000);

167、2.4 ARM C语言程序的基本规则和系统初始化程序语言程序的基本规则和系统初始化程序n n2.4.1 ARM2.4.1 ARM使用使用使用使用C C语言编程基本规则语言编程基本规则语言编程基本规则语言编程基本规则n n在应用系统的程序设计中,若所有的编程任务均由汇编语言在应用系统的程序设计中,若所有的编程任务均由汇编语言在应用系统的程序设计中,若所有的编程任务均由汇编语言在应用系统的程序设计中,若所有的编程任务均由汇编语言来完成,其工作量巨大,并且不易移植。由于来完成,其工作量巨大,并且不易移植。由于来完成,其工作量巨大,并且不易移植。由于来完成,其工作量巨大,并且不易移植。由于ARMARM

168、的程序执的程序执的程序执的程序执行速度较高,存储器的存储速度和存储量也很高,因此,行速度较高,存储器的存储速度和存储量也很高,因此,行速度较高,存储器的存储速度和存储量也很高,因此,行速度较高,存储器的存储速度和存储量也很高,因此,C C语言的特点充分发挥,使得应用程序的开发时间大为缩短,语言的特点充分发挥,使得应用程序的开发时间大为缩短,语言的特点充分发挥,使得应用程序的开发时间大为缩短,语言的特点充分发挥,使得应用程序的开发时间大为缩短,代码的移植十分方便,程序的重复使用率提高,程序架构清代码的移植十分方便,程序的重复使用率提高,程序架构清代码的移植十分方便,程序的重复使用率提高,程序架构

169、清代码的移植十分方便,程序的重复使用率提高,程序架构清晰易懂,管理较为容易等等。因此,晰易懂,管理较为容易等等。因此,晰易懂,管理较为容易等等。因此,晰易懂,管理较为容易等等。因此,C C语言的在语言的在语言的在语言的在ARMARM编程中编程中编程中编程中具有重要地位。具有重要地位。具有重要地位。具有重要地位。n n在在在在ARMARM程序的开发中,需要大量读写硬件寄存器,尽量缩短程序的开发中,需要大量读写硬件寄存器,尽量缩短程序的开发中,需要大量读写硬件寄存器,尽量缩短程序的开发中,需要大量读写硬件寄存器,尽量缩短程序的执行时间,因此部分初始化代码一般使用汇编语言来程序的执行时间,因此部分初

170、始化代码一般使用汇编语言来程序的执行时间,因此部分初始化代码一般使用汇编语言来程序的执行时间,因此部分初始化代码一般使用汇编语言来编写,比如编写,比如编写,比如编写,比如ARMARM的启动代码,的启动代码,的启动代码,的启动代码,ARMARM的操作系统的移植代码的操作系统的移植代码的操作系统的移植代码的操作系统的移植代码等,除此之外,绝大多数代码可以使用等,除此之外,绝大多数代码可以使用等,除此之外,绝大多数代码可以使用等,除此之外,绝大多数代码可以使用C C语言来完成。语言来完成。语言来完成。语言来完成。n nC C语言使用的是标准的语言使用的是标准的语言使用的是标准的语言使用的是标准的C

171、C语言,语言,语言,语言,ARMARM的开发环境实际上就是的开发环境实际上就是的开发环境实际上就是的开发环境实际上就是嵌入了一个嵌入了一个嵌入了一个嵌入了一个C C语言的集成开发环境,只不过这个开发环境和语言的集成开发环境,只不过这个开发环境和语言的集成开发环境,只不过这个开发环境和语言的集成开发环境,只不过这个开发环境和ARMARM的硬件紧密相关。的硬件紧密相关。的硬件紧密相关。的硬件紧密相关。n n在使用在使用在使用在使用C C语言时,有时要用到和汇编语言的混合编程。当语言时,有时要用到和汇编语言的混合编程。当语言时,有时要用到和汇编语言的混合编程。当语言时,有时要用到和汇编语言的混合编程

172、。当汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,将汇编程序以文件的形式加入项目当中,通过将汇编程序以文件的形式加入项目当中,通过将汇编程序以文件的形式加入项目当中,通过将汇编程序以文件的形式加入项目当中,通过ATPCSATPCS(ARM/Thumb Procedure Call StandardARM/Thumb Procedure Call Standard)的规定)的规定)的规定)的规定与与与与C C程序相互调用与访问。程序相互

173、调用与访问。程序相互调用与访问。程序相互调用与访问。n nATPCSATPCS,就是,就是,就是,就是ARMARM、ThumbThumb的过程调用标准,它规定了的过程调用标准,它规定了的过程调用标准,它规定了的过程调用标准,它规定了一些子程序间调用的基本规则。如寄存器的使用规则,堆一些子程序间调用的基本规则。如寄存器的使用规则,堆一些子程序间调用的基本规则。如寄存器的使用规则,堆一些子程序间调用的基本规则。如寄存器的使用规则,堆栈的使用规则,参数的传递规则等。栈的使用规则,参数的传递规则等。栈的使用规则,参数的传递规则等。栈的使用规则,参数的传递规则等。n n在在在在C C程序和程序和程序和程

174、序和ARMARM的汇编程序之间相互调用必须遵守的汇编程序之间相互调用必须遵守的汇编程序之间相互调用必须遵守的汇编程序之间相互调用必须遵守ATPCSATPCS。而使用而使用而使用而使用ADSADS的的的的C C语言编译器编译的语言编译器编译的语言编译器编译的语言编译器编译的C C语言子程序满足用户语言子程序满足用户语言子程序满足用户语言子程序满足用户指定的指定的指定的指定的ATPCSATPCS的规则。但是,对于汇编语言来说,完全要的规则。但是,对于汇编语言来说,完全要的规则。但是,对于汇编语言来说,完全要的规则。但是,对于汇编语言来说,完全要依赖用户保证各个子程序遵循依赖用户保证各个子程序遵循依

175、赖用户保证各个子程序遵循依赖用户保证各个子程序遵循ATPCSATPCS的规则。具体来说,的规则。具体来说,的规则。具体来说,的规则。具体来说,汇编语言的子程序应满足下面汇编语言的子程序应满足下面汇编语言的子程序应满足下面汇编语言的子程序应满足下面3 3个条件:个条件:个条件:个条件:n n. . 在子程序编写时,必须遵守相应的在子程序编写时,必须遵守相应的在子程序编写时,必须遵守相应的在子程序编写时,必须遵守相应的ATPCSATPCS规则;规则;规则;规则;n n. . 堆栈的使用要遵守相应的堆栈的使用要遵守相应的堆栈的使用要遵守相应的堆栈的使用要遵守相应的ATPCSATPCS规则;规则;规则

176、;规则;n n. . 在汇编编译器中使用在汇编编译器中使用在汇编编译器中使用在汇编编译器中使用- -atpcsatpcs选项。选项。选项。选项。n n基本的基本的基本的基本的ATPCSATPCS规定,详情请见相关规定,详情请见相关规定,详情请见相关规定,详情请见相关PDFPDF文档文档文档文档, ,简单简单简单简单说明就是说明就是说明就是说明就是: :n n1. 1. 汇编程序调用汇编程序调用汇编程序调用汇编程序调用C C程序程序程序程序n n. . 汇编程序的设置要遵循汇编程序的设置要遵循汇编程序的设置要遵循汇编程序的设置要遵循ATPCSATPCS规则,保证程序调规则,保证程序调规则,保证程

177、序调规则,保证程序调用时参数正确传递。用时参数正确传递。用时参数正确传递。用时参数正确传递。n n. . 在汇编程序中使用在汇编程序中使用在汇编程序中使用在汇编程序中使用IMPORTIMPORT伪指令声明将要调用伪指令声明将要调用伪指令声明将要调用伪指令声明将要调用的的的的C C程序函数。程序函数。程序函数。程序函数。n n. . 在调用在调用在调用在调用C C程序时,要正确设置入口参数,然后使程序时,要正确设置入口参数,然后使程序时,要正确设置入口参数,然后使程序时,要正确设置入口参数,然后使用用用用BLBL调用。调用。调用。调用。2. C2. C程序调用汇编程序程序调用汇编程序程序调用汇编

178、程序程序调用汇编程序. . 汇编程序的设置要遵循汇编程序的设置要遵循汇编程序的设置要遵循汇编程序的设置要遵循ATPCSATPCS规则,保证程序调用时参数正规则,保证程序调用时参数正规则,保证程序调用时参数正规则,保证程序调用时参数正确传递。确传递。确传递。确传递。. . 在汇编程序中使用在汇编程序中使用在汇编程序中使用在汇编程序中使用EXPORTEXPORT伪指令声明本子程序,使其他伪指令声明本子程序,使其他伪指令声明本子程序,使其他伪指令声明本子程序,使其他程序可以调用此子程序。程序可以调用此子程序。程序可以调用此子程序。程序可以调用此子程序。. . 在在在在C C语言中使用语言中使用语言中

179、使用语言中使用externextern关键字声明外部函数(声明要调用的关键字声明外部函数(声明要调用的关键字声明外部函数(声明要调用的关键字声明外部函数(声明要调用的汇编子程序)。汇编子程序)。汇编子程序)。汇编子程序)。在在在在C C语言的环境内开发应用程序,一般需要一个汇编的启动程语言的环境内开发应用程序,一般需要一个汇编的启动程语言的环境内开发应用程序,一般需要一个汇编的启动程语言的环境内开发应用程序,一般需要一个汇编的启动程序,从汇编的启动程序,跳到序,从汇编的启动程序,跳到序,从汇编的启动程序,跳到序,从汇编的启动程序,跳到C C语言下的主程序,然后,执行语言下的主程序,然后,执行语

180、言下的主程序,然后,执行语言下的主程序,然后,执行C C程序,在程序,在程序,在程序,在C C环境下读写硬件的寄存器,一般是通过宏调用,环境下读写硬件的寄存器,一般是通过宏调用,环境下读写硬件的寄存器,一般是通过宏调用,环境下读写硬件的寄存器,一般是通过宏调用,在每个项目文件的在每个项目文件的在每个项目文件的在每个项目文件的Startup2410/INCStartup2410/INC目录下都有一个目录下都有一个目录下都有一个目录下都有一个2410addr.h2410addr.h的头文件,那里面定义了所有关于的头文件,那里面定义了所有关于的头文件,那里面定义了所有关于的头文件,那里面定义了所有关

181、于24102410的硬件寄存器的宏,对的硬件寄存器的宏,对的硬件寄存器的宏,对的硬件寄存器的宏,对宏读写,就能操作宏读写,就能操作宏读写,就能操作宏读写,就能操作24102410的硬件的硬件的硬件的硬件, ,具体的编程规则同标准具体的编程规则同标准具体的编程规则同标准具体的编程规则同标准C C语言。语言。语言。语言。n n2.4.2 2.4.2 初始化程序和开发环境设置初始化程序和开发环境设置初始化程序和开发环境设置初始化程序和开发环境设置n n基于基于基于基于ARMARM芯片的应用系统,多数为复杂的片上系统,在系芯片的应用系统,多数为复杂的片上系统,在系芯片的应用系统,多数为复杂的片上系统,

182、在系芯片的应用系统,多数为复杂的片上系统,在系统中,多数硬件模块都是可配置的,需要由软件来预先设统中,多数硬件模块都是可配置的,需要由软件来预先设统中,多数硬件模块都是可配置的,需要由软件来预先设统中,多数硬件模块都是可配置的,需要由软件来预先设置其需要的工作状态,因此在用户的应用程序之前,需要置其需要的工作状态,因此在用户的应用程序之前,需要置其需要的工作状态,因此在用户的应用程序之前,需要置其需要的工作状态,因此在用户的应用程序之前,需要由专门的一段代码来完成对系统基本的初始化工作。由于由专门的一段代码来完成对系统基本的初始化工作。由于由专门的一段代码来完成对系统基本的初始化工作。由于由专

183、门的一段代码来完成对系统基本的初始化工作。由于此类代码直接面对处理器内核和硬件控制器进行编程,故此类代码直接面对处理器内核和硬件控制器进行编程,故此类代码直接面对处理器内核和硬件控制器进行编程,故此类代码直接面对处理器内核和硬件控制器进行编程,故一般均用汇编语言实现。系统的基本初始化内容一般包括:一般均用汇编语言实现。系统的基本初始化内容一般包括:一般均用汇编语言实现。系统的基本初始化内容一般包括:一般均用汇编语言实现。系统的基本初始化内容一般包括:n n. . 分配中断向量表分配中断向量表分配中断向量表分配中断向量表n n. . 初始化存储器系统初始化存储器系统初始化存储器系统初始化存储器系

184、统n n. . 初始化各工作模式的堆栈初始化各工作模式的堆栈初始化各工作模式的堆栈初始化各工作模式的堆栈n n. . 初始化有特殊要求的硬件模块初始化有特殊要求的硬件模块初始化有特殊要求的硬件模块初始化有特殊要求的硬件模块n n. . 初始化用户程序的执行环境初始化用户程序的执行环境初始化用户程序的执行环境初始化用户程序的执行环境n n. . 切换处理器的工作模式切换处理器的工作模式切换处理器的工作模式切换处理器的工作模式n n此外此外此外此外, ,还要对项目的交叉编译环境进行设置,这其中包括处理还要对项目的交叉编译环境进行设置,这其中包括处理还要对项目的交叉编译环境进行设置,这其中包括处理还

185、要对项目的交叉编译环境进行设置,这其中包括处理器设置、仿真器设置和调试设置等器设置、仿真器设置和调试设置等器设置、仿真器设置和调试设置等器设置、仿真器设置和调试设置等2020几个大项、近几个大项、近几个大项、近几个大项、近100100个小项。个小项。个小项。个小项。n n系统的初始化程序和交叉编译环境设置是初次学习系统的初始化程序和交叉编译环境设置是初次学习系统的初始化程序和交叉编译环境设置是初次学习系统的初始化程序和交叉编译环境设置是初次学习ARMARM程序程序程序程序设计最难掌握的内容之一,初次学习设计最难掌握的内容之一,初次学习设计最难掌握的内容之一,初次学习设计最难掌握的内容之一,初次

186、学习ARMARM程序设计,有哪些程序设计,有哪些程序设计,有哪些程序设计,有哪些硬件模块需要预先设置其需要的工作状态,如何设置?初始化硬件模块需要预先设置其需要的工作状态,如何设置?初始化硬件模块需要预先设置其需要的工作状态,如何设置?初始化硬件模块需要预先设置其需要的工作状态,如何设置?初始化程序代码直接面对处理器内核和硬件控制器进行编程,故一般程序代码直接面对处理器内核和硬件控制器进行编程,故一般程序代码直接面对处理器内核和硬件控制器进行编程,故一般程序代码直接面对处理器内核和硬件控制器进行编程,故一般均用汇编语言实现,初学者对均用汇编语言实现,初学者对均用汇编语言实现,初学者对均用汇编语

187、言实现,初学者对ARMARM的汇编语言不熟;交叉编的汇编语言不熟;交叉编的汇编语言不熟;交叉编的汇编语言不熟;交叉编译环境设置大约有译环境设置大约有译环境设置大约有译环境设置大约有2020几个大项,近几个大项,近几个大项,近几个大项,近100100个小项要设置,如何保个小项要设置,如何保个小项要设置,如何保个小项要设置,如何保证各项都设置的正确,这些都是我们需要解决的问题。证各项都设置的正确,这些都是我们需要解决的问题。证各项都设置的正确,这些都是我们需要解决的问题。证各项都设置的正确,这些都是我们需要解决的问题。n n最简单的做法是我们打开一个和我们开发的项目相近的系最简单的做法是我们打开一

188、个和我们开发的项目相近的系最简单的做法是我们打开一个和我们开发的项目相近的系最简单的做法是我们打开一个和我们开发的项目相近的系统提供的例子项目,在例子项目中,系统的初始化程序和统提供的例子项目,在例子项目中,系统的初始化程序和统提供的例子项目,在例子项目中,系统的初始化程序和统提供的例子项目,在例子项目中,系统的初始化程序和交叉编译环境都是设置好的,我们可先不去修改,而是先交叉编译环境都是设置好的,我们可先不去修改,而是先交叉编译环境都是设置好的,我们可先不去修改,而是先交叉编译环境都是设置好的,我们可先不去修改,而是先保留,我们只是把其中的主程序内容换成我们新项目内容,保留,我们只是把其中的

189、主程序内容换成我们新项目内容,保留,我们只是把其中的主程序内容换成我们新项目内容,保留,我们只是把其中的主程序内容换成我们新项目内容,把我们项目所需函数加入进去,这样,我们就绕过了系统把我们项目所需函数加入进去,这样,我们就绕过了系统把我们项目所需函数加入进去,这样,我们就绕过了系统把我们项目所需函数加入进去,这样,我们就绕过了系统初始化程序和交叉编译环境设置的困惑,节省系统开发时初始化程序和交叉编译环境设置的困惑,节省系统开发时初始化程序和交叉编译环境设置的困惑,节省系统开发时初始化程序和交叉编译环境设置的困惑,节省系统开发时间。间。间。间。n n比如,我们要开发一个比如,我们要开发一个比如

190、,我们要开发一个比如,我们要开发一个LCDLCD显示项目,项目的初始化程序显示项目,项目的初始化程序显示项目,项目的初始化程序显示项目,项目的初始化程序可能很难,简单作法是我们打开一个例子项目可能很难,简单作法是我们打开一个例子项目可能很难,简单作法是我们打开一个例子项目可能很难,简单作法是我们打开一个例子项目lcd.mcplcd.mcp,如图如图如图如图2-332-33所示,在项目窗口我们看到,初始化程序在一个所示,在项目窗口我们看到,初始化程序在一个所示,在项目窗口我们看到,初始化程序在一个所示,在项目窗口我们看到,初始化程序在一个文件夹组文件夹组文件夹组文件夹组startup2410st

191、artup2410中,在其中包括中,在其中包括中,在其中包括中,在其中包括3 3个汇编语言程序个汇编语言程序个汇编语言程序个汇编语言程序2410INIT.S2410INIT.S、OPTION.SOPTION.S和和和和2410SLIB.S2410SLIB.S,2 2个个个个C C语言程序语言程序语言程序语言程序2410LIB.C2410LIB.C和和和和TARGET.CTARGET.C,五个,五个,五个,五个C C语言头文件语言头文件语言头文件语言头文件2410addr.h2410addr.h、2410lib.h2410lib.h、2410slib.h2410slib.h、和、和、和、和opt

192、ion.hoption.h,很复杂。,很复杂。,很复杂。,很复杂。n n现在我们先不去研究这些程序,把现在我们先不去研究这些程序,把现在我们先不去研究这些程序,把现在我们先不去研究这些程序,把startup2410startup2410文文文文件夹保留,只修改件夹保留,只修改件夹保留,只修改件夹保留,只修改ApplicationApplication文件夹中的文件夹中的文件夹中的文件夹中的MAIN.CMAIN.C,把我们项目所需要函数加到其中一个,把我们项目所需要函数加到其中一个,把我们项目所需要函数加到其中一个,把我们项目所需要函数加到其中一个文件夹或新建一个文件夹加到项目中,可以很快文件夹

193、或新建一个文件夹加到项目中,可以很快文件夹或新建一个文件夹加到项目中,可以很快文件夹或新建一个文件夹加到项目中,可以很快完成嵌入式系统开发。完成嵌入式系统开发。完成嵌入式系统开发。完成嵌入式系统开发。图图2-33 lcd.mcp的项目窗口的项目窗口n n第二章习题与练习第二章习题与练习第二章习题与练习第二章习题与练习n n 1 1,在你的计算机中安装,在你的计算机中安装,在你的计算机中安装,在你的计算机中安装ADS1.2ADS1.2,并建立一个新,并建立一个新,并建立一个新,并建立一个新项目。项目。项目。项目。n n 2 2,如何简化系统初始化程序和开发环境设置,如何简化系统初始化程序和开发环

194、境设置,如何简化系统初始化程序和开发环境设置,如何简化系统初始化程序和开发环境设置,快速完成嵌入式控制系统设计?快速完成嵌入式控制系统设计?快速完成嵌入式控制系统设计?快速完成嵌入式控制系统设计?n n3 3,编写一个,编写一个,编写一个,编写一个C C语言程序,将用户程序从语言程序,将用户程序从语言程序,将用户程序从语言程序,将用户程序从FLASHFLASH复复复复制到制到制到制到SDRAMSDRAM,并从,并从,并从,并从SDRAMSDRAM中运行。中运行。中运行。中运行。n n4 4,NorNor和和和和NandNand Flash Flash的区别和使用有哪写不同?的区别和使用有哪写不

195、同?的区别和使用有哪写不同?的区别和使用有哪写不同?n n5 5,大致描述,大致描述,大致描述,大致描述Flash ProgrammerFlash Programmer软件的安装和使用。软件的安装和使用。软件的安装和使用。软件的安装和使用。n n6 6,参考图,参考图,参考图,参考图2-232-23,分析,分析,分析,分析lcd.mcplcd.mcp项目包括几个文件夹,项目包括几个文件夹,项目包括几个文件夹,项目包括几个文件夹,哪个文件夹包含系统初始化程序?哪个文件夹包含系统初始化程序?哪个文件夹包含系统初始化程序?哪个文件夹包含系统初始化程序?n n7 7,系统初始化应完成哪些工作?,系统初

196、始化应完成哪些工作?,系统初始化应完成哪些工作?,系统初始化应完成哪些工作?n n/-/-n n/ / 引入实验所需头文件引入实验所需头文件引入实验所需头文件引入实验所需头文件n n/-/-n n#include #include n n#include #include n n#include #include def.hdef.h n n#include #include option.hoption.h n n#include 2410addr.h#include 2410addr.hn n#include 2410lib.h#include 2410lib.hn n#include 2

197、410slib.h#include 2410slib.hn n#include 2410etc.h#include 2410etc.hn n#include 2410IIC.h#include 2410IIC.hn n#include 2410iis.h#include 2410iis.hn n#include 2410int.h#include 2410int.hn n#include 2410RTC.h#include 2410RTC.hn n#include 2410swi.h#include 2410swi.hn n#include #include timer.htimer.h n

198、n#include #include adc.hadc.h n n#include #include dma.hdma.h n n#include dma2.h#include dma2.hn n#include #include eint.heint.h n n#include #include extdma.hextdma.h n n#include k9s1208.h#include k9s1208.hn n#include #include mmu.hmmu.h n n#include #include nwait.hnwait.h n n#include #include sdi.h

199、sdi.h n n#include #include stone.hstone.h n n#include #include ts_auto.hts_auto.h n n#include #include ts_sep.hts_sep.h n n#include #include usbfifo.husbfifo.h n n#include #include IrDA.hIrDA.h n n#include #include lcd.hlcd.h n n#include #include lcdlib.hlcdlib.h n n#include #include glib.hglib.h n

200、n#include #include palette.hpalette.h n n#include #include spi.hspi.h n n#include uart0.h#include uart0.hn n#include uart1.h#include uart1.hn n#include uart2.h#include uart2.hn n#include #include etc.hetc.h n n#include #include flash.hflash.h n n#include #include idle.hidle.h n n#include pd6710.h#in

201、clude pd6710.hn n#include #include pll.hpll.h n n#include #include power.hpower.h n n#include #include pwr_c.hpwr_c.h n n#include #include stop.hstop.h n n/-/-n n/ / 定义一个二维的函数指针数组,数组中第一列是函数指定义一个二维的函数指针数组,数组中第一列是函数指定义一个二维的函数指针数组,数组中第一列是函数指定义一个二维的函数指针数组,数组中第一列是函数指针,第二列是函数功能提示针,第二列是函数功能提示针,第二列是函数功能提示针,

202、第二列是函数功能提示n n/-/-n nvoid * function2=void * function2=n n n n/ADC, TSP/ADC, TSPn n (void *) (void *)Test_AdcTest_Adc, ADC , ADC ,n n (void *) (void *)Test_DMA_AdcTest_DMA_Adc, ADC with DMA , ADC with DMA ,n n (void *) (void *)Ts_SepTs_Sep, ADC TSP , ADC TSP SeperateSeperate , ,n n (void *) (void *)T

203、s_AutoTs_Auto, ADC TSP Auto , ADC TSP Auto ,n n/DMA /DMA n n (void *) (void *)Test_DMATest_DMA, DMA M2M , DMA M2M ,n n (void *) (void *)Test_DMAWorstTest_DMAWorst, DMA Worst Test , DMA Worst Test ,n n (void *)Test_Dma0Xdreq, External DMA , (void *)Test_Dma0Xdreq, External DMA , n n/EINT /EINT n n (v

204、oid *) (void *)Test_EintTest_Eint, External Interrupt , External Interrupt ,n n/IIC /IIC n n (void *) (void *)Test_IicTest_Iic, IIC(KS24C080)INT , IIC(KS24C080)INT ,n n (void *)Test_Iic2, IIC(KS24C080)POL , (void *)Test_Iic2, IIC(KS24C080)POL ,n n/IIS /IIS n n (void *) (void *)Record_IisRecord_Iis,

205、, RecoReco IIS UDA1341 , IIS UDA1341 ,n n (void *) (void *)Test_IisTest_Iis, Play IIS UDA1341 , Play IIS UDA1341 ,n n/Interrupt /Interrupt n n (void *) (void *)Test_FiqTest_Fiq, FIQ Interrupt , FIQ Interrupt ,n n (void *) (void *)Change_IntPrioritiesChange_IntPriorities, Change INT Priority , Change

206、 INT Priority ,n n/IrDA /IrDA n n (void *) (void *)Test_IrDA_RxTest_IrDA_Rx, UART2 IrDA Rx , UART2 IrDA Rx ,n n (void *) (void *)Test_IrDA_TxTest_IrDA_Tx, UART2 IrDA , UART2 IrDA TxTx n n/LCD /LCD n n(void *)Test_Lcd_Stn_1Bit, STN 1Bit ,(void *)Test_Lcd_Stn_1Bit, STN 1Bit ,n n(void *)Test_Lcd_Stn_2B

207、it, STN 2Bit ,(void *)Test_Lcd_Stn_2Bit, STN 2Bit ,n n(void *)Test_Lcd_Stn_4Bit, STN 4Bit , (void *)Test_Lcd_Stn_4Bit, STN 4Bit , n n(void *)Test_Lcd_Cstn_8Bit, CSTN 8Bit ,(void *)Test_Lcd_Cstn_8Bit, CSTN 8Bit ,n n(void *)Test_Lcd_Cstn_8Bit_On, CSTN 8Bit On , (void *)Test_Lcd_Cstn_8Bit_On, CSTN 8Bit

208、 On , n n(void *)Test_Lcd_Cstn_12Bit, CSTN 12Bit ,(void *)Test_Lcd_Cstn_12Bit, CSTN 12Bit ,n n(void *)Test_Lcd_Tft_8Bit_240320, TFT240320 8Bit ,(void *)Test_Lcd_Tft_8Bit_240320, TFT240320 8Bit ,n n(void *)Test_Lcd_Tft_8Bit_240320_On, TFT240320 8Bit On , (void *)Test_Lcd_Tft_8Bit_240320_On, TFT240320

209、 8Bit On , n n(void *)Test_Lcd_Tft_16Bit_240320, TFT240320 16Bit ,(void *)Test_Lcd_Tft_16Bit_240320, TFT240320 16Bit ,n n(void *)Test_Lcd_Tft_1Bit_640480, TFT640480 1Bit ,(void *)Test_Lcd_Tft_1Bit_640480, TFT640480 1Bit ,n n(void *)Test_Lcd_Tft_8Bit_640480, TFT640480 8Bit ,(void *)Test_Lcd_Tft_8Bit_

210、640480, TFT640480 8Bit ,n n(void *)Test_Lcd_Tft_16Bit_640480, TFT640480 16Bit ,(void *)Test_Lcd_Tft_16Bit_640480, TFT640480 16Bit ,n n(void *)Test_Lcd_Tft_8Bit_640480_Bswp, TFT640480 BSWP (void *)Test_Lcd_Tft_8Bit_640480_Bswp, TFT640480 BSWP ,n n(void *)Test_Lcd_Tft_8Bit_640480_Palette, TFT640480 (v

211、oid *)Test_Lcd_Tft_8Bit_640480_Palette, TFT640480 Palette , Palette , n n(void *)Test_Lcd_Tft_16Bit_640480_Hwswp,TFT640480 (void *)Test_Lcd_Tft_16Bit_640480_Hwswp,TFT640480 HWSWP ,HWSWP ,n n/Memory/Memoryn n/MPLL/MPLLn n(void *)(void *)Test_PLLTest_PLL, MPLL Change , MPLL Change ,n n(void *)(void *)

212、ChangePLLChangePLL, MPLL MPS Change , MPLL MPS Change ,n n(void *)(void *)Test_PllOnOffTest_PllOnOff, MPLL On/Off , , MPLL On/Off , n n/PMS/PMSn n(void *)(void *)Test_SlowModeTest_SlowMode, PMS Slow , , PMS Slow , n n(void *)(void *)Test_HoldModeTest_HoldMode, PMS Hold , , PMS Hold , n n(void *)(voi

213、d *)Test_IdleModeTest_IdleMode, PMS Idle , PMS Idle ,n n(void *)(void *)Test_MMUIdleModeTest_MMUIdleMode, PMS Idle(MMU) , PMS Idle(MMU) ,n n(void *)(void *)Test_IdleModeHardTest_IdleModeHard, PMS Idle Hard , PMS Idle Hard ,n n(void *)(void *)Test_InitSDRAMTest_InitSDRAM, PMS SDRAM Init , PMS SDRAM I

214、nit ,n n(void *)(void *)Test_StopModeTest_StopMode, PMS STOP , PMS STOP ,n n(void *)(void *)Test_PowerOffModeTest_PowerOffMode, PMS Power-Off STOP , , PMS Power-Off STOP , n n(void *)Test_PowerOffMode_100Hz, PMS Power-Off 100Hz ,(void *)Test_PowerOffMode_100Hz, PMS Power-Off 100Hz ,n n(void *)(void

215、*)MeasurePowerConsumptionMeasurePowerConsumption, PMS Measure Power , , PMS Measure Power , n n/RTC/RTCn n (void *) (void *)Test_Rtc_AlarmTest_Rtc_Alarm, RTC Alarm , RTC Alarm ,n n (void *) (void *)Display_RtcDisplay_Rtc, RTC Display , , RTC Display , n n (void *) (void *)RndRst_RtcRndRst_Rtc, RTC R

216、ound Reset , , RTC Round Reset , n n (void *) (void *)Test_Rtc_TickTest_Rtc_Tick, RTC Tick , RTC Tick ,n n/SDI/SDIn n (void *) (void *)Test_SDITest_SDI, SDI Write/Read , SDI Write/Read ,n n/SPI/SPIn n (void*) (void*) Test_Spi_MS_intTest_Spi_MS_int, SPI0 , SPI0 RxTxRxTx IntInt , ,n n (void *) (void *

217、)Test_Spi_MS_pollTest_Spi_MS_poll, SPI0 , SPI0 RxTxRxTx POLL , POLL ,n n (void *)Test_Spi_M_Tx_DMA1, SPI0 Master (void *)Test_Spi_M_Tx_DMA1, SPI0 Master TxTx DMA1 , DMA1 ,n n (void *)Test_Spi_S_Rx_DMA1, SPI0 Slave Rx DMA1 , (void *)Test_Spi_S_Rx_DMA1, SPI0 Slave Rx DMA1 ,n n (void *)Test_Spi_M_Rx_DM

218、A1, SPI0 Master Rx DMA1 , (void *)Test_Spi_M_Rx_DMA1, SPI0 Master Rx DMA1 ,n n (void *)Test_Spi_S_Tx_DMA1, SPI0 Slave (void *)Test_Spi_S_Tx_DMA1, SPI0 Slave TxTx DMA1 , DMA1 ,n n (void *) (void *)Test_Spi_M_IntTest_Spi_M_Int, SPI0 Master , SPI0 Master RxTxRxTx INT,INT,n n (void *) (void *)Test_Spi_S

219、_IntTest_Spi_S_Int, SPI0 Slave , SPI0 Slave RxTxRxTx INT , INT ,n n/Timer/Timern n (void *) (void *)Test_TimerIntTest_TimerInt, Timer Interrupt , Timer Interrupt ,n n (void *) (void *)Test_TimerTest_Timer, Timer Tout , Timer Tout ,n n/UART/UARTn n (void *)Test_Uart0_Int, UART0 Rx/ (void *)Test_Uart0

220、_Int, UART0 Rx/TxTx IntInt , ,n n (void *)Test_Uart0_Dma, UART0 Rx/ (void *)Test_Uart0_Dma, UART0 Rx/TxTx DMA , DMA ,n n (void *)Test_Uart0_Fifo, UART0 Rx/ (void *)Test_Uart0_Fifo, UART0 Rx/TxTx FIFO , FIFO ,n n (void *)Test_Uart0_AfcTx, UART0 AFC (void *)Test_Uart0_AfcTx, UART0 AFC TxTx , ,n n (voi

221、d *)Test_Uart0_AfcRx, UART0 AFC Rx , (void *)Test_Uart0_AfcRx, UART0 AFC Rx ,n n (void *)Test_Uart1_Int, UART1 Rx/ (void *)Test_Uart1_Int, UART1 Rx/TxTx IntInt , ,n n (void *)Test_Uart1_Dma, UART1 Rx/ (void *)Test_Uart1_Dma, UART1 Rx/TxTx DMA , DMA ,n n (void *)Test_Uart1_Fifo, UART1 Rx/ (void *)Tes

222、t_Uart1_Fifo, UART1 Rx/TxTx FIFO , FIFO ,n n (void *)Test_Uart1_AfcTx, UART1 AFC (void *)Test_Uart1_AfcTx, UART1 AFC TxTx ,n n (void *)Test_Uart1_AfcRx, UART1 AFC Rx (void *)Test_Uart1_AfcRx, UART1 AFC Rx ,n n (void *)Test_Uart2_Int, UART2 Rx/ (void *)Test_Uart2_Int, UART2 Rx/TxTx IntInt , ,n n (voi

223、d *)Test_Uart2_Dma, UART2 Rx/ (void *)Test_Uart2_Dma, UART2 Rx/TxTx DMA , DMA ,n n (void *)Test_Uart2_Fifo, UART2 Rx/ (void *)Test_Uart2_Fifo, UART2 Rx/TxTx FIFO , FIFO ,n n/USB/USBn n (void *) (void *)Test_USBFIFOTest_USBFIFO, USB FIFO Test , USB FIFO Test ,n n/WDT/WDTn n (void *) (void *)Test_WDT_

224、IntReqTest_WDT_IntReq, WDT INT Request , WDT INT Request ,n n/ETC /ETC n n (void *) (void *)Test_XBREQTest_XBREQ, External Bus , External Bus ReqestReqest ,n n (void *) (void *)Test_NonalignedAccessTest_NonalignedAccess, , NonAlginedNonAlgined Access , Access ,n n (void *)Test_PD6710, PC Card (PD671

225、0) , (void *)Test_PD6710, PC Card (PD6710) , n n (void *) (void *)ReadPageModeReadPageMode, Read Page Mode , Read Page Mode ,n n (void *) (void *)Test_SwiIrqTest_SwiIrq, SWI , SWI ,n n (void *) (void *)Test_WaitPinTest_WaitPin, External Wait , External Wait ,n n (void *) (void *)Test_ISramTest_ISram

226、, Stone Test , , Stone Test , n n (void *) (void *)Test_NecInterruptTest_NecInterrupt, ETC NEC , ETC NEC IntInt , ,n n (void *) (void *)Test_BattFaultInterruptTest_BattFaultInterrupt, , nBATT_FAULTnBATT_FAULT intint , , n n/NAND, NOR Flash/NAND, NOR Flashn n (void *)K9S1208_PrintBadBlockNum, NAND Vi

227、ew Bad (void *)K9S1208_PrintBadBlockNum, NAND View Bad Block ,Block ,n n(void *)K9S1208_PrintBlock, NAND View Page ,(void *)K9S1208_PrintBlock, NAND View Page ,n n (void *)K9S1208_Program, NAND Write , (void *)K9S1208_Program, NAND Write , n n (void *) (void *)TestECCTestECC, NAND ECC , , NAND ECC ,

228、 n n (void *) (void *)ProgramFlashProgramFlash, NOR Flash Program , , NOR Flash Program , n n 0,0 0,0n n; ;n n/-/-n n/ / 主程序主程序主程序主程序n n/-/-n nvoid Main(void)void Main(void)n n n n intint i; i;n n MMU_InitMMU_Init(); /(); /内存管理初始化内存管理初始化内存管理初始化内存管理初始化n n ChangeClockDivider(1,1);/ ChangeClockDivider(

229、1,1);/ 定义定义定义定义FCLKFCLK、HCLKHCLK,PCLKPCLK比例比例比例比例n n /1/1:2 2:4 4n n ChangeMPllValue(0xa1,0x3,0x1); / FCLK=202.8MHz ChangeMPllValue(0xa1,0x3,0x1); / FCLK=202.8MHz n n Port_InitPort_Init(); /I/O(); /I/O口初始化口初始化口初始化口初始化n nUart_Printf(%2d:%s,i,functioni1);Uart_Printf(%2d:%s,i,functioni1);n n i+; i+;n n

230、 if(int)(functioni0)=0) / if(int)(functioni0)=0) /显示结束跳出显示结束跳出显示结束跳出显示结束跳出n n n n Uart_Printf(nUart_Printf(n););n n break; break;n n n n if(i%4)=0) if(i%4)=0)n n Uart_Printf(nUart_Printf(n); /); /每行显示每行显示每行显示每行显示4 4项项项项n n n n Uart_Printf(nSelectUart_Printf(nSelect the function to test : );/ the fun

231、ction to test : );/提示:提示:提示:提示:选择某项实验选择某项实验选择某项实验选择某项实验n n i = i = Uart_GetIntNumUart_GetIntNum(); /(); /读实验项目号放读实验项目号放读实验项目号放读实验项目号放i i中中中中n n Uart_Printf(nUart_Printf(n););n n /GPG4 Output Port 9:8 01 G /GPG4 Output Port 9:8 01 G口初始化,开口初始化,开口初始化,开口初始化,开LCDLCD显示显示显示显示n n rGPGCONrGPGCON = ( = (rGPGC

232、ONrGPGCON & 0xfffffcff) | (18); & 0xfffffcff) | (18);n n rGPGDATrGPGDAT = ( = (rGPGDATrGPGDAT & 0xffef) | (14); & 0xffef) | (1=0 & (i=0 & (i(sizeof(function)/8) ) ( (void (*)(void) (functioni0) )();/( (void (*)(void) (functioni0) )();/如如如如果果果果i i在实验范围内,做第在实验范围内,做第在实验范围内,做第在实验范围内,做第i i项实验项实验项实验项实验 24

233、10test.c 2410test.c程序提供了程序提供了程序提供了程序提供了S3C2410S3C2410所有硬件资源的驱所有硬件资源的驱所有硬件资源的驱所有硬件资源的驱动例子,根据我们系统的需要,再参考具体函数,动例子,根据我们系统的需要,再参考具体函数,动例子,根据我们系统的需要,再参考具体函数,动例子,根据我们系统的需要,再参考具体函数,对我们编程会有很大帮助。对我们编程会有很大帮助。对我们编程会有很大帮助。对我们编程会有很大帮助。第四章第四章 S3C2410的中断系统的中断系统n n4.1 S3C2410的处理器中断的处理器中断n nS3C2410S3C2410的中断控制逻辑如图的中断

234、控制逻辑如图的中断控制逻辑如图的中断控制逻辑如图4-14-1所示,所示,所示,所示,S3C2410S3C2410可以处理多可以处理多可以处理多可以处理多达达达达5656个中断源的中断请求。这些中断源可以是来自片内外个中断源的中断请求。这些中断源可以是来自片内外个中断源的中断请求。这些中断源可以是来自片内外个中断源的中断请求。这些中断源可以是来自片内外设的的中断,比如设的的中断,比如设的的中断,比如设的的中断,比如DMADMA、UARTUART和和和和I2CI2C等;也可以来自处等;也可以来自处等;也可以来自处等;也可以来自处理器的外部中断输入引脚。在这些中断源中,有如下理器的外部中断输入引脚。

235、在这些中断源中,有如下理器的外部中断输入引脚。在这些中断源中,有如下理器的外部中断输入引脚。在这些中断源中,有如下1111个个个个中断源通过分支中断控制器来申请使用中断。中断源通过分支中断控制器来申请使用中断。中断源通过分支中断控制器来申请使用中断。中断源通过分支中断控制器来申请使用中断。 n nINT_ADC A/DINT_ADC A/D转换中断;转换中断;转换中断;转换中断;n nINT_TC INT_TC 触摸屏中断;触摸屏中断;触摸屏中断;触摸屏中断;n nINT_ERR2 UART2INT_ERR2 UART2收发错误中断;收发错误中断;收发错误中断;收发错误中断;n nINT_TX

236、D2 UART2INT_TXD2 UART2发送中断;发送中断;发送中断;发送中断;n nINT_RXD2 UART2INT_RXD2 UART2接收中断;接收中断;接收中断;接收中断;n nINT_ERR1 UART1INT_ERR1 UART1收发错误中断;收发错误中断;收发错误中断;收发错误中断;n nINT_TXD1 UART1INT_TXD1 UART1发送中断;发送中断;发送中断;发送中断;n nINT_RXD1 UART1INT_RXD1 UART1接收中断;接收中断;接收中断;接收中断;n nINT_ERR0 UART0INT_ERR0 UART0收发错误中断;收发错误中断;收

237、发错误中断;收发错误中断;n nINT_TXD0 UART0INT_TXD0 UART0发送中断;发送中断;发送中断;发送中断;n nINT_RXD0 UART0INT_RXD0 UART0接收中断。接收中断。接收中断。接收中断。n n片内外设片内外设片内外设片内外设UARTnUARTn中断和外部中断输入中断和外部中断输入中断和外部中断输入中断和外部中断输入EINTnEINTn是逻辑是逻辑是逻辑是逻辑“ “或或或或” ”的关系,它们共用一根中断请求线。的关系,它们共用一根中断请求线。的关系,它们共用一根中断请求线。的关系,它们共用一根中断请求线。n n中断控制逻辑(中断控制逻辑(中断控制逻辑(

238、中断控制逻辑(interrupt controller logicinterrupt controller logic)的任务是在片内)的任务是在片内)的任务是在片内)的任务是在片内外围和外部中断源组成的多重中断发生时,选择其中一个外围和外部中断源组成的多重中断发生时,选择其中一个外围和外部中断源组成的多重中断发生时,选择其中一个外围和外部中断源组成的多重中断发生时,选择其中一个中断,通过中断,通过中断,通过中断,通过FIQ (FIQ (快速中断请求)或快速中断请求)或快速中断请求)或快速中断请求)或IRQIRQ(通用中断请求)(通用中断请求)(通用中断请求)(通用中断请求)向向向向CPUCP

239、U内核发出中断请求。内核发出中断请求。内核发出中断请求。内核发出中断请求。 图图4-1 S3C2410 的中断逻辑的中断逻辑 n n 实际上最初实际上最初实际上最初实际上最初CPUCPU内核只有内核只有内核只有内核只有FIQFIQ和和和和IRQIRQ两种中断,两种中断,两种中断,两种中断,其他中断都是各个芯片厂家在设计芯片时,通过其他中断都是各个芯片厂家在设计芯片时,通过其他中断都是各个芯片厂家在设计芯片时,通过其他中断都是各个芯片厂家在设计芯片时,通过加入一个中断控制器来扩展定义的。这些中断根加入一个中断控制器来扩展定义的。这些中断根加入一个中断控制器来扩展定义的。这些中断根加入一个中断控制

240、器来扩展定义的。这些中断根据中断优先级的高低来进行处理,更符合实际应据中断优先级的高低来进行处理,更符合实际应据中断优先级的高低来进行处理,更符合实际应据中断优先级的高低来进行处理,更符合实际应用系统中要求提供多个中断源的要求。例如,如用系统中要求提供多个中断源的要求。例如,如用系统中要求提供多个中断源的要求。例如,如用系统中要求提供多个中断源的要求。例如,如果定义所有的中断源为果定义所有的中断源为果定义所有的中断源为果定义所有的中断源为IRQIRQ中断(通过中断模式中断(通过中断模式中断(通过中断模式中断(通过中断模式寄存器设置),并且同时有寄存器设置),并且同时有寄存器设置),并且同时有寄

241、存器设置),并且同时有1010个中断发出请求,个中断发出请求,个中断发出请求,个中断发出请求,那么这时可以通过读中断优先级寄存器来确定哪那么这时可以通过读中断优先级寄存器来确定哪那么这时可以通过读中断优先级寄存器来确定哪那么这时可以通过读中断优先级寄存器来确定哪一个中断被优先执行。一个中断被优先执行。一个中断被优先执行。一个中断被优先执行。n n当多重中断源请求中断时,硬件优先级逻辑会判当多重中断源请求中断时,硬件优先级逻辑会判当多重中断源请求中断时,硬件优先级逻辑会判当多重中断源请求中断时,硬件优先级逻辑会判断哪一个中断将被执行;同时,硬件逻辑将会执断哪一个中断将被执行;同时,硬件逻辑将会执

242、断哪一个中断将被执行;同时,硬件逻辑将会执断哪一个中断将被执行;同时,硬件逻辑将会执行位于行位于行位于行位于0x180x18(或(或(或(或0x1C0x1C)地址处的指令,再由软件)地址处的指令,再由软件)地址处的指令,再由软件)地址处的指令,再由软件编程识别各个中断源,然后再根据中断源跳转到编程识别各个中断源,然后再根据中断源跳转到编程识别各个中断源,然后再根据中断源跳转到编程识别各个中断源,然后再根据中断源跳转到相应的中断处理程序。相应的中断处理程序。相应的中断处理程序。相应的中断处理程序。n n4.2中断控制中断控制n n4.2.1 程序状态寄存器的程序状态寄存器的F位和位和I位位 n

243、n如果如果如果如果CPSRCPSR(程序状态寄存器)的(程序状态寄存器)的(程序状态寄存器)的(程序状态寄存器)的F F位被设置为位被设置为位被设置为位被设置为1 1,那么那么那么那么CPUCPU将不接受来自中断控制器的将不接受来自中断控制器的将不接受来自中断控制器的将不接受来自中断控制器的FIQFIQ(快速中(快速中(快速中(快速中断请求);如果断请求);如果断请求);如果断请求);如果CPSRCPSR程序状态寄存器的程序状态寄存器的程序状态寄存器的程序状态寄存器的I I位被设位被设位被设位被设置为置为置为置为1 1,那么,那么,那么,那么CPUCPU将不接受来自中断控制器的将不接受来自中断

244、控制器的将不接受来自中断控制器的将不接受来自中断控制器的IRQIRQ(通用中断请求)。因此,为了使能(通用中断请求)。因此,为了使能(通用中断请求)。因此,为了使能(通用中断请求)。因此,为了使能FIQFIQ和和和和IRQIRQ,必须先将,必须先将,必须先将,必须先将CPSRCPSR程序状态寄存器的程序状态寄存器的程序状态寄存器的程序状态寄存器的F F位和位和位和位和I I位位位位清零,并且中断屏蔽寄存器清零,并且中断屏蔽寄存器清零,并且中断屏蔽寄存器清零,并且中断屏蔽寄存器INTMSKINTMSK中相应的位中相应的位中相应的位中相应的位也要清零。也要清零。也要清零。也要清零。 n n在使用在

245、使用在使用在使用C C语言编写控制程序时,语言编写控制程序时,语言编写控制程序时,语言编写控制程序时,CPSRCPSR在程序中是在程序中是在程序中是在程序中是不可见的。不可见的。不可见的。不可见的。F F位和位和位和位和I I位清零可由中断屏蔽寄存器位清零可由中断屏蔽寄存器位清零可由中断屏蔽寄存器位清零可由中断屏蔽寄存器INTMSKINTMSK中相应的位清零自动完成。中相应的位清零自动完成。中相应的位清零自动完成。中相应的位清零自动完成。n n4.2.2 中断模式(中断模式(INTMOD)n nS3C2410提供了两种中断模式,即提供了两种中断模式,即FIQ(快(快速)模式和速)模式和IRQ(

246、通用)模式。所有的中断(通用)模式。所有的中断源在中断请求时都要确定使用那一种中断源在中断请求时都要确定使用那一种中断模式。模式。INTMOD相应位为相应位为0,选通用中断模,选通用中断模式;式;INTMOD相应位为相应位为1,选快速中断模式。,选快速中断模式。上电或复位时上电或复位时INTMOD相应位为相应位为0,默认选,默认选通用中断模式。通用中断模式。n n4.2.3 4.2.3 中中中中断断断断挂挂挂挂起起起起寄寄寄寄存存存存器器器器(INTPNDINTPND)和和和和中中中中断断断断源源源源挂挂挂挂起起起起寄存器寄存器寄存器寄存器 (SRCPNDSRCPND)n nS3C2410S3

247、C2410有两个中断挂起寄存器:中断源挂起寄存器有两个中断挂起寄存器:中断源挂起寄存器有两个中断挂起寄存器:中断源挂起寄存器有两个中断挂起寄存器:中断源挂起寄存器(SRCPNDSRCPND)和中断挂起寄存器()和中断挂起寄存器()和中断挂起寄存器()和中断挂起寄存器(INTPNDINTPND)。这两个寄)。这两个寄)。这两个寄)。这两个寄存器用于指示对应的中断源和中断是否被激活。当中断源请存器用于指示对应的中断源和中断是否被激活。当中断源请存器用于指示对应的中断源和中断是否被激活。当中断源请存器用于指示对应的中断源和中断是否被激活。当中断源请求中断时,求中断时,求中断时,求中断时,SRCPND

248、SRCPND寄存器的相应位被置寄存器的相应位被置寄存器的相应位被置寄存器的相应位被置1 1;当中断被激活;当中断被激活;当中断被激活;当中断被激活时,时,时,时,INTPNDINTPND寄存器的相应位被置寄存器的相应位被置寄存器的相应位被置寄存器的相应位被置1 1。 n n如果屏蔽位被设置为如果屏蔽位被设置为如果屏蔽位被设置为如果屏蔽位被设置为1 1,则相应的,则相应的,则相应的,则相应的SRCPNDSRCPND位会被置位会被置位会被置位会被置1 1,而,而,而,而INTPNDINTPND寄存器不会有变化;如果寄存器不会有变化;如果寄存器不会有变化;如果寄存器不会有变化;如果INTPNDINT

249、PND被置位,只要被置位,只要被置位,只要被置位,只要标志标志标志标志I I或标志或标志或标志或标志F F被清零,就会执行相应的中断服务子程序。在被清零,就会执行相应的中断服务子程序。在被清零,就会执行相应的中断服务子程序。在被清零,就会执行相应的中断服务子程序。在中断服务子程序中要先向中断服务子程序中要先向中断服务子程序中要先向中断服务子程序中要先向SRCPNDSRCPND中的相应位写中的相应位写中的相应位写中的相应位写1 1来清除挂来清除挂来清除挂来清除挂起状态,再用同样的方法来清除起状态,再用同样的方法来清除起状态,再用同样的方法来清除起状态,再用同样的方法来清除INTPNDINTPND

250、相应位的挂起状相应位的挂起状相应位的挂起状相应位的挂起状态。态。态。态。n n注意:可以通过注意:可以通过注意:可以通过注意:可以通过INTPND= INTPNDINTPND= INTPND来实现清零,以避免来实现清零,以避免来实现清零,以避免来实现清零,以避免写入不正确的数据引起错误。写入不正确的数据引起错误。写入不正确的数据引起错误。写入不正确的数据引起错误。n n4.2.4 4.2.4 中断屏蔽寄存器(中断屏蔽寄存器(中断屏蔽寄存器(中断屏蔽寄存器(INTMSKINTMSK)n n当当当当INTMSKINTMSK寄存器的相应位(屏蔽位)为寄存器的相应位(屏蔽位)为寄存器的相应位(屏蔽位)

251、为寄存器的相应位(屏蔽位)为1 1时,对应的中断时,对应的中断时,对应的中断时,对应的中断被禁止;当被禁止;当被禁止;当被禁止;当INTMSKINTMSK寄存器的屏蔽位为寄存器的屏蔽位为寄存器的屏蔽位为寄存器的屏蔽位为0 0时,则相应的中断时,则相应的中断时,则相应的中断时,则相应的中断正常实行。如果一个中断的屏蔽位为正常实行。如果一个中断的屏蔽位为正常实行。如果一个中断的屏蔽位为正常实行。如果一个中断的屏蔽位为1 1,则该中断请求不被,则该中断请求不被,则该中断请求不被,则该中断请求不被受理。受理。受理。受理。n n4.2.5 4.2.5 中断优先寄存器中断优先寄存器中断优先寄存器中断优先寄

252、存器 (PRIORITY)(PRIORITY)n n上面已介绍过,上面已介绍过,上面已介绍过,上面已介绍过,S3C2410S3C2410共有共有共有共有5656个中断源,有个中断源,有个中断源,有个中断源,有2626个中断控个中断控个中断控个中断控制器,外部中断制器,外部中断制器,外部中断制器,外部中断EXTIN823EXTIN823共用一个中断控制器,外部共用一个中断控制器,外部共用一个中断控制器,外部共用一个中断控制器,外部中断中断中断中断EXTIN47EXTIN47共用一个中断控制器,共用一个中断控制器,共用一个中断控制器,共用一个中断控制器,9 9个个个个UARTUART中断分成中断分

253、成中断分成中断分成3 3组,共用组,共用组,共用组,共用3 3个中断控制器,个中断控制器,个中断控制器,个中断控制器,ADCADC和触摸屏共用一个中断控和触摸屏共用一个中断控和触摸屏共用一个中断控和触摸屏共用一个中断控制器。中断的优先级是由主组号和从制器。中断的优先级是由主组号和从制器。中断的优先级是由主组号和从制器。中断的优先级是由主组号和从IDID号的级别控制,具号的级别控制,具号的级别控制,具号的级别控制,具体见表体见表体见表体见表4-14-1。n n中断优先级设置模块如图中断优先级设置模块如图中断优先级设置模块如图中断优先级设置模块如图4-24-2所示:所示:所示:所示:图图4-2中断

254、优先级设置图中断优先级设置图n n从上图可以看出,中断优先级产生模块共有从上图可以看出,中断优先级产生模块共有从上图可以看出,中断优先级产生模块共有从上图可以看出,中断优先级产生模块共有7 7个中断仲裁器个中断仲裁器个中断仲裁器个中断仲裁器(AIRBITER0AIRBITER6AIRBITER0AIRBITER6),每个中断仲裁器是否使能),每个中断仲裁器是否使能),每个中断仲裁器是否使能),每个中断仲裁器是否使能由寄存器由寄存器由寄存器由寄存器PRIORITY6:0PRIORITY6:0决定,每个中断仲裁器下面有决定,每个中断仲裁器下面有决定,每个中断仲裁器下面有决定,每个中断仲裁器下面有4

255、646个中断源,这些中断源对应着个中断源,这些中断源对应着个中断源,这些中断源对应着个中断源,这些中断源对应着REQ0REQ5REQ0REQ5这这这这6 6个优先级。个优先级。个优先级。个优先级。n n每个中断仲裁器可以控制每个中断仲裁器可以控制每个中断仲裁器可以控制每个中断仲裁器可以控制6 6个中断请求的优先顺序个中断请求的优先顺序个中断请求的优先顺序个中断请求的优先顺序(ARB_MODE)(ARB_MODE),仲裁器和中断请求的优先顺序如表,仲裁器和中断请求的优先顺序如表,仲裁器和中断请求的优先顺序如表,仲裁器和中断请求的优先顺序如表4-14-1示:示:示:示:其中,其中,REQ 0中断优

256、先级总是最高的,中断优先级总是最高的,REQ5中断优先级中断优先级总是最低的。总是最低的。n n4.3 S3C2410中断源中断源n n表表表表4-24-2所示为所示为所示为所示为S3C2410S3C2410的的的的5656个中断源。在个中断源。在个中断源。在个中断源。在5656个中断源中,有个中断源中,有个中断源中,有个中断源中,有3030个中断源提供给中断控制器,其中,外部中断个中断源提供给中断控制器,其中,外部中断个中断源提供给中断控制器,其中,外部中断个中断源提供给中断控制器,其中,外部中断EINT4EINT7EINT4EINT7通过通过通过通过“ “或或或或” ”的形式提供一个中断源

257、送至中的形式提供一个中断源送至中的形式提供一个中断源送至中的形式提供一个中断源送至中断控制器,断控制器,断控制器,断控制器,EINT8EINT23EINT8EINT23也通过也通过也通过也通过“ “或或或或” ”的形式提供一个的形式提供一个的形式提供一个的形式提供一个中断源送至中断控制器。中断源送至中断控制器。中断源送至中断控制器。中断源送至中断控制器。 n n5656个中断源具体来说:个中断源具体来说:个中断源具体来说:个中断源具体来说:n nEINT0EINT23(24EINT0EINT23(24个个个个) )、nBATT_FLT(1nBATT_FLT(1个个个个) )、INT_TICK(

258、1INT_TICK(1个个个个) )、INT_WDT(1INT_WDT(1个个个个) )、INT_TIMER0INT_TIMER4(5INT_TIMER0INT_TIMER4(5个个个个) )、INT_UART0INT_UART2(INT_UART0INT_UART2(各各各各3 3个,共个,共个,共个,共9 9个个个个) )、INT_LCDINT_LCD(2(2个个个个) )、INT_DMA0INT_DMA3(4INT_DMA0INT_DMA3(4个个个个) )、INT_SDI(1INT_SDI(1个个个个) )、INT_SPI0INT_SPI1INT_SPI0INT_SPI1(2(2个个个

259、个) )、INT_USBD(1INT_USBD(1个个个个) )、INT_USBH(1INT_USBH(1个个个个) )、INT_IIC(1INT_IIC(1个个个个) )、INT_RTC(1INT_RTC(1个个个个) )、INT_ADC(2INT_ADC(2个个个个) ),共,共,共,共5656个。个。个。个。n n4.4 中断控制专用寄存器中断控制专用寄存器n n在在在在4.24.2节中已介绍中断控制器有节中已介绍中断控制器有节中已介绍中断控制器有节中已介绍中断控制器有5 5个,但个,但个,但个,但S3C2410S3C2410有有有有8 8个寄存器与中断有关,有个寄存器与中断有关,有个寄

260、存器与中断有关,有个寄存器与中断有关,有5 5个专用于中断控制:源个专用于中断控制:源个专用于中断控制:源个专用于中断控制:源挂起寄存器(挂起寄存器(挂起寄存器(挂起寄存器(SRCPNDSRCPND)、中断模式寄存器)、中断模式寄存器)、中断模式寄存器)、中断模式寄存器(INTMODINTMOD)、中断屏蔽寄存器()、中断屏蔽寄存器()、中断屏蔽寄存器()、中断屏蔽寄存器(INTMSKINTMSK)、)、)、)、中断优先权寄存器(中断优先权寄存器(中断优先权寄存器(中断优先权寄存器(PRIORITYPRIORITY)和中断挂起寄)和中断挂起寄)和中断挂起寄)和中断挂起寄存器(存器(存器(存器(

261、INTPNDINTPND),与中断有关的寄存器如表),与中断有关的寄存器如表),与中断有关的寄存器如表),与中断有关的寄存器如表4-34-3所列。所列。所列。所列。n n中断源发出的中断请求首先被寄存在中断源挂起中断源发出的中断请求首先被寄存在中断源挂起中断源发出的中断请求首先被寄存在中断源挂起中断源发出的中断请求首先被寄存在中断源挂起寄存器(寄存器(寄存器(寄存器(SRCPNDSRCPND)中,中断模式寄存器)中,中断模式寄存器)中,中断模式寄存器)中,中断模式寄存器INTMODINTMOD把中断请求分为两组:快速中断请求把中断请求分为两组:快速中断请求把中断请求分为两组:快速中断请求把中断

262、请求分为两组:快速中断请求(FIQFIQ)和通用中断请求()和通用中断请求()和通用中断请求()和通用中断请求(IRQIRQ),中断优先权寄),中断优先权寄),中断优先权寄),中断优先权寄存器(存器(存器(存器(PRIORITYPRIORITY)处理中断的优先级。)处理中断的优先级。)处理中断的优先级。)处理中断的优先级。n n4.4.1 IRQ4.4.1 IRQ偏移寄存器偏移寄存器偏移寄存器偏移寄存器(INTOFFSET)(INTOFFSET)n n除上面介绍的除上面介绍的除上面介绍的除上面介绍的5 5个中断控制寄存器以外,还有几个寄存器个中断控制寄存器以外,还有几个寄存器个中断控制寄存器以

263、外,还有几个寄存器个中断控制寄存器以外,还有几个寄存器与中断控制有关。与中断控制有关。与中断控制有关。与中断控制有关。n n中断偏移寄存器中断偏移寄存器中断偏移寄存器中断偏移寄存器INTOFFSETINTOFFSET给出给出给出给出IRQIRQ模式的中断请求中模式的中断请求中模式的中断请求中模式的中断请求中被响应的中断的地址(哪个被响应的中断的地址(哪个被响应的中断的地址(哪个被响应的中断的地址(哪个IRQIRQ模式的中断请求被响应)。模式的中断请求被响应)。模式的中断请求被响应)。模式的中断请求被响应)。n n4.4.2 4.4.2 外部中断控制寄存器外部中断控制寄存器外部中断控制寄存器外部

264、中断控制寄存器( (EXTINTnEXTINTn) ) n nS3C2410S3C2410的的的的2424个外部中断有几种中断触发方式,个外部中断有几种中断触发方式,个外部中断有几种中断触发方式,个外部中断有几种中断触发方式,EXTINTnEXTINTn配置外部中断的触发类型是电平触发还是边沿触发以及触配置外部中断的触发类型是电平触发还是边沿触发以及触配置外部中断的触发类型是电平触发还是边沿触发以及触配置外部中断的触发类型是电平触发还是边沿触发以及触发的极性。发的极性。发的极性。发的极性。EXTINT2 EXTINT2 :00的具体配置参考数据手册的具体配置参考数据手册的具体配置参考数据手册的

265、具体配置参考数据手册。n n4.4.3 4.4.3 外部中断屏蔽寄存器外部中断屏蔽寄存器外部中断屏蔽寄存器外部中断屏蔽寄存器(EINTMASK)(EINTMASK)n n EINTMASK23EINTMASK23:44分别对应外部中断分别对应外部中断分别对应外部中断分别对应外部中断234234,该位等于,该位等于,该位等于,该位等于1 1,对应外部中断被屏蔽;该位等于,对应外部中断被屏蔽;该位等于,对应外部中断被屏蔽;该位等于,对应外部中断被屏蔽;该位等于0 0,对应外部中断被使,对应外部中断被使,对应外部中断被使,对应外部中断被使能,能,能,能,EINTMASK3 EINTMASK3 :0

266、0保留。保留。保留。保留。n n4.5 中断控制程序编写步骤中断控制程序编写步骤n n4.5.1 4.5.1 主程序工作主程序工作主程序工作主程序工作n n 先清除中断源挂起寄存器(先清除中断源挂起寄存器(先清除中断源挂起寄存器(先清除中断源挂起寄存器(SRCPNDSRCPND)和中断挂起寄存)和中断挂起寄存)和中断挂起寄存)和中断挂起寄存器(器(器(器(INTPNDINTPND),可用),可用),可用),可用rSRCPNDrSRCPND= = rSRCPNDrSRCPND和和和和rINTPNDrINTPND=r INTPND=r INTPND来完成;来完成;来完成;来完成;n n 设中断模式

267、,这里使用通用中断,设中断模式,这里使用通用中断,设中断模式,这里使用通用中断,设中断模式,这里使用通用中断,rINTMOD=0x00000000rINTMOD=0x00000000;因上电或复位时;因上电或复位时;因上电或复位时;因上电或复位时rINTMODrINTMOD是清是清是清是清0 0的,这步也可以不做。的,这步也可以不做。的,这步也可以不做。的,这步也可以不做。n n I/O I/O口初始化,有些中断源要通过口初始化,有些中断源要通过口初始化,有些中断源要通过口初始化,有些中断源要通过I/OI/O口向口向口向口向CPUCPU申请中断,申请中断,申请中断,申请中断,如外部中断如外部中

268、断如外部中断如外部中断0 0(EXTINT0EXTINT0)通过)通过)通过)通过F F口的口的口的口的GPF0GPF0、外部中断、外部中断、外部中断、外部中断1111(EXTINT11EXTINT11)通过)通过)通过)通过G G口的口的口的口的GPG3GPG3向向向向CPUCPU申请中断,此时申请中断,此时申请中断,此时申请中断,此时两个口的控制寄存器两个口的控制寄存器两个口的控制寄存器两个口的控制寄存器GPFCONGPFCON和和和和GPGCONGPGCON的要设置成:的要设置成:的要设置成:的要设置成:GPFCONGPFCON11:0=10=1,0 0;GPGCON7GPGCON7:6

269、=16=1,0 0。具体见下章。具体见下章。具体见下章。具体见下章I/OI/O口介口介口介口介绍。绍。绍。绍。n n 设中断服务函数地址,设中断服务函数地址,设中断服务函数地址,设中断服务函数地址,S3C2410S3C2410在在在在2410addr.h2410addr.h中定义了中定义了中定义了中定义了4040个宏,设置了系统支持的中断服务函数的指针,设中断服个宏,设置了系统支持的中断服务函数的指针,设中断服个宏,设置了系统支持的中断服务函数的指针,设中断服个宏,设置了系统支持的中断服务函数的指针,设中断服务函数地址就是把我们编写的中断服务函数的地址(就是务函数地址就是把我们编写的中断服务函

270、数的地址(就是务函数地址就是把我们编写的中断服务函数的地址(就是务函数地址就是把我们编写的中断服务函数的地址(就是中断服务函数的名字)赋予相应的函数指针。函数指针定中断服务函数的名字)赋予相应的函数指针。函数指针定中断服务函数的名字)赋予相应的函数指针。函数指针定中断服务函数的名字)赋予相应的函数指针。函数指针定义如下:义如下:义如下:义如下:n n/ ISR/ ISRn n#define #define pISR_RESETpISR_RESET (*(unsigned (*(unsigned *)(_ISR_STARTADDRESS+0x0)*)(_ISR_STARTADDRESS+0x0)

271、n n#define #define pISR_UNDEFpISR_UNDEF (*(unsigned (*(unsigned *)(_ISR_STARTADDRESS+0x4)*)(_ISR_STARTADDRESS+0x4)n n#define #define pISR_SWIpISR_SWI (*(unsigned (*(unsigned *)(_ISR_STARTADDRESS+0x8)*)(_ISR_STARTADDRESS+0x8)n n#define #define pISR_PABORTpISR_PABORT (*(unsigned (*(unsigned *)(_ISR_ST

272、ARTADDRESS+0xc)*)(_ISR_STARTADDRESS+0xc)n n#define #define pISR_DABORTpISR_DABORT (*(unsigned (*(unsigned *)(_ISR_STARTADDRESS+0x10)*)(_ISR_STARTADDRESS+0x10)n n#define #define pISR_RESERVEDpISR_RESERVED (*(unsigned (*(unsigned *)(_ISR_STARTADDRESS+0x14)*)(_ISR_STARTADDRESS+0x14)n n#define #define p

273、ISR_IRQpISR_IRQ (*(unsigned (*(unsigned *)(_ISR_STARTADDRESS+0x18)*)(_ISR_STARTADDRESS+0x18)n n#define #define pISR_FIQpISR_FIQ (*(unsigned (*(unsigned *)(_ISR_STARTADDRESS+0x1c)*)(_ISR_STARTADDRESS+0x1c)n n#define pISR_EINT0 (*(unsigned #define pISR_EINT0 (*(unsigned *)(_ISR_STARTADDRESS+0x20)*)(_I

274、SR_STARTADDRESS+0x20)n n#define pISR_EINT1 (*(unsigned #define pISR_EINT1 (*(unsigned *)(_ISR_STARTADDRESS+0x24)*)(_ISR_STARTADDRESS+0x24)n n#define pISR_EINT2 (*(unsigned #define pISR_EINT2 (*(unsigned *)(_ISR_STARTADDRESS+0x28)*)(_ISR_STARTADDRESS+0x28)n n#define pISR_EINT3 (*(unsigned #define pIS

275、R_EINT3 (*(unsigned *)(_ISR_STARTADDRESS+0x2c)*)(_ISR_STARTADDRESS+0x2c)n n#define pISR_EINT4_7 (*(unsigned #define pISR_EINT4_7 (*(unsigned *)(_ISR_STARTADDRESS+0x30)*)(_ISR_STARTADDRESS+0x30)n n#define pISR_EINT8_23 (*(unsigned #define pISR_EINT8_23 (*(unsigned *)(_ISR_STARTADDRESS+0x34)*)(_ISR_ST

276、ARTADDRESS+0x34)n n#define pISR_NOTUSED6 (*(unsigned #define pISR_NOTUSED6 (*(unsigned *)(_ISR_STARTADDRESS+0x38)*)(_ISR_STARTADDRESS+0x38)n n#define #define pISR_BAT_FLTpISR_BAT_FLT (*(unsigned (*(unsigned *)(_ISR_STARTADDRESS+0x3c)*)(_ISR_STARTADDRESS+0x3c)n n#define #define pISR_TICKpISR_TICK (*(

277、unsigned (*(unsigned *)(_ISR_STARTADDRESS+0x40)*)(_ISR_STARTADDRESS+0x40)n n#define #define pISR_WDTpISR_WDT (*(unsigned (*(unsigned *)(_ISR_STARTADDRESS+0x44)*)(_ISR_STARTADDRESS+0x44)n n#define pISR_TIMER0 (*(unsigned #define pISR_TIMER0 (*(unsigned *)(_ISR_STARTADDRESS+0x48)*)(_ISR_STARTADDRESS+0

278、x48)n n#define pISR_TIMER1 (*(unsigned #define pISR_TIMER1 (*(unsigned *)(_ISR_STARTADDRESS+0x4c)*)(_ISR_STARTADDRESS+0x4c)n n#define pISR_TIMER2 (*(unsigned #define pISR_TIMER2 (*(unsigned *)(_ISR_STARTADDRESS+0x50)*)(_ISR_STARTADDRESS+0x50)n n#define pISR_TIMER3 (*(unsigned #define pISR_TIMER3 (*(

279、unsigned *)(_ISR_STARTADDRESS+0x54)*)(_ISR_STARTADDRESS+0x54)n n#define pISR_TIMER4 (*(unsigned #define pISR_TIMER4 (*(unsigned *)(_ISR_STARTADDRESS+0x58)*)(_ISR_STARTADDRESS+0x58)n n#define pISR_UART2 (*(unsigned #define pISR_UART2 (*(unsigned *)(_ISR_STARTADDRESS+0x5c)*)(_ISR_STARTADDRESS+0x5c)n n

280、#define #define pISR_LCDpISR_LCD (*(unsigned (*(unsigned *)(_ISR_STARTADDRESS+0x60)*)(_ISR_STARTADDRESS+0x60)n n#define pISR_DMA0 (*(unsigned #define pISR_DMA0 (*(unsigned *)(_ISR_STARTADDRESS+0x64)*)(_ISR_STARTADDRESS+0x64)n n#define pISR_DMA1 (*(unsigned #define pISR_DMA1 (*(unsigned *)(_ISR_START

281、ADDRESS+0x68)*)(_ISR_STARTADDRESS+0x68)n n#define pISR_DMA2 (*(unsigned #define pISR_DMA2 (*(unsigned *)(_ISR_STARTADDRESS+0x6c)*)(_ISR_STARTADDRESS+0x6c)n n#define pISR_DMA3 (*(unsigned #define pISR_DMA3 (*(unsigned *)(_ISR_STARTADDRESS+0x70)*)(_ISR_STARTADDRESS+0x70)n n#define #define pISR_SDIpISR

282、_SDI (*(unsigned (*(unsigned *)(_ISR_STARTADDRESS+0x74)*)(_ISR_STARTADDRESS+0x74)n n#define pISR_SPI0 (*(unsigned #define pISR_SPI0 (*(unsigned *)(_ISR_STARTADDRESS+0x78)*)(_ISR_STARTADDRESS+0x78)n n#define pISR_UART1 (*(unsigned #define pISR_UART1 (*(unsigned *)(_ISR_STARTADDRESS+0x7c)*)(_ISR_START

283、ADDRESS+0x7c)n n#define pISR_NOTUSED24 (*(unsigned #define pISR_NOTUSED24 (*(unsigned *)(_ISR_STARTADDRESS+0x80)*)(_ISR_STARTADDRESS+0x80)n n#define #define pISR_USBDpISR_USBD (*(unsigned (*(unsigned *)(_ISR_STARTADDRESS+0x84)*)(_ISR_STARTADDRESS+0x84)n n#define #define pISR_USBHpISR_USBH (*(unsigne

284、d (*(unsigned *)(_ISR_STARTADDRESS+0x88)*)(_ISR_STARTADDRESS+0x88)n n#define #define pISR_IICpISR_IIC (*(unsigned (*(unsigned *)(_ISR_STARTADDRESS+0x8c)*)(_ISR_STARTADDRESS+0x8c)n n#define pISR_UART0 (*(unsigned #define pISR_UART0 (*(unsigned *)(_ISR_STARTADDRESS+0x90)*)(_ISR_STARTADDRESS+0x90)n n#d

285、efine pISR_SPI1 (*(unsigned #define pISR_SPI1 (*(unsigned *)(_ISR_STARTADDRESS+0x94)*)(_ISR_STARTADDRESS+0x94)n n#define #define pISR_RTCpISR_RTC (*(unsigned (*(unsigned *)(_ISR_STARTADDRESS+0x98)*)(_ISR_STARTADDRESS+0x98)n n#define #define pISR_ADCpISR_ADC (*(unsigned (*(unsigned *)(_ISR_STARTADDRE

286、SS+0x9c)*)(_ISR_STARTADDRESS+0x9c)n n从上面可以看出,每个中断源的中断服务函数指针名是固从上面可以看出,每个中断源的中断服务函数指针名是固从上面可以看出,每个中断源的中断服务函数指针名是固从上面可以看出,每个中断源的中断服务函数指针名是固定的:定的:定的:定的:pISRpISR+ +中断源。中断源。中断源。中断源。n n 设中断触发方式,触发方式有设中断触发方式,触发方式有设中断触发方式,触发方式有设中断触发方式,触发方式有5 5种,有上升沿、下降沿、种,有上升沿、下降沿、种,有上升沿、下降沿、种,有上升沿、下降沿、双沿、低电平、高电平触发方式,外部中断触发

287、方式在外双沿、低电平、高电平触发方式,外部中断触发方式在外双沿、低电平、高电平触发方式,外部中断触发方式在外双沿、低电平、高电平触发方式,外部中断触发方式在外部中断控制寄存器部中断控制寄存器部中断控制寄存器部中断控制寄存器( (EXTINTnEXTINTn) )中设定。如中设定。如中设定。如中设定。如EINT0EINT0触发方式触发方式触发方式触发方式在在在在EXTINT02EXTINT02:0 0 中设定,中设定,中设定,中设定,22:0=0000=000低电平、低电平、低电平、低电平、001001高电高电高电高电平、平、平、平、01X01X下降沿、下降沿、下降沿、下降沿、10X10X上升沿

288、、上升沿、上升沿、上升沿、11X11X双沿触发,更详细内容双沿触发,更详细内容双沿触发,更详细内容双沿触发,更详细内容见见见见S3C2410.pdf.S3C2410.pdf.。n n 取消总中断屏蔽和子中断屏蔽,等待中断,如下面实验取消总中断屏蔽和子中断屏蔽,等待中断,如下面实验取消总中断屏蔽和子中断屏蔽,等待中断,如下面实验取消总中断屏蔽和子中断屏蔽,等待中断,如下面实验例程通过例程通过例程通过例程通过rEINTMASKrEINTMASK&=(111)&=(111);rINTMASKrINTMASK&=(BIT_EINT0|BIT_EINT8_23)&=(BIT_EINT0|BIT_EINT

289、8_23);来实现。;来实现。;来实现。;来实现。n n4.5.2 4.5.2 中断服务程序工作中断服务程序工作中断服务程序工作中断服务程序工作n n 在中断服务程序中,先屏蔽中断,防止其他中断产生干在中断服务程序中,先屏蔽中断,防止其他中断产生干在中断服务程序中,先屏蔽中断,防止其他中断产生干在中断服务程序中,先屏蔽中断,防止其他中断产生干扰我们中断服务程序的执行;扰我们中断服务程序的执行;扰我们中断服务程序的执行;扰我们中断服务程序的执行;n n 执行中断服务程序;执行中断服务程序;执行中断服务程序;执行中断服务程序;n n 清中断源挂起寄存器(清中断源挂起寄存器(清中断源挂起寄存器(清中

290、断源挂起寄存器(SRCPNDSRCPND)和中断挂起寄存器)和中断挂起寄存器)和中断挂起寄存器)和中断挂起寄存器(INTPNDINTPND););););n n 取消总中断屏蔽和子中断屏蔽,等待新中断产生;取消总中断屏蔽和子中断屏蔽,等待新中断产生;取消总中断屏蔽和子中断屏蔽,等待新中断产生;取消总中断屏蔽和子中断屏蔽,等待新中断产生;n n 中断返回。中断返回。中断返回。中断返回。n n4.5.3 4.5.3 中断服务程序示例中断服务程序示例中断服务程序示例中断服务程序示例n n在主程序中,系统初始化后,程序进入死循环,等待中断。在主程序中,系统初始化后,程序进入死循环,等待中断。在主程序中

291、,系统初始化后,程序进入死循环,等待中断。在主程序中,系统初始化后,程序进入死循环,等待中断。n n 同时,初始化定时器同时,初始化定时器同时,初始化定时器同时,初始化定时器1 1,设定时器中断时间,当设定时器,设定时器中断时间,当设定时器,设定时器中断时间,当设定时器,设定时器中断时间,当设定时器定时时间到,产生中断。定时时间到,产生中断。定时时间到,产生中断。定时时间到,产生中断。n n在北京精仪达盛科技公司在北京精仪达盛科技公司在北京精仪达盛科技公司在北京精仪达盛科技公司EL-ARM830EL-ARM830教学实验系统中,教学实验系统中,教学实验系统中,教学实验系统中,接有两个接有两个接

292、有两个接有两个LEDLED发光管,两个发光管,两个发光管,两个发光管,两个LEDLED发光管的阴极分别接发光管的阴极分别接发光管的阴极分别接发光管的阴极分别接I/OI/O口口口口G G的的的的bit8bit8和和和和bit9bit9,阳极通过电阻接电源。,阳极通过电阻接电源。,阳极通过电阻接电源。,阳极通过电阻接电源。n n在中断服务程序中,把在中断服务程序中,把在中断服务程序中,把在中断服务程序中,把LED1LED1和和和和LED2LED2两只发光管循环亮灭,两只发光管循环亮灭,两只发光管循环亮灭,两只发光管循环亮灭,每循环亮灭一次,说明来一次中断。关于定时器操作,可每循环亮灭一次,说明来一

293、次中断。关于定时器操作,可每循环亮灭一次,说明来一次中断。关于定时器操作,可每循环亮灭一次,说明来一次中断。关于定时器操作,可参考第十一章内容。参考第十一章内容。参考第十一章内容。参考第十一章内容。n n/引入头文件引入头文件引入头文件引入头文件n n#include #include n n#include 2410LIB.h#include 2410LIB.hn n#include 2410SLIB.h#include 2410SLIB.hn n#include 2410ADDR.h#include 2410ADDR.hn n#include #include option.hoption

294、.h n n#include #include mmu.hmmu.h n n#include #include def.hdef.h n n#include #include target.htarget.h n n#include #include n n#include #include config.hconfig.h n n/-/-n n/ / 主程序主程序主程序主程序n n/-/-n nvoid Main(void)void Main(void)n nsys_initsys_init();();n nwhile(1);while(1);n n n n/-/-n n/ / 定时器定时器

295、定时器定时器1 1初始化程序初始化程序初始化程序初始化程序n n/-/-n nvoid Timer1_init(void)void Timer1_init(void)n n n n rGPGCONrGPGCON = = rGPGCONrGPGCON & 0xfff0ffff | 0x00050000; / & 0xfff0ffff | 0x00050000; /配置配置配置配置GPGGPG口为信号输出口为信号输出口为信号输出口为信号输出n n rGPGDATrGPGDAT = = rGPGDATrGPGDAT | 0x300; | 0x300;n n rTCFG0 = 255; / Presc

296、aler0=255 rTCFG0 = 255; / Prescaler0=255n n rTCFG1 = 0 4; / rTCFG1 = 0 4; / n n rTCNTB1 = 48828; / rTCNTB1 = 48828; / 在在在在pclk=50MHZpclk=50MHZ下,下,下,下,1 1秒钟的记数秒钟的记数秒钟的记数秒钟的记数值值值值rTCNTB1 = 50000000 / 4 / 256 = 48828;rTCNTB1 = 50000000 / 4 / 256 = 48828;n n rTCMPB1 = 0x00; rTCMPB1 = 0x00;n n rTCONrTCON

297、 = (1 11) | (1 9) | (0 8); / = (1 11) | (1 9) | (0 8); /禁用定时器禁用定时器禁用定时器禁用定时器1 1,手动加载,手动加载,手动加载,手动加载n n rTCONrTCON = (1 11) | (0 9) | (1 8); / = (1 11) | (0 9) | (1 8); /启动定时器启动定时器启动定时器启动定时器1 1,自动装载,自动装载,自动装载,自动装载n n n n n n/-/-n n/ / 定时器中断服务子程序定时器中断服务子程序定时器中断服务子程序定时器中断服务子程序n n/-/-n nintint flag; fla

298、g;n nvoid _void _irqirq Timer1_ISR( void ) Timer1_ISR( void )n n n n if (flag = 0)if (flag = 0)n n n n rGPGDATrGPGDAT = = rGPGDATrGPGDAT & 0xeff | 0x200; & 0xeff | 0x200;n n flag = 1;flag = 1;n n n n elseelsen n rGPGDATrGPGDAT = = rGPGDATrGPGDAT & 0xdff | 0x100; & 0xdff | 0x100;n n flag = 0;flag = 0

299、;n n n n rSRCPNDrSRCPND |= BIT_TIMER1; |= BIT_TIMER1;n n rINTPNDrINTPND |= BIT_TIMER1; |= BIT_TIMER1;n n n n/-/-n n/ / 定时器中断初始化程序定时器中断初始化程序定时器中断初始化程序定时器中断初始化程序n n/-/-n nvoid Timer1INT_Init(void)void Timer1INT_Init(void) / /定时器接口使能定时器接口使能定时器接口使能定时器接口使能n n n n if ( if (rINTPNDrINTPND & BIT_TIMER1) & B

300、IT_TIMER1)n n n n rSRCPNDrSRCPND |= BIT_TIMER1; |= BIT_TIMER1;n n n n pISR_TIMER1 = (int)Timer1_ISR; pISR_TIMER1 = (int)Timer1_ISR;n n rINTMSKrINTMSK &= (BIT_TIMER1); / &= (BIT_TIMER1); /开中断;开中断;开中断;开中断; n n n n/-/-n n/ / 目标板初始化程序目标板初始化程序目标板初始化程序目标板初始化程序, ,主函数中只需调用此函数,即可完主函数中只需调用此函数,即可完主函数中只需调用此函数,即

301、可完主函数中只需调用此函数,即可完成目标板的初始化成目标板的初始化成目标板的初始化成目标板的初始化n n/-/-n nvoid void sys_init(voidsys_init(void) )n n n nMMU_InitMMU_Init();();n nChangeClockDivider(1,1); / 1:2:4 ChangeClockDivider(1,1); / 1:2:4 n nChangeMPllValue(0xa1,0x3,0x1); / ChangeMPllValue(0xa1,0x3,0x1); / FCLK=202.8MHz FCLK=202.8MHz n n Isr

302、_InitIsr_Init();();n n Port_InitPort_Init();();n n n n Timer1_init(); Timer1_init();n n Timer1INT_Init(); Timer1INT_Init(); n n n nUart_Init(0,115200);Uart_Init(0,115200);n n Uart_Select(0); Uart_Select(0); n n n n n n第四章习题与练习第四章习题与练习第四章习题与练习第四章习题与练习n n1 1,S3C2410S3C2410的中断模式有哪两种?的中断模式有哪两种?的中断模式有哪两种

303、?的中断模式有哪两种?n nS3C2410S3C2410的中断控制寄存器有几个,每个的作用是什么?的中断控制寄存器有几个,每个的作用是什么?的中断控制寄存器有几个,每个的作用是什么?的中断控制寄存器有几个,每个的作用是什么?n nS3C2410S3C2410的中断源挂起寄存器和中断挂起寄存器的区别和作用的中断源挂起寄存器和中断挂起寄存器的区别和作用的中断源挂起寄存器和中断挂起寄存器的区别和作用的中断源挂起寄存器和中断挂起寄存器的区别和作用有哪些?有哪些?有哪些?有哪些?n n如何清除中断请求?如何清除中断请求?如何清除中断请求?如何清除中断请求?n n如何使能某中断源申请的中断?如何使能某中断

304、源申请的中断?如何使能某中断源申请的中断?如何使能某中断源申请的中断?n n如何屏蔽某中断源申请的中断?如何屏蔽某中断源申请的中断?如何屏蔽某中断源申请的中断?如何屏蔽某中断源申请的中断?n n7, 7, 外部中断外部中断外部中断外部中断0 0(EXTINT0EXTINT0)通过)通过)通过)通过F F口的口的口的口的GPF0GPF0、外部中断、外部中断、外部中断、外部中断1111(EXTINT11EXTINT11)通过)通过)通过)通过G G口的口的口的口的GPG3GPG3向向向向CPUCPU申请中断,此时两申请中断,此时两申请中断,此时两申请中断,此时两个口的控制寄存器个口的控制寄存器个口

305、的控制寄存器个口的控制寄存器GPFCONGPFCON和和和和GPGCONGPGCON如何设置?如何设置?如何设置?如何设置? n n8 8,阅读例子程序,熟悉中断程序编写步骤。,阅读例子程序,熟悉中断程序编写步骤。,阅读例子程序,熟悉中断程序编写步骤。,阅读例子程序,熟悉中断程序编写步骤。n n9 9,如何绕过项目和仿真器设置以及项目初始化程序的编写困,如何绕过项目和仿真器设置以及项目初始化程序的编写困,如何绕过项目和仿真器设置以及项目初始化程序的编写困,如何绕过项目和仿真器设置以及项目初始化程序的编写困难,快速完成嵌入式程序设计?难,快速完成嵌入式程序设计?难,快速完成嵌入式程序设计?难,快

306、速完成嵌入式程序设计?n n1010,S3C2410S3C2410中断有几种触发方式?如何选择中断触发方式?中断有几种触发方式?如何选择中断触发方式?中断有几种触发方式?如何选择中断触发方式?中断有几种触发方式?如何选择中断触发方式?第五章第五章 S3C2410的的I/O口和口和I/O操作操作n nS3C2410S3C2410芯片上共有芯片上共有芯片上共有芯片上共有7171个多功能的输人个多功能的输人个多功能的输人个多功能的输人/ /输出引脚,输出引脚,输出引脚,输出引脚,它们分为它们分为它们分为它们分为8 8组组组组I/OI/O端口。端口。端口。端口。n n 1 1个个个个2323位输出端口

307、位输出端口位输出端口位输出端口( (端口端口端口端口A)A);n n 2 2个个个个1111位输人位输人位输人位输人/ /输出端口输出端口输出端口输出端口( (端口端口端口端口B B, H)H);n n 4 4个个个个1616位输入位输入位输入位输入/ /输出端口输出端口输出端口输出端口( (端口端口端口端口C C,DD,E E,G)G);n n 1 1个个个个8 8位输人位输人位输人位输人/ /输出端口输出端口输出端口输出端口( (端口端口端口端口F)F)。n n 可以很容易地通过每组端口来满足不同系统配可以很容易地通过每组端口来满足不同系统配可以很容易地通过每组端口来满足不同系统配可以很容

308、易地通过每组端口来满足不同系统配置和设计的需要。在运行程序之前,必须置和设计的需要。在运行程序之前,必须置和设计的需要。在运行程序之前,必须置和设计的需要。在运行程序之前,必须n n对每个用到的引脚功能进行设置。如果某些引脚对每个用到的引脚功能进行设置。如果某些引脚对每个用到的引脚功能进行设置。如果某些引脚对每个用到的引脚功能进行设置。如果某些引脚的复用功能(第二功能)没有使用,那么可以先的复用功能(第二功能)没有使用,那么可以先的复用功能(第二功能)没有使用,那么可以先的复用功能(第二功能)没有使用,那么可以先将该引脚设置为将该引脚设置为将该引脚设置为将该引脚设置为I/OI/O口。口。口。口

309、。n n 5.1 S3C2410 I/O口描述口描述n n 端口控制寄存器端口控制寄存器端口控制寄存器端口控制寄存器(GPACON(GPACONGPHCON)GPHCON)。n n在在在在S3C2410S3C2410芯片中,大部分引脚是复用的,所以必芯片中,大部分引脚是复用的,所以必芯片中,大部分引脚是复用的,所以必芯片中,大部分引脚是复用的,所以必须对每个引脚进行配置。端口控制寄存器定义了须对每个引脚进行配置。端口控制寄存器定义了须对每个引脚进行配置。端口控制寄存器定义了须对每个引脚进行配置。端口控制寄存器定义了每个引脚的功能。每个引脚的功能。每个引脚的功能。每个引脚的功能。n n 端口数据

310、寄存器端口数据寄存器端口数据寄存器端口数据寄存器(GPADATGPHDAT)(GPADATGPHDAT)。如果该端口。如果该端口。如果该端口。如果该端口定义为输出端口,那么可以向定义为输出端口,那么可以向定义为输出端口,那么可以向定义为输出端口,那么可以向PnDATPnDAT的相应位写的相应位写的相应位写的相应位写数据。如果该端口定义为输人端端口,可以从数据。如果该端口定义为输人端端口,可以从数据。如果该端口定义为输人端端口,可以从数据。如果该端口定义为输人端端口,可以从PnDATPnDAT的相应位读入数据。的相应位读入数据。的相应位读入数据。的相应位读入数据。n n 端口上拉寄存器端口上拉寄

311、存器端口上拉寄存器端口上拉寄存器(GPBUPGPHUP)(GPBUPGPHUP)。端口上拉寄。端口上拉寄。端口上拉寄。端口上拉寄存器控制每个端口组上拉电阻的使能存器控制每个端口组上拉电阻的使能存器控制每个端口组上拉电阻的使能存器控制每个端口组上拉电阻的使能/ /禁止。如果禁止。如果禁止。如果禁止。如果某一位为某一位为某一位为某一位为0 0,则相应的上拉电阻被使能,则相应的上拉电阻被使能,则相应的上拉电阻被使能,则相应的上拉电阻被使能( (上电复位上电复位上电复位上电复位状态状态状态状态) ),端口做输人,端口做输人,端口做输人,端口做输人/ /输出端口(第一功能口);输出端口(第一功能口);输

312、出端口(第一功能口);输出端口(第一功能口);如果是如果是如果是如果是1 1则相应的上拉电阻被禁止,端口做多功能则相应的上拉电阻被禁止,端口做多功能则相应的上拉电阻被禁止,端口做多功能则相应的上拉电阻被禁止,端口做多功能口(第二功能口)。如果端口的上拉电阻使能,口(第二功能口)。如果端口的上拉电阻使能,口(第二功能口)。如果端口的上拉电阻使能,口(第二功能口)。如果端口的上拉电阻使能,无论在哪种状态无论在哪种状态无论在哪种状态无论在哪种状态(INPUT(INPUT、OUTPUTOUTPUT、DATAnDATAn、和、和、和、和EINTnEINTn等下,等下,等下,等下,) )上拉电阻都起作用。

313、上拉电阻都起作用。上拉电阻都起作用。上拉电阻都起作用。n n 多状态控制寄存器。该寄存器控制数据端口的多状态控制寄存器。该寄存器控制数据端口的多状态控制寄存器。该寄存器控制数据端口的多状态控制寄存器。该寄存器控制数据端口的上拉电阻,包括高阻态、上拉电阻,包括高阻态、上拉电阻,包括高阻态、上拉电阻,包括高阻态、USB USB 和和和和CLKOUTCLKOUT选项。选项。选项。选项。n n 外部中断控制寄存器外部中断控制寄存器外部中断控制寄存器外部中断控制寄存器(EXTINTN) (EXTINTN) 。2424个外部中个外部中个外部中个外部中断有各种各样的中断请求信号,断有各种各样的中断请求信号,

314、断有各种各样的中断请求信号,断有各种各样的中断请求信号,EXTINTNEXTINTN寄存寄存寄存寄存器可以配置信号的类型有低电平触发中断请求、器可以配置信号的类型有低电平触发中断请求、器可以配置信号的类型有低电平触发中断请求、器可以配置信号的类型有低电平触发中断请求、高电平触发中断清求、下降沿触发中断请求、上高电平触发中断清求、下降沿触发中断请求、上高电平触发中断清求、下降沿触发中断请求、上高电平触发中断清求、下降沿触发中断请求、上升沿触发中断请求,以及两沿触发方式中断清求。升沿触发中断请求,以及两沿触发方式中断清求。升沿触发中断请求,以及两沿触发方式中断清求。升沿触发中断请求,以及两沿触发方

315、式中断清求。n n 8 8个外部中断引脚有数字滤波器个外部中断引脚有数字滤波器个外部中断引脚有数字滤波器个外部中断引脚有数字滤波器( (参考数据手参考数据手参考数据手参考数据手册中的册中的册中的册中的EINTFI.TnEINTFI.Tn) )。n n 有有有有1616个外部中断个外部中断个外部中断个外部中断 (E1NT15:0) (E1NT15:0) 用于唤醒用于唤醒用于唤醒用于唤醒CPUCPU。n n 掉电模式和掉电模式和掉电模式和掉电模式和I/OI/O端口。在掉电模式下仍然保持端口。在掉电模式下仍然保持端口。在掉电模式下仍然保持端口。在掉电模式下仍然保持所有的所有的所有的所有的GPIOGP

316、IO状态值,可以参考相应章节的内容。状态值,可以参考相应章节的内容。状态值,可以参考相应章节的内容。状态值,可以参考相应章节的内容。EINTMASKEINTMASK在掉电模式下也不能阻止唤醒在掉电模式下也不能阻止唤醒在掉电模式下也不能阻止唤醒在掉电模式下也不能阻止唤醒CPUCPU。如果如果如果如果EINTMASKEINTMASK屏蔽了屏蔽了屏蔽了屏蔽了EINT15:4EINT15:4的某一位,仍的某一位,仍的某一位,仍的某一位,仍然可以唤醒然可以唤醒然可以唤醒然可以唤醒CPUCPU;但是;但是;但是;但是SRCPNDSRCPND的的的的EINT4:7EINT4:7位位位位和和和和EINT8:2

317、3EINT8:23位不能在位不能在位不能在位不能在CPUCPU唤醒后马上被置位。唤醒后马上被置位。唤醒后马上被置位。唤醒后马上被置位。n n5.2 I/O端口控制寄存器端口控制寄存器n n 5.2.1 5.2.1 端口端口端口端口A A控制寄存器(控制寄存器(控制寄存器(控制寄存器(GPACONGPACON、GPADATGPADAT)和功能配置和功能配置和功能配置和功能配置n n S3C2410 I/OS3C2410 I/O端口端口端口端口A A控制寄存器及端口控制寄存器及端口控制寄存器及端口控制寄存器及端口A A功能配置分别如表功能配置分别如表功能配置分别如表功能配置分别如表5-15-1表表

318、表表5-25-2所示。所示。所示。所示。n n 表表表表5-1 S3C24105-1 S3C2410端口端口端口端口A A控制寄存器控制寄存器控制寄存器控制寄存器n n表表表表5-2 5-2 端口端口端口端口A A功能配置功能配置功能配置功能配置GPACON22:0中的某一清零,与该位相对应的引脚为输出口;中的某一清零,与该位相对应的引脚为输出口;置位相应的引脚为第二功能端口。置位相应的引脚为第二功能端口。 端口被配置为输出引脚后,引脚的状态和相应的位状态一致。端口被配置为输出引脚后,引脚的状态和相应的位状态一致。当端口被配置为第二功能引脚后,读出来的值不确定。当端口被配置为第二功能引脚后,读

319、出来的值不确定。n n5.2.2 5.2.2 端端端端口口口口B B控控控控制制制制寄寄寄寄存存存存器器器器(GPBCONGPBCON、GPBDATGPBDAT和和和和GPBUPGPBUP)和功能配置)和功能配置)和功能配置)和功能配置n n 表表表表5-3 S3C24105-3 S3C2410端口端口端口端口B B控制寄存器控制寄存器控制寄存器控制寄存器 若端口若端口B被配置为输入端口,则可以从引脚上读入相应的被配置为输入端口,则可以从引脚上读入相应的外部输入的数据。如果端口外部输入的数据。如果端口B被配置为输出端口,则向该位被配置为输出端口,则向该位写人的数据可以被发送到相应的引脚上。如果

320、该引脚被配置写人的数据可以被发送到相应的引脚上。如果该引脚被配置为第二功能引脚,则读出的数据不确定。为第二功能引脚,则读出的数据不确定。 若清位若清位GPBUP10:0中的某一位,则允许端口中的某一位,则允许端口B的相应引脚的相应引脚的上拉功能,否则禁止上拉功能。的上拉功能,否则禁止上拉功能。n n表表表表5-4 5-4 端口端口端口端口B B控制寄存器控制寄存器控制寄存器控制寄存器(GPBCON)(GPBCON)的配置的配置的配置的配置 5.2.3 端端口口C控控制制寄寄存存器器(GPCCON、GPCDAT和和GPCUP) 和功能配置和功能配置 端端口口C控控制制寄寄存存器器(GPCCON、

321、GPCDAT和和GPCUP) 和和具具体体配配置置如表如表5-5和和5-6所示。所示。表表表表5-5 5-5 端口端口端口端口C C控制寄存器控制寄存器控制寄存器控制寄存器(GPCCON)(GPCCON)的配置的配置的配置的配置n n表表表表5-65-6端口端口端口端口C C控制寄存器控制寄存器控制寄存器控制寄存器(GPCCON)(GPCCON)的配置的配置的配置的配置n n 如果端口如果端口如果端口如果端口C C被配置为输人端口,则可以从引脚读入相应外被配置为输人端口,则可以从引脚读入相应外被配置为输人端口,则可以从引脚读入相应外被配置为输人端口,则可以从引脚读入相应外部输入源输入的数据。如

322、果端口部输入源输入的数据。如果端口部输入源输入的数据。如果端口部输入源输入的数据。如果端口C C被配置为输出端口,则向被配置为输出端口,则向被配置为输出端口,则向被配置为输出端口,则向寄存器写的数据可以被送往相应的引脚。如果端口寄存器写的数据可以被送往相应的引脚。如果端口寄存器写的数据可以被送往相应的引脚。如果端口寄存器写的数据可以被送往相应的引脚。如果端口C C被配置被配置被配置被配置为第二功能引脚,则从该引脚读出的数据不确定。为第二功能引脚,则从该引脚读出的数据不确定。为第二功能引脚,则从该引脚读出的数据不确定。为第二功能引脚,则从该引脚读出的数据不确定。n n若清位若清位若清位若清位GP

323、CUP 15GPCUP 15:0 0的某一位,则允许端口的某一位,则允许端口的某一位,则允许端口的某一位,则允许端口C C相应引脚相应引脚相应引脚相应引脚的上拉功能,否则禁止上拉功能。的上拉功能,否则禁止上拉功能。的上拉功能,否则禁止上拉功能。的上拉功能,否则禁止上拉功能。n n5.2.4 5.2.4 端端端端口口口口DD控控控控制制制制寄寄寄寄存存存存器器器器(GPDCONGPDCON、GPDDATGPDDAT和和和和GPDUPGPDUP)和功能配置)和功能配置)和功能配置)和功能配置n n端端端端口口口口DD控控控控制制制制寄寄寄寄存存存存器器器器(GPDCON)(GPDCON)的的的的具

324、具具具体体体体配配配配置置置置情情情情况况况况如如如如表表表表5-75-7和和和和表表表表-8-8所示。所示。所示。所示。表表5-7 端口端口D控制寄存器控制寄存器( GPDCON)的配置的配置n n表表表表5-8 5-8 端口端口端口端口DD控制寄存器控制寄存器控制寄存器控制寄存器( GPDCON)( GPDCON)的配置的配置的配置的配置 如果端口如果端口D被配置为输入端口,则可以从引脚读入相应外部输入源被配置为输入端口,则可以从引脚读入相应外部输入源输入的数据。如果端口输入的数据。如果端口D被配置为输出端口,则向寄存器写的数据可被配置为输出端口,则向寄存器写的数据可以被送往相应的引脚。如

325、果端口以被送往相应的引脚。如果端口D被配置为第二功能引脚,则从该引被配置为第二功能引脚,则从该引脚读出的数据不确定。脚读出的数据不确定。 若清位若清位GPDUP15:0的某一位,则允许端口的某一位,则允许端口D相应引脚的上拉功能,相应引脚的上拉功能,否则禁止上拉功能。否则禁止上拉功能。 5.2.5 5.2.5 端口端口端口端口E E控制寄存器(控制寄存器(控制寄存器(控制寄存器(GPECONGPECON、GPEDATGPEDAT和和和和GPEUPGPEUP) 和功能配置和功能配置和功能配置和功能配置n n表表表表5-9 5-9 端口端口端口端口E E控制寄存器控制寄存器控制寄存器控制寄存器(

326、GPECON)( GPECON)n n表表表表5-10 5-10 端口端口端口端口E E控制寄存器(控制寄存器(控制寄存器(控制寄存器(GPECONGPECON)的配置)的配置)的配置)的配置n n端口端口端口端口E E控制寄存器(控制寄存器(控制寄存器(控制寄存器(GPECONGPECON)的配置如表)的配置如表)的配置如表)的配置如表5-95-9和和和和5-105-10所示。所示。所示。所示。n n如果端口如果端口如果端口如果端口E E被配置为输入端口,则可以从引脚读入相应外部输被配置为输入端口,则可以从引脚读入相应外部输被配置为输入端口,则可以从引脚读入相应外部输被配置为输入端口,则可以

327、从引脚读入相应外部输入源输入的数据。如果端口入源输入的数据。如果端口入源输入的数据。如果端口入源输入的数据。如果端口E E被配置为输出端口,则向寄存器被配置为输出端口,则向寄存器被配置为输出端口,则向寄存器被配置为输出端口,则向寄存器写的数据可以被送往相应的引脚。如果端口写的数据可以被送往相应的引脚。如果端口写的数据可以被送往相应的引脚。如果端口写的数据可以被送往相应的引脚。如果端口E E被配置为第二功被配置为第二功被配置为第二功被配置为第二功能引脚,则从该引脚读出的数据不确定。能引脚,则从该引脚读出的数据不确定。能引脚,则从该引脚读出的数据不确定。能引脚,则从该引脚读出的数据不确定。n n若

328、清位若清位若清位若清位GPEUP15:0GPEUP15:0的某一位,则允许端口的某一位,则允许端口的某一位,则允许端口的某一位,则允许端口E E相应引脚的上拉功相应引脚的上拉功相应引脚的上拉功相应引脚的上拉功能,否则禁止上拉功能能,否则禁止上拉功能能,否则禁止上拉功能能,否则禁止上拉功能n n5.2.6 5.2.6 端端端端口口口口F F控控控控制制制制寄寄寄寄存存存存器器器器(GPFCONGPFCON、GPFDATGPFDAT和和和和GPFUPGPFUP)和功能配置)和功能配置)和功能配置)和功能配置n n端口端口端口端口F F控制寄存器控制寄存器控制寄存器控制寄存器(GPFCON)(GPF

329、CON)的配置如表的配置如表的配置如表的配置如表5-l15-l1和和和和-12-12所示。所示。所示。所示。n n如果端口如果端口如果端口如果端口F F被配置为输入端口,则可以从引脚读入相应外部输被配置为输入端口,则可以从引脚读入相应外部输被配置为输入端口,则可以从引脚读入相应外部输被配置为输入端口,则可以从引脚读入相应外部输入源输入的数据。如果端口入源输入的数据。如果端口入源输入的数据。如果端口入源输入的数据。如果端口F F被配置为输出端口,向寄存器写被配置为输出端口,向寄存器写被配置为输出端口,向寄存器写被配置为输出端口,向寄存器写的数据可以被送往相应的引脚。如果端口的数据可以被送往相应的

330、引脚。如果端口的数据可以被送往相应的引脚。如果端口的数据可以被送往相应的引脚。如果端口F F被配置为第二功能被配置为第二功能被配置为第二功能被配置为第二功能引脚,则从该引脚读入的数据不确定。引脚,则从该引脚读入的数据不确定。引脚,则从该引脚读入的数据不确定。引脚,则从该引脚读入的数据不确定。n n若清位若清位若清位若清位GPFUP15:0GPFUP15:0的某一位,则允许端口的某一位,则允许端口的某一位,则允许端口的某一位,则允许端口F F相应引脚的上拉功相应引脚的上拉功相应引脚的上拉功相应引脚的上拉功能,否则禁止相应引脚上拉功能。能,否则禁止相应引脚上拉功能。能,否则禁止相应引脚上拉功能。能

331、,否则禁止相应引脚上拉功能。n n表表表表5-11 5-11 端口端口端口端口F F控制寄存器控制寄存器控制寄存器控制寄存器( GPFCON)( GPFCON)表表5-12 端口端口F控制寄存器(控制寄存器(GPFCON)的配置)的配置5.2.7 5.2.7 端口端口端口端口G G控制寄存器(控制寄存器(控制寄存器(控制寄存器(GPGCONGPGCON、GPGDATGPGDAT和和和和GPGUPGPGUP)和功能配置)和功能配置)和功能配置)和功能配置 端口端口端口端口G G控制寄存器(控制寄存器(控制寄存器(控制寄存器(GPGCONGPGCON)的配置如表)的配置如表)的配置如表)的配置如表

332、5-135-13和和和和5-145-14所所所所示。示。示。示。n n表表表表5-13 5-13 端口端口端口端口G G控制寄存器控制寄存器控制寄存器控制寄存器( GPGCON)( GPGCON)表表5-14 端口端口G控制寄存器(控制寄存器(GPGCON)的配置)的配置 如果端口如果端口G被配置为输入端口,可以从引脚读入相应外部输被配置为输入端口,可以从引脚读入相应外部输入源输入的数据。如果端口入源输入的数据。如果端口G被配置为输出端口,向寄存器写被配置为输出端口,向寄存器写的数据可以被送往相应的引脚。如果端口的数据可以被送往相应的引脚。如果端口G被配置为第二功能被配置为第二功能引脚,则从该

333、引脚读出的数据不确定。引脚,则从该引脚读出的数据不确定。若清位若清位GPGUP15:0的某一位,则允许端口的某一位,则允许端口G相应引脚上的上拉相应引脚上的上拉功能,否则禁止相应引脚上拉功能。功能,否则禁止相应引脚上拉功能。n n5.2.8 5.2.8 端端端端口口口口HH控控控控制制制制寄寄寄寄存存存存器器器器(GPHCONGPHCON、GPHDATGPHDAT和和和和GPHUPGPHUP)和功能配置)和功能配置)和功能配置)和功能配置n n端口端口端口端口HH被配置为输入端口,可以从引脚读入相应外部输入被配置为输入端口,可以从引脚读入相应外部输入被配置为输入端口,可以从引脚读入相应外部输入

334、被配置为输入端口,可以从引脚读入相应外部输入源输入的数据。如果端口源输入的数据。如果端口源输入的数据。如果端口源输入的数据。如果端口HH被配置为输出端口,向寄存器被配置为输出端口,向寄存器被配置为输出端口,向寄存器被配置为输出端口,向寄存器写的数据可以被送往相应的引脚。如果端口写的数据可以被送往相应的引脚。如果端口写的数据可以被送往相应的引脚。如果端口写的数据可以被送往相应的引脚。如果端口HH被配置为第被配置为第被配置为第被配置为第二功能引脚,则从该引脚读出的数据不确定。二功能引脚,则从该引脚读出的数据不确定。二功能引脚,则从该引脚读出的数据不确定。二功能引脚,则从该引脚读出的数据不确定。n

335、n若清位若清位若清位若清位GPHUP15:0GPHUP15:0的某一位,则允许端口的某一位,则允许端口的某一位,则允许端口的某一位,则允许端口HH相应引脚的相应引脚的相应引脚的相应引脚的上拉功能,否则禁止相应引脚上拉功能。端口上拉功能,否则禁止相应引脚上拉功能。端口上拉功能,否则禁止相应引脚上拉功能。端口上拉功能,否则禁止相应引脚上拉功能。端口HH控制寄存控制寄存控制寄存控制寄存器(器(器(器(GPHCONGPHCON、GPHDATGPHDAT和和和和GPHUPGPHUP)和端口)和端口)和端口)和端口B B功能配置功能配置功能配置功能配置基本相同,见表基本相同,见表基本相同,见表基本相同,见

336、表5-155-15,5-165-16。表表5-15端口端口H控制寄存器控制寄存器 n n表表表表5-16 5-16 端口端口端口端口HH控制寄存器(控制寄存器(控制寄存器(控制寄存器(GPHCONGPHCON)的配置)的配置)的配置)的配置n n5.3 I/O口操作步骤口操作步骤n n5.31 5.31 上拉寄存器和控制寄存器设置上拉寄存器和控制寄存器设置上拉寄存器和控制寄存器设置上拉寄存器和控制寄存器设置n nI/OI/O口上拉寄存器和控制寄存器设置比较简单,首先确口上拉寄存器和控制寄存器设置比较简单,首先确口上拉寄存器和控制寄存器设置比较简单,首先确口上拉寄存器和控制寄存器设置比较简单,首

337、先确定定定定I/OI/O口工作模式,如果是工作在第二功能状态,则上口工作模式,如果是工作在第二功能状态,则上口工作模式,如果是工作在第二功能状态,则上口工作模式,如果是工作在第二功能状态,则上拉电阻功能禁止,即拉电阻功能禁止,即拉电阻功能禁止,即拉电阻功能禁止,即GPBUPGPHUPGPBUPGPHUP中相应位置中相应位置中相应位置中相应位置1 1;如;如;如;如果工作在基本输入果工作在基本输入果工作在基本输入果工作在基本输入/ /输出状态,则上拉电阻功能允许,此输出状态,则上拉电阻功能允许,此输出状态,则上拉电阻功能允许,此输出状态,则上拉电阻功能允许,此时因上电或复位时时因上电或复位时时因

338、上电或复位时时因上电或复位时GPBUPGPHUPGPBUPGPHUP初值为初值为初值为初值为0 0,所以在程,所以在程,所以在程,所以在程序中不用设置。序中不用设置。序中不用设置。序中不用设置。n nI/OI/O口数据寄存器中每一位输入口数据寄存器中每一位输入口数据寄存器中每一位输入口数据寄存器中每一位输入/ /输出功能大多由输出功能大多由输出功能大多由输出功能大多由I/OI/O口口口口控制寄存器中两位控制,如控制寄存器中两位控制,如控制寄存器中两位控制,如控制寄存器中两位控制,如GPHDATA0GPHDATA0,即,即,即,即GPH0GPH0的的的的输入输入输入输入/ /输出功能,由输出功能

339、,由输出功能,由输出功能,由GPHCON1GPHCON1:00控制,控制,控制,控制,GPHCON1GPHCON1:0=0 00=0 0,该位作输入;,该位作输入;,该位作输入;,该位作输入;GPHCON1GPHCON1:0=0 10=0 1,该位作输,该位作输,该位作输,该位作输出;出;出;出;GPHCON1GPHCON1:0=1 00=1 0,该位作,该位作,该位作,该位作nCTS0nCTS0;GPHCON1GPHCON1:0=1 10=1 1,系统保留没用。其他各口与此相同,编写,系统保留没用。其他各口与此相同,编写,系统保留没用。其他各口与此相同,编写,系统保留没用。其他各口与此相同,

340、编写I/OI/O程序时一定注意程序时一定注意程序时一定注意程序时一定注意GPnCONGPnCON和和和和GPnDATAGPnDATA中位的对应关系。中位的对应关系。中位的对应关系。中位的对应关系。n nI/OI/O口与外围设备连接一般要通过光电隔离或其他隔离口与外围设备连接一般要通过光电隔离或其他隔离口与外围设备连接一般要通过光电隔离或其他隔离口与外围设备连接一般要通过光电隔离或其他隔离器件,直接相连一定要确认负载不能超过器件,直接相连一定要确认负载不能超过器件,直接相连一定要确认负载不能超过器件,直接相连一定要确认负载不能超过4 4个与非门。光个与非门。光个与非门。光个与非门。光电隔离一是可

341、保护微处理器;二是可进行电平转换;三电隔离一是可保护微处理器;二是可进行电平转换;三电隔离一是可保护微处理器;二是可进行电平转换;三电隔离一是可保护微处理器;二是可进行电平转换;三是可对某些信号进行分配,所以在一般情况下都要加。是可对某些信号进行分配,所以在一般情况下都要加。是可对某些信号进行分配,所以在一般情况下都要加。是可对某些信号进行分配,所以在一般情况下都要加。n n5.3 I/O口编程示例口编程示例n n在北京精仪达盛科技公司的在北京精仪达盛科技公司的在北京精仪达盛科技公司的在北京精仪达盛科技公司的EL-ARM830EL-ARM830教学实验系统上教学实验系统上教学实验系统上教学实验

342、系统上有两个有两个有两个有两个LEDLED发光二极管,它们的阴极接在发光二极管,它们的阴极接在发光二极管,它们的阴极接在发光二极管,它们的阴极接在S3C2410 GS3C2410 G口口口口的的的的8(bit8)8(bit8)脚和脚和脚和脚和9(bit9)9(bit9)脚,阳极经电阻接电源脚,阳极经电阻接电源脚,阳极经电阻接电源脚,阳极经电阻接电源5V5V,如果,如果,如果,如果GPG8GPG8或或或或GPG9GPG9输出低电平,相应输出低电平,相应输出低电平,相应输出低电平,相应LEDLED亮;如果亮;如果亮;如果亮;如果GPG8GPG8或或或或GPG9GPG9输出高电平,相应输出高电平,相

343、应输出高电平,相应输出高电平,相应LEDLED灭。控制程序使这两个灭。控制程序使这两个灭。控制程序使这两个灭。控制程序使这两个LEDLED管循环亮灭。管循环亮灭。管循环亮灭。管循环亮灭。n n/-/-n n/ GPG8/ GPG8,GPG9GPG9轮流输出低电平,使两个轮流输出低电平,使两个轮流输出低电平,使两个轮流输出低电平,使两个LEDLED循环亮灭循环亮灭循环亮灭循环亮灭n n/-/-n nvoid Main(void)void Main(void)n n intint flag, i; flag, i;n nsys_initsys_init();();n n n n for(;) fo

344、r(;)n n if(flag=0)if(flag=0) n n for(i=0;i1000000;i+); /for(i=0;i1000000;i+); /延时延时延时延时n n rGPGCONrGPGCON = = rGPGCONrGPGCON & 0xfff5f0ff | 0x00050000; & 0xfff5f0ff | 0x00050000;n n/ GPGCON17/ GPGCON17:16=0116=01,GPH8GPH8输出;输出;输出;输出;GPGCON19GPGCON19:18=01 18=01 GPH9GPH9输出。输出。输出。输出。n n rGPGDATrGPGDAT

345、 = = rGPGDATrGPGDAT & 0xeff | 0x200; & 0xeff | 0x200;n n/GPG9/GPG9低电平,低电平,低电平,低电平,GPG8GPG8高电平高电平高电平高电平LED2LED2亮,亮,亮,亮,LED1LED1灭灭灭灭n n for(i=0;i10000000;i+); /for(i=0;i10000000;i+); /延时延时延时延时n n flag = 1;flag = 1;n n n n else else n n for(i=0;i1000000;i+); /for(i=0;i1000000;i+); /延时延时延时延时n n rGPGCONr

346、GPGCON = = rGPGCONrGPGCON & 0xfffff0ff | & 0xfffff0ff | 0x00050000;0x00050000;n n/ GPGCON17/ GPGCON17:16=0116=01,GPH8GPH8输出;输出;输出;输出;GPGCON19GPGCON19:18=01 GPH918=01 GPH9输出。输出。输出。输出。n nrGPGDATrGPGDAT = = rGPGDATrGPGDAT & 0xdff | 0x100; & 0xdff | 0x100; n n/GPG8/GPG8低电平,低电平,低电平,低电平,GPG9GPG9高电平高电平高电平高

347、电平LED1LED1亮,亮,亮,亮,LED2LED2灭灭灭灭n nfor(i=0;i1000000;i+); /for(i=0;i1000000;i+); /延时延时延时延时n nflag = 0;flag = 0;n n n n n n n n第五章习题与练习第五章习题与练习第五章习题与练习第五章习题与练习n n1 1,S3C2410S3C2410有多少组有多少组有多少组有多少组I/OI/O口?每组包括的口?每组包括的口?每组包括的口?每组包括的I/OI/O口的有哪些?口的有哪些?口的有哪些?口的有哪些?n n2 2,I/OI/O口口口口AHAH功能有哪些不同?功能有哪些不同?功能有哪些不同

348、?功能有哪些不同?n n3 3,S3C2410 I/OS3C2410 I/O口的控制寄存器、数据寄存器、上拉电阻口的控制寄存器、数据寄存器、上拉电阻口的控制寄存器、数据寄存器、上拉电阻口的控制寄存器、数据寄存器、上拉电阻允许寄存器的作用?允许寄存器的作用?允许寄存器的作用?允许寄存器的作用?n n4 4,读懂例子程序,学会,读懂例子程序,学会,读懂例子程序,学会,读懂例子程序,学会I/OI/O口操作。口操作。口操作。口操作。n n5, 5, 程序中程序中程序中程序中rGPFCON=0x5500rGPFCON=0x5500,rGPFCON=0x55aa rGPFCON=0x55aa 是什么含是什

349、么含是什么含是什么含意?意?意?意?n n6 6,I/OI/O口做第一功能和口做第一功能和口做第一功能和口做第一功能和I/OI/O口做第二功能,应该使用哪个口做第二功能,应该使用哪个口做第二功能,应该使用哪个口做第二功能,应该使用哪个寄存器进行设定,如何设定?寄存器进行设定,如何设定?寄存器进行设定,如何设定?寄存器进行设定,如何设定?n n7 7,I/OI/O口做输入输出时为什么要加隔离器件?口做输入输出时为什么要加隔离器件?口做输入输出时为什么要加隔离器件?口做输入输出时为什么要加隔离器件?n n8 8,GPB1GPB1输出控制蜂鸣器工作,低电平有效,输出控制蜂鸣器工作,低电平有效,输出控制蜂鸣器工作,低电平有效,输出控制蜂鸣器工作,低电平有效,rGPBCONrGPBCON应应应应如何配置?使蜂鸣器鸣响或不鸣响,如何配置?使蜂鸣器鸣响或不鸣响,如何配置?使蜂鸣器鸣响或不鸣响,如何配置?使蜂鸣器鸣响或不鸣响,rGPBDATrGPBDAT应如何配置应如何配置应如何配置应如何配置?

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号