嵌入式课后题答案 联系客服

发布时间 : 星期五 文章嵌入式课后题答案更新完毕开始阅读76d1703343323968011c922f

例如:设定将GPIO118为SDA输出引脚,首先利用寄存器GPDR3设定 GPIO118是输出引脚,当GAFR3的Bit[13:12]=01时,将GPIO118复用为SDA输出引脚。代码如下: GPDR3= GPDR3| (0x01<<22);

GAFR3_U = GAFR3_U &(~(0x11<<12))|(AF1 <<12);

5.编写程序代码,实现设置GPIO8和GPIO41为输出功能,GPIO8为低电平输出,设置GPIO41为高电平输出。

答:

#define GPDR0 (*((volatile unsigned char*)(0x40E0000C))) #define GPDR1 (*((volatile unsigned char*)(0x40E00010))) #define GPCR0 (*((volatile unsigned char*)(0x40E00024))) #define GPSR1 (*((volatile unsigned char*)(0x40E0001C)))

GPDR0= GPDR0 | (0x01<<8); GPCR0= GPCR0 | (0x01<<8); GPDR1= GPDR1 | (0x01<<9); GPSR1= GPSR1 | (0x01<<9);

6.PAX270有几个UART单元,各有什么用途?

答:PAX270有三个UART单元。全功能UART:FFUART支持调制解调器控制功能,最高波特率可达到921600 bps。蓝牙UART:BTUART是一个高速的UART,所支持的波特率可达到921600 bps,并且可以连接到蓝牙模块,但只支持调制解调器控制信号中的CTS和RTS信号。标准UART:STUART的最高波特率可达到921600 bps,但不支持调制解调器控制信号。

7.串行通讯的传输模式有哪些?简述RS232C接口的通信原理。

答:串行通讯的传输模式有三种:单工、半双工和双工。

RS232是全双工的数据发送模式,利用RS232通信时,仅适用3根基本的数据传输线有:RXD、TXD、GND 。TXD(发送线):数据发送信号线 ,数据由该脚发出,送上通信线,没有数据传输时,逻辑电平为“1”;RXD(接收线):数据接收信号线,从通信信号线来的数据,从该脚引入,在无信息时候,逻辑电平为“1”;GND(地线): 参考地信号线,为其他信号线提供电平参考。 8.简述UART模块的通信原理。

答:每个UART 能将从RXD 端接收的串行数据转变为并行的数据,并且能够将来自处理器的并行数据转化串行数据,然后通过TXD 端发送出去。根据UART 是否在FIFO 模式下执行,发送和接收的数据会有选择的锁存在发送/接收FIFO。例如,当UART在接收数据时,来自RXD 端的数据首先会经过接收移位寄存器,然后组织成一个字节的数据,如果运行在FIFO 模式,数据会首先锁存在接收FIFO 里,同时接收缓冲寄存器RBR 会保存FIFO 第一字节单元数据,FIFO 的内容可以通过连续读取RBR 获得,每读写完一次后,FIFO第一字节单元数据会被移出。当UART 收到来自总线的并行数据时,数据首先进入发送缓冲寄存器THR,如果工作在FIFO 模式,数据会再被锁存在发送FIFO,最后才被送入发送移位寄存器,将并行数据以逐位方式在TXD 端发送出去,每次向THR 写入的数据(有效数据最长为8 位)会被送入FIFO,只有FIFO 的第一字节单元会被送入发送移位寄存器里,并且在FIFO里还未发送的数据会逐渐上移到第一字节单元。无论是接收还是发送,当运行在non-FIFO方式时,数据不会被锁存在FIFO,而只会被锁存在寄存器RBR 或THR,可以简单认为在non-FIFO 时,RBR 和THR 分别与接收移位寄存器和发送移位寄存器直接相连。

9.使用FFUART进行异步传输数据,以波特率为9600传送数据,则寄存器FFDLH和FFDLL应如何设置?

答:波特率发生器的时钟通过PXA270的内部系统时钟来设定,采用 14.7456MHz 作为固定的输入时钟,并且可以对它以 1 至(216-1)分频。波特率发生器的时钟必须是波特率的16倍,波特率(BaudRate)可以通过以下公式计算:

FUART以波特率为9600传送数据,即baudrate=9600,经公式计算得 Divisor=96,配置 FFDLH=0X0 ,FFDLL=0x60。

10. 请编写使用FFUART采用查询方式发送/接收数据的函数。 答:(1)接收数据函数 int SerialInputByte(char *c) {

if((FFLSR & 0x00000001)==0) { return 0; }else {

*c = FFRBR; return 1; }

} (2)发送数据函数

void SerialOutputByte(const char c) {

while ((FFLSR & 0x00000020) == 0 ); FFTHR = ((ulong)c & 0xFF); if (c=='\\n')

SerialOutputByte('\\r');

}

void SerialOutputString(char * str) { int i=0; while( (*(str+i))!='\\0') { SerialOutputByte(*(str+i)); i++; }

}

11. 简述PXA270中断控制器的内部结构。

答:PXA270中断控制器,通过设置寄存器 ICMR 屏蔽中断源。通过设置寄存器 ICLR 对中断源分类,即可以让中断源发出的中断请求以 IRQ 中断方式或以 FIQ 中断方式被处理。查询寄存器 ICPR 得知 32 个中断源当前是否有中断请求,在 ICPR 寄存器上显示发出中断请求的中断源不受 ICMR 影响,即 ICMR 即使屏蔽某个中

断源,只要中断源发出中断请求,ICPR仍然会在相应的位上显示“1”。查询寄存器 ICIP 得知以 IRQ 方式被处理的中断源是否发出中断请求,该寄存器受到 ICMP 影响。即 ICIP = ICPR & ICMR & (~ICLR)。查询寄存器 ICFP 得知以 FIQ 方式被处理的中断源是否发出中断请求,该寄存器受到 ICMP 影响。即 ICFP =ICPR & ICMR & ICLR。

第六章

1.简述基于 Xscale PXA 270 处理器的 EELiod 270 开发平台,开发嵌入式Linux系统的交叉开发环境的搭建过程。

答:构建基于嵌入式linux的交叉编译环境的构建过程主要包括以下几方面的内容。

第一:安装一台装有指定操作系统的PC机作宿主开发机,宿主机器在硬件上需具备标准串口、并口和网口,对于嵌入式Linux,宿主机上的操作系统一般要求为Redhat Linux,在此,我们推荐使用Redhat 9.0作为宿主机(开发主机)的操作系统。

第二:检测目标机与宿主机的连接,通过串口实现通信,查看目标机系统的内容。在windows 下使用超级终端,在 linux 下使用minicom。

第三:在宿主机上建立交叉编译环境。利用GNU 编译器的交叉编辑工具链,生成可在ARM系统架构上执行的二进制可执行程序。

第四:实现目标机与宿主机之间文件的传输。设置统一段的网络,通过nfs网络文件共享文件,FTP网络传输上传下载文件。

第五:烧写嵌入式Linux内核、Bootloader、文件系统映像以及应用程序到目标板。软件的更新通常使用串口或网口,最初的Bootloader 烧写是通过并口进行的。 2.宿主PC机上如何查看XSBase 270目标板系统的内容?

答:在Linux操作系统安装完成后,就可以使用Linux下的 minicom来检测宿主机和目标机的连接。在Windows 下面可使用超级终端。 3.如何测试交叉编译环境是否建立成功?

答:首先,使用VI 编辑器创建一个hello.c 文件。

[root@localhost xscale270]# vi hello.c

编写一个简单的程序来打印出一行简单的信息:Welcome Emdoor!。 保存并退出该文件。使用如下的命令来编译该文件。 [root@localhost xscale270]# gcc -o hello hello.c

[root@localhost xscale270]# arm-linux-gcc -o hello hello.c gcc编程生成的是X86系统结构的二进制文件。

arm-linux-gcc是在在宿主机中,交叉编译hello.c源程序,并查看生成的.o目标文件。调用交叉编译器arm-linux-gcc编译hello.c文件

使用file 命令来分别查看编译出的二进制文件hello和hello-arm。 [root@localhost xscale270]# file hello [root@localhost xscale270]# file hello-arm

编译器arm-linux-gcc 生成的可执行文件hello-arm文件是不能在宿主PC机上运行的,只能在XSBase 270目标机上运行。

4.如何实现宿主PC机与XSBase 270目标板的通信。

答:要使用网络进行通讯和文件传输,必须使宿主机和目标机是相同的网段。例如设置宿主机的IP地址:192.168.0.100;目标机的IP地址:192.168.0.50。

在嵌入式系统开发中,可采用网络文件系统 NFS 可以将 PC 机上的一部分文件系统作为目标机的资源,这样可以弥补目标机存储空间的不足。文件传输协议ftp(File Transimit Protocol)利用以太网实现文件的传输。需要上传的文件应保存到宿主机的/var/ftp/pub 目录下。 5.简述Makefile的基本结构。

答:Makefile文件由一组依赖关系和规则构成。每个依赖关系有一个目标(即将要创建的文件)和一组该目标所依赖的源文件组成。

Makefile 的基本结构:

target… … :dependency_files… … command… …

结构中各部分的含义如下:

1. target(目标):一个目标文件,可以是 Object 文件,也可以是执行文件,还可以是一个标签(Label)。 2. dependency_files(依赖文件):要生成目标文件(target)所依赖哪些文件。 3. command(命令):创建项目时需要运行的shell命令 6.使用Makefile编译程序的优点是什么?

答:在 Linux环境下,对于只含有几个源代码文件的小程序的编译,可以手工输入命令对源代码文件逐个进行编译。但是在大型的项目开发中,一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,这时人们通常利用 GNU make工具来自动完成应用程序的维护和编译工作。GNU make 工具是通过解释Makefile 文件来完成整个工程的完全自动编译,极大的提高了软件开发的效率。Makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译。Makefile就像一个Shell脚本一样,也可以执行操作系统的命令。

7.在Makefile中变量如何定义,可在Makefile中的哪些部分使用?自动变量$@和$<分别代表什么含义? 答:Makefile中变量可以使用“=”定义和使用指示符“define”定义。Makefile 中的变量可以使用在“目标”,“依赖目标”,“命令”或Makefile 的其它部分中。$@:目标文件的完整名称;$<:第一个依赖文件的名称。

8. 编写一个文件的程序,使用Makefile文件进行编译。

答:(1)利用文本编辑器创建hello.c 文件。 //hello.c

#include int main() {

printf(\elcome Emdoor!\\n\return 1; }

(2)编写Makefile文件。 # makefile test for hello program CC=gcc CFLAGS= all: hello