• 245.50 KB
  • 2022-04-22 11:25:15 发布

《嵌入式技术基础与实践》(第二版)习题参考答案V10.doc

  • 32页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'嵌入式技术基础与实践(第二版)习题参考答案 目录第1章概述习题参考答案............................................................................................1第2章FreescaleS08微控制器习题参考答案.............................................................3第3章第一个样例程序及工程组织习题参考答案....................................................5第4章基于硬件构件的嵌入式系统开发方法习题参考答案....................................8第5章串行通信接口SCI习题参考答案...................................................................10第6章GPIO的应用实例—键盘、LED与LCD习题参考答案..............................12第7章定时器模块习题参考答案..............................................................................13第8章串行外设接口SPI习题参考答案...................................................................14第9章Flash存储器在线编程习题参考答案............................................................15第10章集成电路互连总线I2C习题参考答案.........................................................18第11章模数转换模块A/D习题参考答案................................................................20第12章系统开发其他模块应用习题参考答案........................................................21第13章JM60的USB2.0开发方法习题参考答案..................................................23第14章DZ60的CAN总线开发方法习题参考答案...............................................27I 第1章概述习题参考答案1.嵌入式系统的基本含义是什么?为什么说单片机是典型的嵌入式系统?答:即MCU的含义是:在一块芯片上集成了中央处理单元(CPU)、存储器(RAM/ROM等)、定时器/计数器及多种输入输出(I/O)接口的比较完整的数字处理系统。大部分嵌入式系统以MCU为核心进行设计。MCU从体系结构到指令系统都是按照嵌入式系统的应用特点专门设计的,它能很好地满足应用系统的嵌入、面向测控对象、现场可靠运行等方面的要求。因此以MCU为核心的系统是应用最广的嵌入式系统。2.简述嵌入式系统的特点以及应用领域。答:嵌入式系统属于计算机系统,但不单独以通用计算机的面目出现;嵌入式系统开发需要专用工具和特殊方法;使用MCU设计嵌入式系统,数据与程序空间采用不同存储介质;开发嵌入式系统涉及软件、硬件及应用领域的知识;嵌入式系统的其他特点,比如紧张的资源,较高稳定性要求,低功耗,低成本等。一般用于工业控制,智能家电,日常电子等领域。3.比较MCU与CPU的区别与联系。答:CPU是一个单独的PC处理器。而MCU,则有微处理器,存储器(RAM/ROM等)、定时器/计数器及多种输入输出(I/O)接口的比较完整的数字处理系统。所以可以这么说,MCU是一个包含微处理器的嵌入式系统,而CPU紧紧是一个处理器而已。4.举例说明嵌入式系统在日常生活中的应用。答:日常数码产品:手机,MP3,U盘,相机等。日常工业类:冰箱,空调,微波炉,汽车等。5.C语言的那些特性使得它成为嵌入式系统中使用频率最高的高级语言。答:相比底端汇编,更简单易学;与高级语言如(C++,C#,java等)相比,执行效率高,编译后的编码体积小,而且支持好的编译器还支持嵌入汇编代码;对位的操纵能力很强。6.阅读光盘中【第01章(概述)阅读资料】中的“嵌入式C语言工程简明规范”,用一页纸给出嵌入式C语言工程简明规范的要点。答:此规范主要针对单片机编程语言和08编译器而言,包括命名、注释、编码规范性等内容。建议在一个工程或者一个项目中尽量遵循相同的代码规范,而不是说你只能拥有一个代码规范。(1)命名规则:命名清晰明了,有明确含义,使用完整单词或约定俗成的缩写。通常,较短的单词可通过去掉元音字母形成缩写;较长的单词可取单词的头几个字母形成缩写。即"见名知意";命名风格要自始至终保持一致;命名中若使用特殊约定或缩写,要有注释说明;为了代码复用,命名中应避免适用与具体项目相关的前缀;应使用英语命名。(2)注释:注释基本原则就是有助于对程序的阅读理解,说明程序在"做什么",解释代码的目的、功能和采用的方法。一般情况源程序有效注释量在30%左右。注释语言必须准确、易懂、简洁。边写代码边注释,修改代码同时修改相应的注释,不再有用的注释要删除。汇编和C中都用"//",取消";"不使用段注释"/**/"(调试时可用)。使用文件注释必须说明文件名、项目名称、函数功能、创建人、创建日期、版本信息等相关信息。修改文件代码时,应在文件注释中记录修改日期、修改人员,并简要说明此次修1 改的目的。所有修改记录必须保持完整。文件注释放在文件顶端,用"/*……*/"格式包含。注释文本每行缩进4个空格;每个注释文本分项名称应对齐。函数头部注释应包括函数名称、函数功能、入口参数、出口参数等内容。如有必要还可增加作者、创建日期、修改记录(备注)等相关项目。函数头部注释放在每个函数的顶端,用"/*……*/"的格式包含。其中函数名称应简写为FunctionName(),不加入、出口参数等信息。代码注释应与被注释的代码紧邻,放在其上方或右方,不可放在下面。如放于上方则需与其上面的代码用空行隔开。一般少量注释应该添加在被注释语句的行尾,一个函数内的多个注释左对齐;较多注释则应加在上方且注释行与被注释的语句左对齐。通常,分支语句(条件分支、循环语句等)必须编写注释。其程序块结束行"}"的右方应加表明该程序块结束的标记"endof……",尤其在多重嵌套时。同一类型的标识符应集中定义,并在定义之前一行对其共性加以统一注释。对单个标识符的注释加在定义语句的行尾。全局变量一定要有详细的注释,包括其功能、取值范围、哪些函数或过程存取它以及存取时的注意事项等。注释用"//…//"的格式。(3)编码规范性:代码的每一级均往右缩进4个空格的位置;不使用Tab键,建议使用空格代替tab键,这样代码打印不回造成错乱;相对独立的程序块之间要加空行;括号内侧(即左括号后面和右括号前面)不加空格,多重括号间不加空格。如:SetName(GetFunc());函数形参之间应该有且只有一个空格(形参逗号后面加空格),如:CallFunction(para1,para2,para3),而CallFunction(para1,para2,para3)不符合要求;操作符前后均加一个空格,如:nSum=nNunm1+nNum2。而nSum=nNunm1+nNum2则不符合要求;单目操作符,如"!"、"~"、"++"、"-"、"&"(地址运算符)等,后面不加空格,如:i++,pName=&name,bRes=!(x<10);if、elseif、else、for、while语句无论其执行体是一条语句还是多条语句都必须加花括号,且左右花括号各独占一行;Switch语句必须包含default分支;一个函数不要超过80行代码。2 第2章FreescaleS08微控制器习题参考答案1.给出AW60存储器映像的简要说明。答:所谓存储器映像,是指地址$0000~$FFFF这个64KB空间,哪些地址被何种存储器所占用,或者说AW60的RAM、Flash、I/O映像寄存器各使用$0000~$FFFF这个64KB空间中的哪些地址。简单地说,就是$0000~$FFFF这个64KB空间是如何分配的。2.AW60的引脚主要分为哪几类?简要说明主要引脚的功能。答:(1)电源类信号引脚(2)复位信号引脚(3)主要功能模块引脚。比如定时器,IRQ中断等。(4)其他,比如背景调试BKGD引脚主要引脚:AW60最小系统连接的I/O口,以及各具体功能I/O口。3.嵌入式系统中RAM和Flash作用分别是什么?答:一般来说RAM这个区域安排用户数据(主要是全局变量)和堆栈空间;Flash要用于存储程序、常数、中断向量等。4.给出AW60的硬件最小系统。答:AW60芯片的硬件最小系统包括电源及其滤波电路、复位电路、晶振电路及PLL滤波电路、写入器接口电路。5.指出下列指令中的源操作数和目的操作数的寻址方式。(1)MOV#$80,$80(2)MOV$80,$A0(3)MOV$80,X+(4)MOVX+,$80(5)LDA$80,X答:(1)立即寻址,直接寻址(2)直接寻址,直接寻址(3)直接寻址,无偏移量变址、变址加1寻址方式(4)无偏移量变址、变址加1寻址方式,直接寻址(5)直接寻址,无偏移量变址、变址加1寻址方式6.说明跳转指令BRA和JMP的差别。答:BRA是无条件相对转移指令,转移范围是前127字节、后128字节。而JMP则是绝对地址跳转指令。7.哪些指令影响堆栈指针?如何影响?答:PSH,PUL。前者是向堆栈中放入,指针减1,向上移;而PUL刚好相反,指针加1,向下移。8.说明芯片初始化时堆栈指针的初始化方法。答:SP是指向下一个栈地址的16位寄存器,堆栈指针SP采用递减的结构,即进栈SP减1,出栈时SP加1。初始化时,SP的初值为$00FF(前置符号$表示十六进制数)。栈指3 针复位指令(RSP)可将SP的低8位置为$FF,而不影响高8位。9.写出主要汇编伪指令?答:变量定义(变量声明)数字常数与字符串常数定义常数赋值与文本替代符伪指令指令存储定位伪指令文件包含伪指令宏定义和宏调用伪指令定义存储区域伪指令具体细节请参照2.7.2节10.编写一段延时1000个指令周期的延时子程序。答:DL1000;MOVR7#248DJNZR7$MOVR7#250DJNZR74RET4 第3章第一个样例程序及工程组织习题参考答案1.什么叫通用I/O口?答:所谓通用I/O,也记为GPIO(GeneralPurposeI/O),即基本的输入/输出,有时也称并行I/O,或普通I/O,它是I/O的最基本形式。2.什么叫上拉电阻与下拉电阻?它们的作用是什么?如何选择上拉电阻与下拉电阻的阻值?哪些情况下使用上拉电阻?哪些情况下使用下拉电阻?答:通俗地说,若MCU的某个引脚通过一个电阻接到电源(Vcc)上,这个电阻被称为“上拉电阻”。与之相对应,若MCU的某个引脚通过一个电阻接到地(GND)上,则相应的电阻被称为“下拉电阻”;他们使得悬空的芯片引脚被上拉电阻或下拉电阻初始化为高电平或低电平;根据实际情况,上拉电阻与下拉电阻可以取值在1KΩ~10KΩ之间,其阻值大小与静态电流及系统功耗相关;当某个引脚需要初始化成高电平时可以通过上拉电阻接电源,当某个引脚要初始化低电平时可以通过下拉电阻接地。3.什么是OC输出?为什么OC输出的I/O口一定要上拉?答:OC输出,即开漏输出,即集电极开路。只有接了上拉电阻,才能输出高低电平,否则只能输出低电平了。4.为什么在无操作系统的嵌入式系统软件主程序中使用无限循环?答:由于程序都是顺序执行的。如果不使用无限循环,程序执行一遍代码,就不能在接受其他的任务操作了。在嵌入式系统中,这是致命的,如果一个嵌入式产品每次只能使用一次或只接受一次任务,那是无法想象的。但是使用了无限循环,就可以不停地监听任务,并执行。5.找出样例子工程的机器码文件,解释S19文件的含义。答:源文件经编译、连接后可获得目标码文件(.S19文件),它是FreescaleMCU的机器码文件,通过写入程序可将机器码下载到目标MCU内的Flash存储器,也可以通过光盘中苏州大学嵌入式系统研发中心开发的独立写入软件SD-Programmer-S08读出写入到Flash的S19的内容,观察实际写入到Flash的内容是否和S19的内容相同。该程序也可以擦写Flash。目标代码文件是以S记录格式表示的机器码文件。S记录格式是Freescale公司的十六进制目标代码文件,它将目标程序和数据以ASCII码格式表示,可直接显示和打印。目标文件由若干行S记录构成,每行S记录可以用CR/LF/NUL结尾。一行S记录由五部分组成,具体细节请参考书中3.4.4。6.举例给出CW环境C语言工程文件的组织结构图。答:以下是控制小灯闪烁的CW环境C语言工程文件的组织结构图5 7.分析Project.prm文件的功能。答:Project.prm文件主要实现了芯片的RAM和ROM的定义,初始化RAM中的变量。初始化堆栈的大小。定义复位向量,即应用程序的默认入口。还包含了启动代码,是硬件复位后的函数入口。8.如何查看一个文件.LST文件,举例分析一个LST文件。答:利用FreescaleCodewarrior打开控制小灯闪烁工程文件,通过edit-standardsettings-target–compilerforHC08-option-output-generateListingFile点击确定编译连接可以生成.LST文件。然后在该工程的bin文件夹中可以找.LST文件,通过FreescaleCodewarrior打开main.lst文件。看下面的一段代码:26:Light_Init(Light_Run_PORT,Light_Run,Light_OFF);//指示灯初始化004ca606[2]LDA#6004e87[2]PSHA004f5f[1]CLRX00504f[1]CLRA0051cd0000[6]JSRLight_Init00548a[3]PULH26:Light_Init(Light_Run_PORT,Light_Run,Light_OFF)是C程序代码;004ca606004e8700504f0051cd0000004f5f00548a6 是该程序的机器代码;其后面的对应的是汇编程序代码。9.如何能知道一段或一句C语言源程序的汇编代码与机器码,举例之。答:请参考第8题。10.给出一个C语言控制三盏小灯的程序,并调试,功能自定。答:请参考课本中3.5及随书光盘。11.给出一个S08汇编语言控制三盏小灯的程序,并调试,功能自定。答:请参考课本中3.6及随书光盘。12.分析一个map文件,简要说明map文件给了我们什么信息?答:打开工程后,展开“工程设置文件夹”后,再展开“LinkerFiles”文件夹,可以看到“Project.map”文件,通常称之为工程的“映像文件”,这个文件告诉我们,源代码被编译连接后的机器码,到底被下载到MCU内存储器中的什么地方,在高级调试时,可能需要用到这些知识。7 第4章基于硬件构件的嵌入式系统开发方法习题参考答案1.简要阐述嵌入式硬件构件的基本思想及优点。答:嵌入式硬件构件是指将一个或多个硬件功能模块、支撑电路及其功能描述封装成一个可重用的硬件实体,并提供一系列规范的输入/输出接口。优点:结构清晰,方便移植。2.硬件构件如何分类?给出各类硬件构件的定义及原理图设计要点。答:根据所拥有接口类型的不同,硬件构件分为核心构件、中间构件和终端构件三种类型。核心构件只有提供接口,没有需求接口。也就是说,它只为其它硬件构件提供服务,而不接受服务。在以单MCU为核心的嵌入式系统中,MCU的最小系统就是典型的核心构件。中间构件既有需求接口又有提供接口,即它不仅能够接受其它构件提供的服务,而且也能够为其它构件提供服务。而终端构件只有需求接口,它只接受其它构件提供的服务。设计核心构件时,需考虑的问题是:“核心构件能为其他构件提供哪些信号?”核心构件设计的目标是:凡是使用该MCU进行硬件系统设计时,核心构件可以直接“组装”到系统中,无须任何改动。为了实现这一目标,在设计核心构件的实体时必须考虑细致、周全,包括稳定性、扩展性等,封装要完整。设计中间构件时,需考虑的问题是:“中间构件需要接受哪些信号,以及提供哪些信号?”为直观起见,设计中间构件时,将构件的需求接口放置在构件实体的左侧,提供接口放置在右侧。设计终端构件时,需考虑的问题是:“终端构件需要什么信号才能工作?”。终端构件没有提供接口,它仅有与上一级构件交互的需求接口,因而接口标识均为斜体标注的接口注释。3.为什么要将某些寄存器名和寄存器位在头文件中进行宏定义?答:对MCU内的模块寄存器名和端口名进行重定义,在其它的代码里面都将使用宏名对模块寄存器和端口进行操作。这样,当底层驱动程序移植到其它MCU时,只要修改重定义语句就可以了。4.为什么在设计底层硬件驱动构件时,不能使用全局变量?答:应用程序在使用底层构件时,严格禁止通过全局变量来传递参数,所有的数据传递都要通过函数的形式参数来接收。这样做不但使得接口简洁,更加避免了全局变量可能引发的安全隐患。5.给出设计底层硬件驱动构件的基本原则,并举例说明。答:在对底层构件进行设计时,最关键的工作是要对构件的共性和个性进行分析,抽取出构件的属性和对外接口函数。尽量做到:当一个底层构件应用到不同系统中时,仅需修改构件的头文件,对于构件的源程序文件则不必修改或改动很小。例如,串行通信模块SCI是大多数MCU都具有的内部模块。仔细分析各种MCU串行通信程序发现:在查询方式下,各种MCU都是根据状态寄存器中的两个标志位来判断是否接收到数据和数据是否发送完毕,这就是SCI模块的共性。对于不同的MCU,该状态寄存器的名称可能不同,这两个标志位的位号也有可能不同。此外,用以设置波特率、通信格式、是否校验、是否允许中断等参数的寄存器也不同,这就是SCI模块的个性。分析出了共性和个性之后,就可以抽取出SCI构件的属性和操作,编制构件头文件和程序文件了。8 6.什么叫程序复用?什么叫程序移植?怎样才能方便重用与移植。答:复用是指在一个系统中,同一构件可被重复使用多次。移植是指将一个系统中使用到的构件应用到另外一个系统中;在设计时最关键的工作是要对构件的共性和个性进行分析,抽取出构件的属性和对外接口函数,设计是充分考虑这几放面的因素,才能方便重用和移植。7.怎样方便驱动程序进行移植?答:首先对外接口函数设计要合理,其次要对MCU内的模块寄存器名和端口名进行重定义,在其它的代码里面都将使用宏名对模块寄存器和端口进行操作。这样,当底层驱动程序移植到其它MCU时,只要修改重定义语句就可以了,这就方便了驱动程序的移植。8.阐述利用硬件构件思想设计嵌入式应用系统时应该遵循的基本原则。答:应当遵循以下基本规则:(1)构件的头文件和源程序文件的主文件名一致,且为构件名。(2)属性和操作的命名统一以构件名开头。这样做的好处是:当使用底层构件组装软件系统时,避免构件之间出现同名现象。同时,名称要使人有“顾名思义”的效果。(3)对MCU内的模块寄存器名和端口名进行重定义,在其它的代码里面都将使用宏名对模块寄存器和端口进行操作。这样,当底层驱动程序移植到其它MCU时,只要修改重定义语句就可以了。(4)内部函数与外部函数要设计合理,函数参数个数及类型要考虑全面。内部函数仅提供给同一构件中的其它内部函数或外部函数调用,作用域仅限于定义该函数的文件。外部函数是对外接口函数,供上层应用程序调用。在定义外部函数时,应该对函数名、函数功能、入口参数、函数返回值、使用说明、函数适用范围等进行详细描述,以增强程序的可读性。上层应用程序不能直接对构件的属性进行读取或设置,必须借助于该构件提供的接口操作函数来实现。(5)应用程序在使用底层构件时,严格禁止通过全局变量来传递参数,所有的数据传递都要通过函数的形式参数来接收。这样做不但使得接口简洁,更加避免了全局变量可能引发的安全隐患。9 第5章串行通信接口SCI习题参考答案1.简要阐述异步串行通信涉及的主要基本概念。答:串行通信至少涉及到以下几个基本概念:第一,每个字节之间是如何区分开的?第二,发送一位的持续时间是多少?第三,怎样知道传输是正确的?第四,可以传输多远?这些问题属于串行通信的基本概念。2.表征串行通信速度的物理量是什么?串行通信的传输速度有限制吗?答:位长(BitLength),也称为位的持续时间(BitDuration)。其倒数就是单位时间内传送的位数。人们把每秒内传送的位数叫做波特率(BaudRate)。波特率的单位是:位/秒,记为bps。bps是英文bitpersecond的缩写,习惯上这个缩写不用大写,而用小写。通常情况下,波特率的单位可以省略。通常使用的波特率有600、900、1200、1800、2400、4800、9600、19200、38400、57600、115200、128000等。有限制。因为随着波特率的提高,位长变小,以至于很容易受到电磁源的干扰,通信就不可靠了。当然,还有通信距离问题,距离小,可以适当提高波特率,但这样毕竟提高的幅度非常有限,达不到大幅度提高的目的。3.MCU与PC进行通信为什么要进行电平转换?如何进行电平转换?答:在MCU中,若用RS-232总线进行串行通信,则需外接电路实现电平转换。在发送端,需要用驱动电路将TTL电平转换成RS-232电平;在接收端,需要用接收电路将RS-232电平转换为TTL电平。电平转换器不仅可以由晶体管分立元件构成,也可以直接使用集成电路。目前广泛使用MAX232芯片较多,该芯片使用单一+5V电源供电实现电平转换。4.给出SCI编程的通用模型。答:SCI具有初始化、接收和发送三种基本操作。按照构件的思想,可将它们封装成三个独立的功能函数,初始化函数完成对SCI模块的工作属性的设定,接收和发送功能函数则完成实际的通信任务。以SCI的初始化、接收和发送三种基本操作为例,来说明实现构件化的全过程。(1)SCI模块是最底层的构件,它主要向上提供三种服务,分别是SCI模块的初始化、接收单个字节和发送单个字节,向下则直接访问模块寄存器,实现对硬件的直接操作。另外,从现实使用角度出发,它还需要封装接收N个字节和发送N个字节的子功能函数。(2)SCI模块在软件上对应1个SCI.c程序源代码文件和1个SCI.h头文件,当需要对它进行移植时,大多数情况下只需简单拷贝这两个文件即可,无需对源代码文件和头文件进行修改,只有当实施不同芯片之间的移植时,才需要修改头文件中与硬件相关的宏定义。(3)上层构件或软件在使用该构件时,严格禁止通过全局变量来传递参数,所有的数据传递都直接通过函数的形式参数来接收。这样做不但使得接口简洁,更加避免了全局变量可能引发的安全隐患。5.简述中断的作用与处理过程。答:中断是MCU实时地处理内部或外部事件的一种内部机制。当某种内部或外部事件发生时,中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。中断的处理过程一般为:关中断(在此中10 断处理完成前,不处理其它中断)、保护现场、执行中断服务程序、恢复现场、开中断等。6.S08系列MCU都有哪些中断源?答:S08系列MCU有26个中断源,按优先级从高到低的顺序分别是:复位中断(1个)、SWI指令中断(1个)、IRQ引脚中断(1个)、低电压检测中断(1个)、ICG中断(1个)、定时器中断(10个)、SPI中断(1个)、SCI中断(6个)、键盘输入中断(1个)、ADC转换完成中断(1个)、IIC中断(1个)和实时中断(1个)。26个中断源只有18个中断向量,有的是几个中断源使用同一个中断向量。7.S08系列MCU的中断执行过程分为哪几个步骤?答:CPU每执行完一条指令,若程序有开放某些中断及总中断(使用CLI指令),则CPU按照优先级次序查询所有中断标志位,若某个中断已发生,则响应该中断请求。中断响应过程是:(1)CPU内的寄存器PCL、PCH、X、A、CCR依次进栈(注意H未被保护,这是为了与HC05系列MCU兼容,所以必要时,H应由用户中断服务程序保护);(2)自动关总中断(即相当于自动执行SEI指令),防止其他中断进入;(3)从相应的中断向量地址取出中断向量(即中断服务程序的入口地址)送给PC;(4)执行中断服务程序,直到执行中断返回指令RTI。RTI指令从堆栈中依次弹出CCR、A、X、PCH、PCL,使CPU返回原来中断处继续执行;(5)若中断过程也允许响应新的中断,可在中断服务程序中用CLI指令开放中断。一般不建议这样做,可用其他编程技巧处理相关问题。8.给出AW60中断编程框架与基本步骤。答:在CW环境下使用AW60芯片中断步骤是:在main.c中,依照“关总中断→开模块中断→开总中断”的顺序打开模块中断;在isr.c文件中,编写中断服务程序,修改中断向量表;按照这种思路,编程的基本步骤可以概括为3步:(1)新建(或者复制)一个isr.c文件,并加入工程中。(2)定义中断向量表(复制isr.c的应修改中断向量表)。(3)定义ISR并在中断向量表中填入相应ISR的名称。如中断处理函数文件(isr.c)之中的函数interruptvoidSCI1_Recv(void)的定义。9.用一种高级语言实现PC方串行数据收发的通用程序(要求:从PC方发送数据A到MCU,MCU收到后,判断是否是A,若是,回发给PC机,在PC机显示“串行口正常”,若不是,则在PC机显示“通信有误”。)参见随书光盘的习题参考解答程序。10.在上一题测试的基础上编写通信程序,实现如下功能:通过PC机发送一个命令以控制接在PTA0~PTA7口的8个小灯亮暗状态,各个小灯初始状态都为暗,首先进行通信测试,PC机发送“A”(65),若MCU接收到则8个小灯全亮,并回送字符“A”(65),虽然MCU接收到但有问题,不是“A”(65),说明有误码,则4个小灯全亮,并回送字符“0”(48),否则8个小灯全暗无反应,通信测试成功后进入控制状态,PC机发送字符串“11”,PTA0口灯亮;发送“10”,PTA0口灯暗;发送“21”,PTA1口灯亮;发送“20”,PTA1口灯暗;依此类推,当给PTA口发送“01”,8个小灯全亮,发送“00”,全暗。参见随书光盘的习题参考解答程序。11 第6章GPIO的应用实例—键盘、LED与LCD习题参考答案1.为了实现对键盘的编程,至少应该考虑哪几个方面的问题?分别如何解决?答:第一,如何识别键盘上的按键?第二,如何区分按键是否真正地被按下,还是抖动?第三,如何处理重键问题?(1)键的识别如何知道键盘上哪个键被按下就是键的识别问题。若键盘上闭合键的识别由专用硬件实现,称为编码键盘;而靠软件实现的称为未编码键盘。在这里主要讨论未编码键盘的接口技术和键盘输入程序的设计。识别是否有键被按下,主要有查询法、定时扫描法与中断法等。而要识别键盘上哪个键被按下主要有行扫描法与行反转法。(2)抖动问题当键被按下时,会出现所按的键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况,当释放一个按键时也会出现类似的情况,这就是抖动问题。抖动持续的时间因操作者而异,一般为5~10ms之间,稳定闭合时间一般为十分之几秒~几秒,由操作者的按键动作所确定。在软件上,解决抖动的方法通常是延迟等待抖动的消失或多次识别判定。(3)重键问题所谓重键问题就是有两个及两个以上按键同时处于闭合状态的处理问题。在软件上,处理重键问题通常有连锁法与巡回法。2.编程:对于键盘程序,样例中使用的是中断法。请用查询法实现键盘功能。答:略。3.简述扫描法LED显示编程原理。答:略。具体参见本章6.2.1。4.简述字符型液晶显示控制器HD44780的编程结构。答:从编程角度看,HD44780内部主要由指令寄存器(IR)、数据寄存器(DR)、忙标志(BF)、地址计数器(AC)、显示数据寄存器(DDRAM)、字符发生器ROM(CGROM)、字符发生器RAM(CGRAM)及时序发生电路构成。5.编程:在LCD上同步显示PC时间。答:略。12 第7章定时器模块习题参考答案1.实现计数与定时的基本方法有哪些?比较它们的优缺点。答:实现计数与定时的基本方法有三种:完全硬件方式、完全软件方式和可编程计数器/定时器方法。其中完全硬件方式速度快,但通用性和灵活性差;完全软件方式的优点是节省硬件。主要缺点是执行延时程序期间,CPU一直被占用,所以降低了CPU的使用效率,也不容易提供多作业环境;可编程计数器/定时器方法的最突出的优点是计数时不占用CPU的时间。2.简述AW60定时器模块的定时功能是如何实现的。答:在AW60定时器的内部有状态和控制寄存器,通过对它某些位的设置,就可以确定多少时间计数器加1,即定时间隔。通过对状态和控制寄存器的某位进行设置,可以决定在计数器溢出时,是否允许中断。利用这样的中断,可以编写中断例程,实现预设的功能。在定时器内部还有个预置寄存器,当计数器的值等于预置寄存器的值时,称为计数器溢出,当计数器溢出时,计数器的值被赋0,同时将计数器溢出标志等状态置于状态和控制寄存器中。使用预置计数功能可以得到精确的溢出时间,可以在任何时候暂停或清除计数器的计数(溢出功能是定时器的最基本的功能)。3.定时器模块的核心是什么,为什么?答:定时器模块的核心是计数器。计数器装载预置的初始计数值之后,启动会以预设的频率进行加一或者减一的运作,当其值变化到0(溢出到0或者减到0)时,即完成了定时的功能,其定时的时长取决于预置的初始计数值和预设的频率。4.设计并编程:仿照本章给出的定时器1通道0输入捕捉中断里程,捕捉两路输入信号,分别用相应的指示灯指示。请参考随书光盘内的习题解答程序。5.比较AW60定时器模块实现输出比较功能与PWM功能的异同点。答:PWM产生一个在高电平和低电平之间重复交替的输出信号,这个信号被称为PWM信号,也叫脉宽调制波。通过指定所需的时钟周期和占空比来控制高电平和低电平的持续时间。通常定义占空比为信号处于高电平的时间(或时钟周期数)占整个信号周期的百分比,方波的占空比是50%。脉冲宽度是指脉冲处于高电平的时间。PWM的另一个常见用途是控制输入到某个设备的平均电流或电压。PWM的常见应用是为其他设备产生类似于时钟的信号。因为S08是8位MCUs系列,定时器通道寄存器的设置被缓存起来,以确保连续16位数据更新,并避免出现意外的PWM脉冲宽度。写TPMxCnVH或TPMxCnVL中的任意一个寄存器,也就是写缓冲寄存器。在边沿对齐模式下,只有在一个16位寄存器的两个8位字节都被写入后,且TPMxCNTH:TPMxCNTL计数器中的值为0x0000,计数值被转移至相应的定时器通道寄存器(直到下一个整周期新的占空比才有效)。6.综合设计:利用输入捕捉功能,只用定时器的一个通道,测量一路输入,将输入信号的电平(只区分高低)随时间变化的情况以图形方式显示在PC屏幕上。请参考随书光盘内的习题解答程序。13 第8章串行外设接口SPI习题参考答案1.简述SPI工作原理。答:可以从SPI工作时序,主机从机,以及如何传输数据等几个方面展开描述,具体参加本章第一节内容。2.为什么在SPI通信时序图中会有四种情况?答:先来解释一下SPI通信时所涉及的一时钟相位与时钟极性。时钟相位,表示时钟信号在空闲时是高电平还是低电平。时钟极性,决定数据是在SPSCK的上升沿还是在SPSCK时钟的下降沿采样。从上面的分析我们可以看出来,通讯双方确定SPI通信时选择时序时,一种有四种时序可以选择,使得双方的时钟相位与时钟极性保持一致。3SPI通信时时钟以那个设备的时钟为基准?为什么?答:SPI主设备的时钟极性和时钟相位是以从设备的时钟极性和时钟相位为基准的,因此在配置SPI接口时,必须先了解从设备的时钟要求。从设备何时接收数据,是在时钟的上升沿还是下降沿?何时输出数据,是在时钟的下降沿还是上升沿?由于主设备的接收引脚与从设备的发送引脚相连,主设备的发送引脚与从设备的接收引脚相连接,即从设备接收的数据时主设备的发送引脚发出的,因此主设备接收数据的极性跟从设备接收数据的极性相反,跟从设备发送数据的极性相同。4.SPI与SCI同样都是串行数据传输,为什么SPI协议通信双方多了一个时钟线SPSCK答:正因为SPI数据是一位一位传输的,所以在传输的时候要有SPSCK提供时钟脉冲完成数据的传输,数据通过MOSI,MISO线在始终上升沿或者下降沿时改变,在紧接着的下降沿或上升沿被读取,完成一位数据的读取,输入也使用同样的原理。这样,在至少8次时钟信号的改版(上沿和下沿为一次),就可以完成8为数据传输。5.同步通信与异步通信的区别与联系。答:异步通讯在发送字符之前,发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接受下来。在每次传输的数据之前要加上起始位跟停止位(结束位),异步传输的好处是通讯设备简单、发送端可以随时发送数据。缺点就是在每次传输时传输的,开始位和停止位的传输给通讯双方带来了额外的传输。同步通信的通信双方必须先建立同步,即双方的时候要调整到一个频率。收发双方不停地发送和接收持续的同步比特流。因此通讯双方必须保持相同的时钟频率,很显然这也是同步通信的缺点所在,而且双发在通信之前必须确定好传输时的时序图,时钟相位、时钟极性都必须保持一致。好处就是不用传输额外的标志比特。6.阅读网络光盘中关于AT45DB041D芯片的介绍,在本书给出的参考程序的基础上,完善块擦除,扇区擦除灯驱动函数,并测试。答:略。14 第9章Flash存储器在线编程习题参考答案1.简述Flash存储器的特点。答:Flash存储器是一种高密度、真正不挥发的高性能读写存储器,兼有功耗低、可靠性高等优点。与传统的固态存储器相比,Flash存储器的主要特点如下。(1)固有不挥发性:这一特点与磁存储器相似,Flash存储器不需要后备电源来保持数据。所以,它具有与磁存储器一样无需电能保持数据的优点。(2)易更新性:Flash存储器具有电可擦除的特点。相对于EPROM(电可编程只读存储器)的紫外线擦除方式,Flash存储器的电擦除功能为开发者节省了大量时间,也为最终用户更新存储器内容提供了方便条件。(3)成本低、密度高、可靠性好:与EEPROM(电可擦除可编程只读存储器)相比较,Flash存储器的成本更低、密度更高、可靠性更好。2.AW60的Flash存储器有什么特点?答:要点主要有以下几条:(1)编程速度快且可靠性高。S08系列MCU的片内Flash存储器的整体擦除时间可以控制在5ms以内,对单字节的编程(写入)时间也在40ns以内。片内Flash存储器的存储数据可以保持10年以上,可擦写次数均在1万次以上。(2)单一电源电压供电。一般的Flash存储器,在正常的只读情况下,只需要用户为其提供普通的工作电压即可,而要对其编程(写入)时还需要同时提供高于正常工作电压的编程电压。正因为Flash的读写电压要求不同,一些公司的内置Flash存储器便放弃了在线擦除写入功能,而仅有通过编程器的写入功能。但是,S08系列MCU通过在片内集成的电荷泵,可由单一工作电压在片内产生出编程电压,这样就实现了单一电源供电的在线编程电压,而不需要为Flash的编程增加额外的编程电压模块,同时也使S08系列MCU兼具了两种编程模式。(3)支持在线编程。S08系列MCU的片内Flash存储器支持在线编程,允许MCU内部运行的程序去改写Flash存储器的内容,这样就可以代替外部电可擦除存储芯片,从而减少了外围部件,增加了嵌入式系统开发的方便性。3.AW60的Flash存储器有哪两种编程模式?两种模式有什么区别?答:从Flash存储器的基本特点可以看出,在MCU中可以利用Flash存储器来固化程序,一般情况下通过编程器来完成这种操作,Flash存储器工作于这种情况称为监控模式(MonitorMode)或写入器模式,这与一般的EPROM、OTP、EEPROM装入程序的方式十分相似。另一方面,由于Flash存储器具有电可擦除的特点,因此在程序运行过程中有可能对Flash存储区的数据或程序进行更新,Flash存储器工作于这种情况叫做用户模式(UserMode)或在线编程模式(In-CircuitProgram)。但是,并不是所有类型的MCU的内部Flash存储器都具有在线编程功能。目前有的公司出品的MCU还不支持Flash存储器在线编程模式。Freescale的S08系列MCU的片内Flash均支持这两种编程模式。一般来说,两种模式对Flash存储器的编程操作的程序是一致的,差别在于调用这些程序的方式和环境的不同。4.AW60的Flash存储器编程时涉及哪些寄存器,其各自地址是什么?答:在AW60中,与Flash编程有关的寄存器有6个,它们分别是Flash时钟分频寄存器(FCDIV)、Flash选项寄存器(FOPT和NVOPT)、Flash配置寄存器(FCNFG)、Flash保护寄存器(FPROT和15 NVPROT)、Flash状态寄存器(FSTAT)和Flash命令寄存器(FCMD),其对应的地址分别为$1820、$1821、$1823、$1824、$1825和$1826。5.AW60的Flash存储器的编程命令一般执行哪些步骤?答:可以分为以下几步:(1)向Flash地址中写入一个数据。地址和数据信息都会被锁定到Flash接口中。对于空白检测和擦除命令,数据信息是一个任意值;对于页擦除命令,地址信息是擦除页(512字节)地址中的任意一个地址;对于空白检测和整体擦除命令,地址信息是Flash中的任意一个地址。(2)向Flash命令寄存器FCMD中写入需要执行的命令。(3)执行命令。将Flash状态寄存器FSTAT的FCBEF位置1,同时开始执行命令寄存器中的命令。6.AW60的Flash存储器的编程命令的执行流程是怎样的?答:在进行Flash擦写编程时,也需要遵循严格的时序流程。批量模式写一个字节命令和其他命令的执行过程有很大差别。批量模式意味着有很多连续数据需要写入Flash,每执行一次写入命令后,向Flash中加入的写入高电压并不撤销,这样就加快了数据写入速度;而对于其他的命令,在命令执行的时候,加高电压,命令执行结束的时候立即撤销高电压。7.给出AW60芯片的擦除与写入子程序的编程要点。答:使用Flash在线编程技术可以省去外接EEPROM,不仅简化了电路设计,也提高了系统稳定性。我们将Flash的执行程序编译后存放到Flash中,当需要使用时则将这段代码复制到RAM中,同时需要修改一下执行指令,正是由于这个特殊的过程,根据实际编程调试与项目开发过程中积累的经验,提出以下注意点,供读者参考:(1)RAM中要留有足够的缓冲区,以便存放复制到RAM中的子程序,具体值是取擦除与写入子程序中的大者即可。它们的大小可在编译后的.LST文件中查得。(2)一次擦除后未被写入过的区域可以再次调用写入子程序写入,但写入过的区域,未经擦除不能重写。(3)由于擦除是每次擦除一页(512字节),所以数据应合理安排,避免误擦。(4)页首地址的定义须遵照保护寄存器FLBPR定义的规则。(5)在线编程时使用的Flash存储区域应在程序Flash存储区域之前,因为Flash保护区为FLBPR决定的地址至末尾。8.AW60芯片如何加密?如何解除密码?答:1.为了防止Flash中的程序被非法读出,就要将MCU设置为保密状态,下面提供两种加密Flash方法。方法一:通过修改文件isr.c文件中的安全配置域(即修改FOPT寄存器,地址0xFFBF的值和密钥地址0xFFB0~0xFFB7的值)实现加密。例如,若要设置密码0x3132333435363738,则只要将这8字节数据依次写到地址0xFFB0~0xFFB7处即可,该密码即为字符串“12345678”。方法二:在程序运行中,通过调用自定义函数修改Flash相关地址处的内容来加密Flash。通过修改NVOPT地址的内容,复位后,该寄存器的值将自动载入FOPT中。2.S08系列芯片在加密后,需要重新写入程序,必须先解除密码。这里提供2种解除密码方法。方法一:通过将写入器的BDM接口,对已经加密的芯片进行整体擦除,具体使用方法参见光盘中“《S08/S12/ColdFire三合一写入器》使用说明”。16 方法二:在芯片中驻留擦除密码或擦除Flash的操作接口,通过调用Flash_KEY_Match函数实现。用户可以选择一种“后门”机制,假如寄存器NVOPT/FOPT的KEYEN位为0时,后门机制无效,但是如果KEYEN位为1时,用户按照如下的方法取消MCU的保密状态:(1)将FCNFG的KEYACC位置1。(2)向NVBACKKEY~NVBACKKEY+7的位置(Flash中$FFB0~$FFB7)依次写入8个字节,由于第(1)步的操作,MCU会将该写入操作理解为是密码比较操作,这8个字节被看作是后门的钥匙。(3)将FCNFG的KEYACC位置0,如果用户写入的8个字节和NVBACKKEY~NVBACKKEY+7的位置的8个字节是匹配的,MCU会将SEC01:SEC00改写成1:0,从而取消MCU的保密性。这种保密钥匙只能从保密的存储器中写入,所以在没有用户程序的配合下,背景调试命令也不可以进入的。当然如果不知道后门钥匙,使用这种方法也是无法取消MCU的保密态。17 第10章集成电路互连总线I2C习题参考答案1.简述I2C总线的特点。答:I2C主要特点总结如下。(1)在硬件上,二线制的I2C串行总线使得各IC只需最简单的连接,而且总线接口都集成在IC中,不需另加总线接口电路。电路的简化省去了电路板上的大量走线,减少了电路板的面积,提高了可靠性,降低了成本。在I2C总线上,各IC除了个别中断引线外,相互之间没有其他连线,用户常用的IC基本上与系统电路无关,故极易形成用户自己的标准化、模块化设计。(2)I2C总线还支持多主控(multi-mastering),如果两个或更多主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据被破坏。其中任何能够进行发送和接收的设备都可以成为主机。一个主机能够控制信号的传输和时钟频率。当然在任何时间点上只能有一个主机。(3)串行的8位双向数据传输位速率在标准模式下可达100kbps(S08AW系列的I2C模块只支持标准模式),快速模式下可达400kbps,高速模式下可达3.4Mbps。(4)连接到相同总线的IC数量只受到总线最大电容(400pf)的限制。但如果在总线中加上82B715总线远程驱动器可以把总线电容限制扩展十倍,传输距离可增加到15m。2.简述I2C总线的数据传输过程。答:在物理结构上,I2C系统由一条串行数据线SDA和一条串行时钟线SCL组成。主机按一定的通信协议向从机寻址并进行信息传输。在数据传输时,由主机初始化一次数据传输,主机使数据在SDA线上传输的同时还通过SCL线传输时钟。信息传输的对象和方向以及信息传输的开始和终止均由主机决定。每个器件都有唯一的地址,且可以是单接收的器件(例如LCD驱动器),或者是可以接收也可以发送的器件(例如存储器)。发送器或接收器可在主或从模式下操作,这取决于芯片是否必须启动数据的传输还是仅仅被寻址。3.简述AW60的I2C主机从从机读一个字节数据的过程,并加以理解。答:当主机要从从机读1个字节数据时,主机首先产生START信号,然后紧跟着发送一个从机地址,注意此时该地址的第8位为0,表明是向从机写命令,这时候主机等待从机的应答信号(ACK),当主机收到应答信号时,发送要访问的地址,继续等待从机的应答信号,当主机收到应答信号后,主机要改变通信模式(主机将由发送变为接收,从机将由接收变为发送),所以主机发送重新开始信号,然后紧跟着发送一个从机地址,注意此时该地址的第8位为1,表明将主机设置成接收模式开始读取数据,这时主机等待从机的应答信号,当主机收到应答信号时,就可以接收1个字节的数据,当接收完成后,主机发送非应答信号,表示不再接收数据,主机进而产生停止信号,结束传送过程。4.从从机的接入、时钟控制、数据传输速度、是否可以实现多主控、作用领域等方面比较SPI和I2C。答:I2C需要有双向I/O的支持,而且使用上拉电阻,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI实现要简单一些。I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。在实际应用中,应该根据需要使用SPI接口或者是I2C接口。18 5.用AW60的通用I/O口模拟实现I2C通信,编写规范的收发数据的子程序。答:略6.构建一个多设备的I2C总线系统。答:如图3图10-1I2C总线的典型连接在物理结构上,I2C系统由一条串行数据线SDA和一条串行时钟线SCL组成。主机按一定的通信协议向从机寻址并进行信息传输。在数据传输时,由主机初始化一次数据传输,主机使数据在SDA线上传输的同时还通过SCL线传输时钟。信息传输的对象和方向以及信息传输的开始和终止均由主机决定。每个器件都有唯一的地址,且可以是单接收的器件(例如LCD驱动器),或者是可以接收也可以发送的器件(例如存储器)。发送器或接收器可在主或从模式下操作,这取决于芯片是否必须启动数据的传输还是仅仅被寻址。7.简述SPI与I2C的区别。答:SPI协议没有定义寻址机制,需通过外部SS信号线选择设备,当出现多slave应用时,需要多根SS信号线,实施起来较I2C要复杂。此外,SPI总线不支持总线控制权仲裁,故只能用在单Master的场合;而I2C可以支持多Master的应用。SPI协议相对I2C要简单,没有握手机制,数据传输效率高,速率也更快,通常应用中可达几Mbps;此外SPI是全双工通信,可同时发送和接收数据,因此,SPI比较适合用于数据传输的场合。比如需要较大批量数据传输的场合(比如MMC/SD卡的数据传输就支持SPI模式),或者无需寻址传输的场合。而I2C协议功能较丰富,但也相对复杂,多用在传输一些控制命令字等有意义数据的场合。。SPI接口属于一种非常基本的外设接口,但是应用却很广泛。Motorola还推出了扩展功能的QSPI(QueuedSPI)接口,应用更为广泛。19 第11章模数转换模块A/D习题参考答案1.若A/D转换的参考电压为5V,要能区分1.22mV的电压,则要求采样位数为多少?答:因为5/212=1.22mV,则要求采样位数为12位。2.为什么要对采集的数据进行滤波,除了中值滤波和均值滤波外,还有什么滤波方法?答:为了使采样的数据更准确,必须对采样的数据进行筛选去掉误差较大的毛刺。通常我们采用滤波来提高采样精度。除了中值滤波和均值滤波外,还有一阶滞后滤波,限幅滤波法等。3.简述AW60的A/D转换模块的主要特性。答:AW60ADC的主要特性总结如下:(1)具有10位分辨率的线性逐次逼近算法。(2)高达28个模拟输入。(3)10位或8位右对齐输出格式。(4)单次转换或连续转换(单次转换后自动返回空闲状态)。(5)采样时间和转换速度/功率可配置。(6)最多可选择4个输入时钟源。(7)在等待或stop3模式下实现了低噪音运行。(8)异步时钟源实现了低噪音运行。(9)可选的异步硬件转换触发。(10)与小于,大于或等于可编程值自动比较的中断。(11)内置温度传感器与AD26通道相连。4.若总线时钟频率为20MHz,当ADC1CFG寄存器的ADCLK位被设置为01,ADIV位被设置为10时,A/D采样的频率为多少?答:因为ADCLK位被设置为01,则时钟源=总线时钟/2=10MHz;又因为ADIV位被设置为10,则选择ADC生成内部时钟ADCK所使用的分频率为4分频输入时钟,则A/D采样的频率=10/4=2.5MHz。5.使用AW60的A/D转换模块采集一路数据,然后用中值滤波和一阶滞后滤波法(取a=0~100,本次滤波结果=((100-a)×本次采样值+a×上次滤波结果))/100滤波,最终显示在PC端。答:略20 第12章系统开发其他模块应用习题参考答案1.简要描述AW60的ICG结构与外部连接。答:ICG有四个功能模块组成,即振荡器模块、内部参考发生器模块、锁频环模块与时钟选择模块。振荡器引脚用来给MCU提供一个外部时钟,在低功耗模式中振荡器的振幅被限制在大约1V,高峰到高峰。主要有两个引脚用来连接,即EXTAL与XTAL。2.简要描述AW60的ICG的操作模式。答:模式1—关模式(Off)。在此模式下输出时钟ICGOUT关闭。模式2—自时钟模式(SCM)。在复位后立即进入该默认操作模式。模式3—FLL使能内部参考时钟模式(FEI)。模式4—绕过FLL模式(FLLbypassedexternal,FBE)。模式5—FLL使能外部参考时钟模式(FLLengagedexternal,FEE)。3.说明AW60的ICG模块有哪些编程寄存器,简要说明各自的作用。答:AW60的ICG模块的编程模块有六个,分别是ICGC1(ICG控制寄存器1),ICGC2(ICG控制寄存器2),ICG状态寄存器1(ICGS1),ICG状态寄存器2(ICGS2),ICG过滤寄存器(ICGFLTU,ICGFLTL),ICG修正寄存器(ICGTRM)。ICG控制寄存器主要用于一些功能的初始化,主要功能是:高增益震荡选择、频率选择、外部参考时钟选择、时钟模式选择、启用或禁止时钟丢失检测、设置倍增因子与分频因子等。ICG状态寄存器主要显示ICG的状态。ICG过滤寄存器(ICGFLTU,ICGFLTL)组成的12位位过滤值,决定当前用来控制DCO频率的过滤值。ICG修正寄存器(ICGTRM)用于修正内部晶振。4.无外部晶振,请编程将总线频率设为fBUS=5.4MHz。答:略5.简述AW60有哪些通用中断。—————答:除了各个模块具体中断之外,AW60还有IRQ、RTI、BRK及SWI等中断资源可供开发者使用。6.AW60有哪些复位源?答:AW60系列有如下的七个复位源:(1)上电复位(POR)(2)低电压检测(LVD)(3)计算机运行正确(COP)定时器(4)非法的操作码检测(5)后台调试强制复位(6)复位引脚(RESET)(7)时钟发生器的锁丢失和时钟复位丢失7.简述AW60防止低电压系统。答:AW60系列包括一个防止低电压的系统,以便在电源电压不稳时保护存储器内容、控制MCU系统状态。该系统由加电复位(POR)电路和LVD电路组成,其中LVD电路带脱扣电压用于警告和检测。当SPMSC1中的LVDE设置为1时,LVD电路使能。当进入停止模式时,21 LVD禁止,除非SPMSC1中设置了LVDSE。如果同时设置了LVDSE和LVDE,那么MCU不能进入stop2模式(进入stop3模式),LVD激活的stop3模式更耗电。8.简述AW60的操作模式。答:AW60提供了四种操作模式供用户选择,分别为运行模式,激活后台模式,等待模式,停止模式。9.简述看门狗COP功能。答:当应用软件与期望的运行不相符时,COP看门狗试图强制系统复位。为防止系统从COP计数器复位,应用软件必须周期性地重置COP计数器。如果应用程序丢失和在COP计数器到达中止时间之前重置COP计数器失败,将产生一个系统复位,强制系统回到一个已知的起始点。SOPT1中的COPE设置为使能COP看门狗,COP计数器通过对SRS的地址写任何值被重置。这个写操作对只读的SRS没有任何影响,而是被解码为发送给COP计数器的一个复位信号。10.简述MCLK输出。答:PTA0脚与MCLK时钟输出复用。如果MCSEL位都是0,MCLK时钟禁止。若MCSEL的任意一个位被置1,无论该管脚的端口数据方向控制位的状态如何,都会导致PTA0脚输出内部MCU总线时钟分频时钟。分频比率由MCSEL位决定。管脚的斜率和驱动强度分别由PTASE0和PTADS0控制。如果斜率控制功能被打开,最大时钟输出频率将会受到限制。PTC2脚与MCLK时钟输出复用。置位引脚使能位MPE,导致PTC2脚输出一个内部MCU总线时钟的分频时钟。分频率由MCSEL位决定。当MPE被置位,不论该引脚的端口数据方向控制位的状态如何,PTC2引脚被强制作为一个输出管脚。如果MCSEL位全是0,该引脚输出低电平。引脚的转换率和驱动强度分别由PTCSE2和PTCDS2位控制。22 第13章JM60的USB2.0开发方法习题参考答案1.差分信号的优点有哪些?答:差分信号的第一个好处是,因为你在控制"基准"电压,所以能够很容易地识别小信号。在一个地做基准,单端信号方案的系统里,测量信号的精确值依赖系统内"地"的一致性。信号源和信号接收器距离越远,他们局部地的电压值之间有差异的可能性就越大。从差分信号恢复的信号值在很大程度上与"地"的精确值无关,而在某一范围内。差分信号的第二个好处是,它对外部电磁干扰(EMI)是高度免疫的。一个干扰源几乎相同程度地影响差分信号对的每一端。既然电压差异决定信号值,这样将忽视在两个导体上出现的任何同样干扰。除了对干扰不大灵敏外,差分信号比单端信号生成的EMI还要少。差分信号的第三个好处是,在一个单电源系统,能够从容精确地处理"双极"信号。为了处理单端,单电源系统的双极信号,我们必须在地和电源干线之间某任意电压处(通常是中点)建立一个虚地。用高于虚地的电压来表示正极信号,低于虚地的电压来表示负极信号。接下来,必须把虚地正确地分布到整个系统里。而对于差分信号,不需要这样一个虚地,这就使我们处理和传播双极信号有一个高真度,而无须依赖虚地的稳定性。2.USB设备分类及设备描述符作用是什么。答:USB对一些具有相似特点并提供相似功能的设备进行抽象,进而将USB设备分成多种标准类,包括音频、通信、人机接口设备HID、显示、海量存储、电源、打印、集线器设备类等。设备类驱动程序通常由操作系统提供,开发人员可以直接使用,不必自己编写。设备描述符和接口描述符中的类代码、子类代码及协议代码指定了USB设备或其接口所属的设备类及相关信息,并定位合适的设备类驱动程序。3.USB设备、配置、接口和端点的含义是什么?答:设备描述符用于说明设备的总体信息,包括描述设备的类型、设备支持的协议类型、供应商ID(VID)、产品ID(PID)、设备版本号、供应商名称、产品名称及设备所支持的配置数等,目的是让主机获取插入的USB设备的属性,以便加载合适的驱动程序。一个USB设备只能有一个设备描述符,固定为18字节的长度,它是主机向设备请求的第一个描述符。配置描述符用于说明USB设备中各个配置的特性,包括配置信息的总长度、配置所支持接口的个数、配置值、配置的属性及设备可以从总线提取的最大电流等。一个USB设备可以包含一个或多个配置(如USB设备的低速模式和高速模式可分别对应一个配置)。每一个配置都对应一个配置描述符,长度固定为9字节。接口描述符用于说明USB设备中各个接口的特性,包括接口号、接口使用的端点数、所属的设备类及其子类等。一个配置可以包含一个或多个接口,每个接口都必须有一个接口描述符。如对一个光驱来说,当用于文件传输时使用其大容量存储接口;而当用于播放CD时,使用其音频接口。接口是端点的集合,可以包含一个或多个可替换设置,用户能够在USB处于配置状态时,改变当前接口所含的个数和特性。所有的传输都是传送到设备端点(endpoint),或是从设备端点发出。这种端点实际上就是一个能够存储多个字节的缓冲器。端点通常是一个数据存储器区块,或是控制器芯片中的一个寄存器,端点所存储的数据可能是收到的数据,或是等待发送的数据。端点所支持的传输类型和传输方向等信息,都在端点描述符中定义。每个端点的描述符总是作为配置描述符的一部分返回,端点0无描述符。端点描述符长度为7字节。23 4.USB传输速度的分类和区别方式是什么?答:根据USB2.0协议有3种数据传输模式:低速、全速和高速。VCCVBUSVBUSD+D+USBUSBUSB数据线低速主机D-D-设备GNDGND【注】:(1)图中两个灰色上拉电阻的阻值均为1.5kΩ;两个白色下拉电阻的阻值均为15kΩ。(2)VBUS为+5V,VCC为+3.3V。USB设备上电时,如果主机检测到D+线上为高电压,说明连接上的是高速/全速设备;若检测到D-线上为高电压,说明连接上的是低速设备。高速设备在连接起始时需要以全速速率与主机进行通信,以完成其配置操作。在复位(主机将D+和D-都拉低,使数据线处于SE0状态,并保持至少10ms。在2.5us后设备将识别复位条件。该复位要与微处理器的上电复位区别开来,它是USB协议复位,是为了使设备的USB信号开始时是一个已知状态)期间,支持高速的设备发送一个K状态(这是由集成在USB设备接口芯片的内部的软件控制开关完成的),具有高速能力的HUB检测到总线上的该状态并响应一个K和J的交替状态序列。以后设备就将全速提高为高速通信。如果HUB不响应设备的K状态,那么设备就用全速通信。5.USB协议中通信的基本单元是包,请问有几种类型的包?答:包有4种类型,包括令牌、数据、握手或特殊四种包类型。包类型PID[3:0]含义格式OUT0001B主机向设备发送数据8位7位4位5位IN1001B主机向设备要数据PIDPIDADDRENDPCRC5SETUP1101B主机到设备,用于控制传输令牌包帧的起始标记,标志着一个8位11位5位SOF0101B时间片的开始,表明接下来PIDPID帧序列号CRC5安排数据传输DATA00011B第偶数次发送的包8位0~1024字节16位数据包PIDPID数据CRC16DATA11011B第奇数次发送的包ACK0010B接收器收到无错误的包接收器无法接收数据或握手包NAK1010B发射器无法送出数据8位STALL1110B端点产生停滞的状况PIDPID使能下游端口的USB总线特殊包PRE1100B的数据传输切换到低速的设备24 6.JM60支持几个端点?作用是什么?答:7个端点,其中端点0、5和6是双缓冲。端点0用于配置设备。其他可用于数据传输。7.什么是GUID,作用是什么?答:GUID(GloballyUniqueIdentifier,全球唯一标识符)是一个128位的字母数字标识符,用于指示产品的唯一性安装。在许多流行软件应用程序(例如Web浏览器和媒体播放器)中,都使用GUID。GUID的标准格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,将GUID分成5个类别的十六进制字符,类别之间以连字号“-”隔开,其中x是0-9或A-F范围内的一个十六进制的数字。世界上任何两台计算机都不会生成重复的GUID值。GUID主要用于在拥有多个节点、多台计算机的网络或系统中,分配具有唯一性的标识符。在Windows平台上,GUID应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。8.JM60编程的基本要点?答:编写JM60的USB通信时,需包含USB.h和USB.c两个文件。编写代码时按如下几步:1.修改USB的相关字符串描述符。具体见USB.c中的注释并做相应的修改。主要的有以下几种:(1)供应商描述符字符串(2)设备序列描述符字符串(3)产品描述符字符串(4)接口描述符字符串(5)配置描述符字符串2.修改设备的PID和VID。根据USB规范的规定,所有的USB设备都有供应商ID(VID)和产品识别码(PID),主机通过不同的VID和PID来区别不同的设备,VID和PID都是两个字节长,其中,供应商ID(VID)由供应商向USB执行论坛申请(USB应用厂商论坛,www.usb.org),每个供应商的VID是唯一的,PID由供应商自行决定。正规厂家只需要申请VID,PID由厂家自行确定,所以存在相同型号的产品,可能采用了不同的主控(商业需要,很正常),而他们的PID是一样的,基于上述原因通过VID和PID就不能准确识别USB设备的主控型号,这个问题大家在使用USB设备的过程中需要注意。对于不同产品需要不同的PID和VID,即修改设备描述符中的PID和VID字段。3.编程时按以下步骤:(1)初始化USB模块;INT8UUSBInit(void);(2)发送数据;INT8UUSBReceiveData(INT8Uep,INT8U*data);(3)接收数据。voidUSBSendData(INT8Uep,INT8U*data,INT8Ulength);具体的函数描述见USB.c和USB.h。注意:程序中数据接收需设备主动获取。具体见示例程序主函数。25 9.PC方(C#)编程基本要点是什么?答:PC方的USB通信程序是用C#实现的。使用网上提供的开源dll——LibUsbDotNet.dll。示例程序中已经封装好了USB通信编程,提供了相应接口。编程按以下步骤进行:1.安装EXE文件“LibUsbDotNet_Setup.2.2.7.exe”。2.添加文件“USB.cs”。3.导入文件名为“LibUsbDotNet.dll”的库(文件在第一步中安装目录里)。4.在代码中添加引用usingUSBComponent;usingLibUsbDotNet;usingLibUsbDotNet.Info;usingLibUsbDotNet.Main;usingLibUsbDotNet.DeviceNotify;usingLibUsbDotNet.DeviceNotify.Linux;usingLibUsbDotNet.LibUsb;5.编写代码时按以下步骤:(1)新建USB类对象;如:USBusbTest=newUSB(myVID,myPID);其中myVID和myPID是USB的两个主要参数vid和pid。(2)如果使用事件接收需做如下设置;usbTest.USBDataReceived+=OnRxEndPointData;其中OnRxEndPointData是用来处理数据接收事件的函数。(3)如果需要获取设备的接入和拔出需要做如下设置;usbTest.UsbDeviceNotifier.OnDeviceNotify+=OnDeviceNotifyEvent;其中OnDeviceNotifyEvent是用来处理设备的接入和拔出的函数。4)发送数据publicboolsendData(stringsendData);publicboolsendData(byte[]sendData,intcount);返回值是bool型(TRUE成功,FALSE失败)。(5)接收数据(主动获取)publicstringrecData();publicbyte[]recData(byte[]temp);10.编写一个USB高低端通信的实例。答:见附件。26 第14章DZ60的CAN总线开发方法习题参考答案1.什么是现场总线,主流现场总线有哪些类型?答:现场总线是连接智能现场设备和自动化系统的全数字、双向、多站的通信系统。主要解决工业现场的智能化仪器仪表、控制器、执行机构等现场设备间的数字通信以及这些现场控制设备和高级控制系统之间的信息传递问题。主流现场总线类型:(1)基金会现场总线(FoundationFieldbus简称FF)。它以ISO/OSI开放系统互连模型为基础,取其物理层、数据链路层、应用层为FF通信模型的相应层次,并在应用层上增加了用户层。(2)CAN(ControllerAreaNetwork控制器局域网)。CAN协议分为二层:物理层和数据链路层。CAN的信号传输采用短帧结构,传输时间短,具有自动关闭功能,具有较强的抗干扰能力。(3)LonWorks。它采用ISO/OSI模型的全部7层通讯协议,采用面向对象的设计方法,通过网络变量把网络通信设计简化为参数设置。(4)PROFIBUS。由PROFIBUS--DP、PROFIBUS-FMS、PROFIBUS-PA系列组成。DP用于分散外设间高速数据传输,适用于加工自动化领域。FMS适用于纺织、楼宇自动化、可编程控制器、低压开关等。PA用于过程自动化的总线类型。PROFIBUS支持主-从系统、纯主站系统、多主多从混合系统等几种传输方式。(5)HART。其特点是在现有模拟信号传输线上实现数字信号通信,属于模拟系统向数字系统转变的过渡产品。其通信模型采用物理层、数据链路层和应用层三层,支持点对点主从应答方式和多点广播方式。2.给出CAN总线硬件最简单接法。答:明的CAN硬件连接方法如图,所有的CANTX线路经过快速二极管(如1N4148等)连接至数据线(以免输出引脚短路),CANRX输入直接连接到这条数据线,数据线由一个上拉电阻拉至+5V,以产生所需要的“1”电平。注意该电路中各节点的地是接在一起的。这个电路最大线长限制在1m左右。主要用于在电磁干扰较弱环境下的近距离通信。CAN节点1CAN节点2CAN节点3CANRXCANTXGNDCANRXCANTXGNDCANRXCANTXGND3K+5VGND3.根据CAN总线最简单接法阐述CAN的通信机制(仲裁方式)答:总线空闲时,总线上任何节点都可以开始发送报文,若同时有两个或两个以上节点开始发送,总线访问冲突运用逐位仲裁规则,借助于标识符ID解决。仲裁期间,每一个发送器都对发送位电平与总线上检测到的电平进行比较,若相同,则该节点继续发送。当发送的是一“1”而监视到的是一“0”,则该节点失去仲裁,退出发送状态。举例说明,若某一时刻有两27 个CAN节点A、B同时向总线发送报文,A发送报文的ID为0b00010000000,B发送报文的ID为0b01110000000。由于节点A、B的ID的第10位都为“0”,而CAN总线是逻辑与的,因此总线状态为“0”,此时两个节点检测到总线位和它们发送的位相同,因此两个节点都认为是发送成功,都继续发送下一位。发送第9位时,A发送一个“0”,而B发送一个“1”,此时总线状态为“0”。此时A检测到总线状态“0”与其发送位相同,因此A认为它发送成功,并开始发送下一位。但此时B检测到总线状态“0”与其发送位不同,它会退出发送状态并转为监听方式,且直到A发送完毕,总线再次空闲时,它才试图重发报文。4.CAN上传输的帧类型有哪些?请简要列出并说明其作用。答:(1)数据帧:将数据从一个节点发送器传输到另一个节点的接收器。它由7个不同的位场组成:帧起始(StartOfFramesymbol,SOF)、仲裁场、控制场、数据场、CRC场、应答场、帧结束(EndOfFrame,EOF)。(2)远程帧:其作用在于发送节点请求发送具有同一标识符的数据帧。远程帧也有标准格式和扩展格式,而且都由6个不同的位场组成:帧起始、仲裁场、控制场、CRC场、应答场、帧结束。(3)错误帧:表明在报文应答过程中,某发送节点检测到错误。该帧一般是由连续的6个0或1组成。错误帧由两个不同的场组成。第一个场是由不同节点提供的错误标志(FLAG)的叠加;第二个场是错误界定符。(4)过载帧:用于在先行和后续数据帧(或远程帧)之间提供一附加的延时。过载帧包括两个位场:过载标志和过载界定符。5.给出S08DZ60的MSCAN模块构件化编程要点。答:1.MSCAN初始化系统复位后,初始化MSCAN模块的流程如下:(1)判断CANE,是否处于启动状态。(2)写入处于初始化模式的配置寄存器。(3)清除INITRQ,离开初始化模式,进入正常模式。当MSCAN模块处于正常模式下,需要更改只能在初始化模式中写入的寄存器:(1)CAN总线空闲后,通过设置SLPRQ并等待SLPAK进行确认,将模块置入睡眠模式。(2)进入初始化模式:确定INITRQ并等待INITAK。(3)写入处于初始化模式的配置寄存器。(4)清除INITRQ,离开初始化模式,继续保持正常模式。2.数据帧接收MSCAN模块有5个报文接收缓冲区(Rx0~Rx4),且每个Rx每次最多可以接收8字节数据。以第0个缓冲区Rx0为例(其他Rx的配置与Rx0配置方法相同)。成功接收到有效报文后,MSCAN将RxBG的内容转移到接收器FIFO,设置RXF标志并向CPU生成一个接收中断。将接收标准/扩展数据帧的步骤是:(1)检测接收标志。(2)检测CAN协议报文模式标识符。(3)读标识符、数据长度、标识符。(4)清RXF标志位。3.数据帧发送MSCAN模块有3个报文发送缓冲区(Tx0~Tx2),且每个Tx每次最多可以发送8字节数据。以28 第0个缓冲区Tx0为例(其他Tx的配置与Tx0配置方法相同)。将Tx0配置为发送缓冲区并进行标准/扩展数据帧发送的步骤是:(1)检查数据长度是否符合发送缓冲区数据长度要求。(2)检查总线时钟。(3)寻找空闲的发送缓冲区,并置位发送器缓冲器空(TXEx)标志。(4)CPU写入CANTBSEL寄存器,为该缓冲器设置一个指针,使缓冲器能够在CANTXFG地址空间内访问。(5)CPU将标识符、控制位和数据内容保存到一个发送缓冲器。(6)清除相关TXE标志,缓冲器标志为发送准备就绪。29'