嵌入式实验报告.docx
- 文档编号:25156808
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:44
- 大小:2.60MB
嵌入式实验报告.docx
《嵌入式实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式实验报告.docx(44页珍藏版)》请在冰豆网上搜索。
嵌入式实验报告
实验一ARM开发环境
1.实验目的
1.了解嵌入式系统的开发过程,熟悉嵌入式系统的开发特点。
2.了解嵌入式系统开发环境的功能与组成,了解开发嵌入式系统使用的几种调试工具,熟悉JTAG调试技术的原理、工具和连接方法。
3.了解ADS、SDT等集成开发工具的功能与特点,熟悉并掌握它们的使用方法。
2.实验内容
本次实验配置ADS集成开发环境,新建一个简单的工程文件,并编译这个工程文件。
学习ARM仿真器的使用和开发环境的设置。
用超级终端下载已经编译好的文件到S3C44B0开发板上运行并观察结果。
三.实验设备及工具
硬件:
ARM嵌入式开发平台、用于ARM7TDMI的JTAG仿真器、PC机、串口线。
软件:
PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集 成开发环境、仿真器驱动程序、超级终端通讯程序 。
4.实验步骤
1.新建一个工程
首先运行ADS的项目管理器CodeWarrior。
双击CodeWarrior的应用程序图标并运行,打开如图1.1所示的项目管理界面。
在图1.1中,执行File菜单中的“New...”命令,打开如图1.2所示的新建对象对话框。
在图1.2中,选择ARMExecutableImage项,表示新建一个可执行的ELF格式的映像项目文件。
在右边的Projectname栏目中填入新建项目的名称,如本次实验填入LED。
在Location栏目的右边,单击“Set”按钮,所打开的图1.3中选择项目文件存放的文件夹,如实验选择D盘的LEDtest文件夹。
图1.1项目管理界面
图1.2新建对象对话框
图1.3选择项目文件存放的文件夹
新建一个项目后,在项目所在的文件夹下产生了一个名为LED的目录,其下目录的led.mcp就是新产生的项目文件名,该项目文件管理着整个嵌入式工程中的所有文件。
新的项目建立完成后,将出现如图1.4所示的项目管理主窗口。
在该窗口中的空白处单击鼠标右键,并在弹出的菜单中执行CreateGroup命令,然后再弹出的对话框中,输入一个文件夹的名字,如Initial,这样就在项目中建立了一个文件夹,可以把与本项目相关的初始化文件放在此文件夹中。
然后再图1.5所示的窗口中的Initial文件夹上单击鼠标右键,在弹出的菜单中执行AddFiles...命令,将与本项目相关的初始化文件添加到Initial文件夹中。
再在空白处单击鼠标右键,在弹出的菜单中执行AddFiles...命令,将本项目的主函数代码文件main.c添加进项目。
添加文件完成后的窗口如图1.6所示。
图1.6中的项目Led.mcp中,在Initial文件夹下是一些44B0的初始化文件,其中44binit.s是一个ARM7类型的汇编语言源代码文件,在这里程序对外围进行初始化,定义了44B0芯片的一部分寄存器地址、44B0的工作模式、内存配置、初始化各种异常向量(包括了IRQ和FIQ中断向量)和堆栈以及一些C语言的变量,并提供系统上电、复位及异常处理的入口点。
44B0芯片可外接8个Bank的存储器(ROM和RAM),Memcfg.s源代码文件对外部存储空间进行配置。
OPTION.S汇编语言源代码文件对定义了一些宏,包括RAM的起始地址,中断入口表地址、RAM类型、系统主频、PLL控制字等。
44BLIB_A.S汇编语言源代码文件中定义了一个ChangeMemCon函数(虽然没有使用)。
44blib.c是一个C语言源代码文件,里面定义了其他各个文件所要调用的函数,如延时、I/O初始化、串口初始化、输入输出、PLL设置、波特率设置等的函数,该文件由用户自行编写。
Bspinit.c是用户自己编写的一个C语言文件,里面用Bsp_Init函数封装了项目所有初始化需要调用的函数,这样在Main函数中只需要调用Bsp_Init函数即进行了所有的初始化。
一些头文件,如44B.H文件中定义了44B0芯片的寄存器地址宏定义,OPTION.h文件中定义了C程序使用的一些反映系统工作方式的基本宏定义,Def.h文件中定义了一些数据类型的缩写。
在进行44B0的项目的时候,最重要的是包含44binit.S与44blib_a.S这两个文件,如果需要串口输出等辅助功能,就包含进44blib.c文件,然后再加入自己的文件。
44binit.S、44blib_a.S这些启动文件都由三星公司提供,建议用户不要进行修改。
另外,在Initial文件夹下存在的一些头文件如44b.h、44blib.h、def.h和option.h等,对基于S3C44B0微处理器的嵌入式系统而言,这些头文件都基本是一样的,用户可以直接从别的项目拷贝过来使用。
图1.4项目管理主窗口
图1.5将相关文件添加进项目
图1.6添加文件完成后的窗口
双击main.c文件,可打开查看源代码,如图1.7所示。
图1.7查看main.c源代码
在图1.7中,首先包含了3个头文件,这3个头文件在前面的章节已经进行了介绍。
在Main()函数中,首先调用的是Bsp_Init()函数,Bsp_Init()函数封装了项目所有初始化需要调用的函数,包括S3C44B0芯片的各个端口的初始化和PLL锁相环的初始化。
我们知道,S3C44B0芯片要正常工作,首先需要对其时钟进行初始化。
S3C44B0X有71个多功能输入\输出管脚,构成了7个I/O接口,包括两个9位的输入/输出接口(E和F)、两个8位的输入/输出接口(D和G)、一个16位的输入/输出接口(C)、一个10位的输出接口(A)和一个11位的输出接口(B)。
由于每个I/O接口管脚是多路复用的,比如对E口而言,它的第1位PE1有3个功能,一个功能是输入I/O,一个功能是输出I/O,一个功能是串行口0的TxD功能引脚。
所以在使用S3C44B0芯片的端口前,首先需要确定每个管脚的功能。
Bsp_Init()函数就起这个作用。
在我们的项目程序中,需要用E端口去输出高、低电平控制LED灯的闪烁,因此需要将E端口初始化为I/O输出功能。
2.工程设置
在图1.7中,单击Edit菜单项,在下拉菜单中执行“DebugRelSettings...”命令,此时会弹出如图1.8所示的“DebugRelSettings”对话框。
在图1.8的“DebugRelSettings”对话框左侧用鼠标单击“TargetSettings”项后,可在右侧的“TargetSettings”栏中的“Linker”子项中选择“ARMlinker”,然后再“Post-linker”子项中选择“ARMfromELF”,这就使得工程在链接后可以直接调用“FromELF”产生的以.bin结尾的可执行的二进制代码文件。
图1.8设置“TargetSettings”项
在图1.8的“DebugRelSettings”对话框左侧用鼠标单击“ARMLinker”项目,然后在右侧的“ARMLinker”栏中选择“Output”页,在“Linktype”项中选择“Simple”,在“Simpleimage”项中的“RoseBase”子项中填入“0xc008000”,在“RWBase”子项中填入“0xc5f800”,其他项保持默认值。
如图1.9所示。
图1.9设置“ARMLinker”项的“Output”页
在图1.9中的“DebugRelSettings”对话框左侧用鼠标单击“ARMLinker”项目,然后在右侧的“ARMLinker”栏中选择“Layout”页,在“Placeatthebeginningoftheimage”栏中的“Object/symbol”项中填入“44binit.o”.在“Section”项中填入“Init”,表示当程序开始执行时,从“44binit”文件的“Init”段开始执行。
如图1.10所示。
图1.10设置“ARMLinker”项的“Layout”页
当系统上电开始运行或者复位时,程序将从44binit.s这个文件的Init段开始运行。
如图1.11所示。
图1.1144binit.s汇编程序语言文件
由于在图1.8的“TargetSetttings”项中的“Post-linker”子项中选择了“ARMfromELF”,表示工程在链接后可以直接调用“fromELF”产生以.bin结尾的可执行的二进制代码文件,因此需要对图1.10中的“ARMfromELF”项进行设置。
在图1.10“DebugRelSettings”对话框左侧用鼠标单击“ARMfromELF”项目,然后在右侧的“Outputformat”栏中选择“Plainbinary”,在“Outputfilename”栏中填入产生的可执行二进制代码文件的存放目录,及文件名。
如图1.12所示。
图1.12设置“ARMfromELF”项
至此,所有与本项目相关的设置就完成了。
3.工程编译
回到如图1.7所示的窗口,在该窗口中执行“Project”菜单下的“Make”子菜单命令。
Make的行为包括以下过程:
编译和汇编源程序文件,产生与源文件相对应的以.o为扩展名的目标对象文件;
连接对象文件和库,产生可执行映像文件Led.asf,该文件可用于纯软件的调试或用JTAG接口对目标板进行硬件调试;
产生可以直接写到Flash的二进制可执行文件Led.bin。
图1.13执行Project菜单下的Make子菜单命令
Make完成之后,将弹出错误和警告“Errors&Warnings”对话框来报告出错和警告情况。
如果存在错误,在图1.14中,用鼠标单击错误信息提示,这时在“Errors&Warnings”对话框下面将直接定位到出错的位置;如果用鼠标双击错误信息提示,则窗口将直接切换到源代码文件中出错的地方,同时鼠标在此闪烁,用户可进行错误查找和修改,如图1.15所示。
图1.14错误和警告的具体信息
图1.15错误查找和修改
回到图1.7,查看Main()函数源代码,在Bsp_Init()函数后面加上一个分号,重新编译、链接一次,可以看到,在D:
\LEDtest文件夹下产生了一个文件名为Led.bin的二进制文件,该文件可以直接写如Flash存储器中运行。
同时在D:
\LEDtest\LED\LED_Data\DebugRel文件夹下产生了一个文件名为LED.axf的文件,该文件可以用于目标系统的硬件和软件调试。
4.工程调试
通过串口打印信息调试
在进行带有目标板的项目调试时,建议用户购买一套开发套件,在购买的嵌入式开发套件中,一般都带有与开发板对应的BootLoader,BootLoader中提供了启动、引导、下载、烧写、串口通信、网络通信、设置日期、时间、设置工作频率等多种功能。
BootLoader启动后随即进入shell模式。
用户要启动任何功能都必须输入特定的命令行。
该shell模式类似DOS操作环境,用户可以通过各种命令与目标板进行交互。
ARM-44B0开发板的BootLoader提供的用户命令如下:
用户命令功能说明
help显示BootLoader命令列表
date显示、设置开发板时钟的当前日期
chguart选择串口(UART0/UART1)
setbaud设置串口通讯波特率
load通过Kermit协议从串口下载程序
run运行下载到目标板上程序
defset默认设置系统参数
首先利用串口连接线将目标板的串口与PC机上的COM1口连接起来,使用Windows操作系统自带的串口通信终端与目标板进行交互。
打开PC机上的超级终端的步骤如下:
在计算机上用鼠标点击[开始]?
[程序]?
[附件][通讯]?
[超级终端]
图1.16打开PC上的超级终端
图1.17拨号连接对话框
图1.18“连接描述”对话框
图1.19“连接到”对话框
在图1.19中单击“确定”按钮,此时会弹出如1.20所示的“COM1属性”设置对话框,在每秒位数栏选择“115200”,在数据位栏选择“8”,在奇偶校验栏选择“无”,在停止位选择“1”,在数据流控制栏选择“无”,或者单击“还原为默认值”按钮。
如图1.20所示。
图1.20“COM1”设置对话框
在图1.20中单击“确定”按钮,此时会弹出如图1.21所示的超级终端窗口,现在按目标板上的复位按钮,如果串口连接且设置正确,此时会出现如图1.21中的提示信息,然后按照目标板Bootloader所提供的命令进行交互。
图1.21超级终端窗口
Main()函数首先对芯片和目标板进行初始化,然后加入串口提示信息打印函数,例如以下代码:
voidMain(void)
{
inti;
rSYSCFG=CACHECFG;
Port_Init();
Isr_Init();
Uart_Init(0,115200);
Uart_Select(0);
Delay(0);//calibrateDelay()
Uart_Printf("\ncomehereonce");
……;其他应用程序代码
Uart_Printf("\ncomeheresecondtime");
……;其他应用程序代码
Uart_Printf("\ncomeherethirdtime");
……;其他应用程序代码
Uart_Printf("\ncomeherefourthtime");
……;其他应用程序代码
while
(1);
}
在各个串口输出信息语句Uart_Printf之间,插入用户代码,通过串口输出的信息可以看出应用程序的运行情况和位置。
将项目工程按照以上进行编译后,按照如下的步骤将产生的以.bin结尾的目标文件通过串口传输到目标板:
首先在图超级终端窗口中的,单击[传送]菜单项目,执行[发送文件(S)…]命令,如图1.22所示。
图1.22执行“发送文件(S)...”命令
图1.23“发送文件”对话框
此时会弹出如图1.23所示的“发送文件”对话框,在文件名栏中选择需要传送的目标代码文件,此处是位于C盘的hello.bin文件。
在协议栏中选择Kermit,然后单击“发送”按钮。
图1.24超级终端中打印的调试信息
5.实验小结和体会
通过这次实验,我对ARM的集成开发环境有了更深入的了解。
熟悉了嵌入式系统的开发过程和开发特点。
掌握了ADS1.2的使用方法,学会了使用超级终端将已编译好的文件下载到实验板上,并且了解了开发嵌入式系统使用的几种调试工具,并为以后的嵌入式程序开发打下基础。
实验二串口通信实验
一、实验目的
1. 掌握ARM 的串行口工作原理。
2. 学习编程实现ARM 的UART 通讯 。
3. 掌握CPU利用串口通讯的方法。
二.实验内容
学习串行通讯原理,了解串行通讯控制器,阅读ARM 芯片文档,掌握ARM 的 UART相关寄存器的功能,熟悉ARM 系统硬件的UART 相关接口。
编程实现ARM 和计算机实现串行通讯。
ARM 监视串行口,将接收到的字符再发送给串口(计算机与开发板是通超级终端通讯的),即按PC 键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。
3.实验设备及工具
硬件:
ARM 嵌入式开发板、用于ARM7TDMI 的JTAG 仿真器、PC、串口线。
软件:
PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集 成开发环境、仿真器驱动程序、超级终端通讯程序。
4.实验原理及说明
4.1异步串行I/O
异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。
数据的各不同位可以分时使用同一传输通道, 因此串行I/O 可以减少信号连线,最少用一对线即可进行。
效率较低。
首先要分割成位,再按位组成字符。
为了恢复发送的信息,双方必须协调工作。
图2.1串行通信字符格式
图2.1给出异步串行通信中一个字符的传送格式。
开始前,线路处于空闲状态, 送出连续“1”。
传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。
每个字符的数据位长可以约定为5 位、6 位、7 位或8 位,一般采用ASCII 编码。
4.2串行接口的物理层标准
图2.2EIARS-232C标准
图2.2RS-232C接口通信的连接
4.3S3C44B0的UART单元
两个独立的异步串行I/O口,每个通讯口均可工作在中断模式或DMA模式,也即UART能产生内部中断请求或DMA请求在CPU和串行I/O口之间传送数据。
S3C4510B的UART单元特性包括:
1) 波特率可编程
2) 支持红外发送与接收
3) 1~2个停止位
4) 5、6、7或8个数据位 5) 奇偶校验
和实验有关的寄存器:
1.UART线性控制寄存器ULCONn
2.UART控制寄存器UCONn
3发送寄存器UTXH和接收寄存器URXH 4。
4.波特率分频寄存器UBRDIV
图2.3ULCON寄存器
图2.4ULCON功能定义
图2.5UCON功能定义
使用UART0通信需要两个引脚,分别为:
连接方式如下:
S3C44B0的I/O电压为3.3V(可承受5V),连接时须注意电平的匹配。
与PC机相连时,由于PC机串口是RS232电平,所以连接时需要使用RS232转换器。
五.实验步骤
1.新建工程文件。
2.定义与UART 有关的各个寄存器地址和一些特殊的位命令。
3.编写串口驱动函数:
4.在主函数中实现将从串口0 接收到的数据发送到串口0(Main.c):
文件如下:
Main函数如下:
#include"option.h"
#include"def.h"
#include"44b.h"
#include"44blib.h"
voidMain(void)
{
U8which_key;
rSYSCFG=CACHECFG;//Using8KBCache//
Port_Init();
Led_Display(0x0);
rPCONG=0x00ff;//EINT7~0
rPUPG=0x0;//pullupenable
Beep(0);
while
(1){
while((rPDATG&0xf0)==0xf0);
which_key=rPDATG&0xf0;
switch(which_key)
{
case0xe0:
Led_Display
(1);
Beep
(1);
break;
case0xd0:
Led_Display
(2);
Beep(0);
break;
case0xb0:
Led_Display(3);
break;
case0x70:
Led_Display(0);
break;
default:
break;
}
}
}
5.编译生成二进制目标文件
6.通过超级终端下载到S3C44B0实验板上,如图2.6所示。
图2.6通过超级终端下载程序
7.按程序的要求在PC 键盘上通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。
图2.7实验结果在超级终端上的显示
6.实验小结和体会
此次实验让我熟悉了如何控制串行口通讯,掌握ARM的串行口工作原理,学习并编程实现S3C4410的UART串口通讯,学习并掌握S3C4410寄存器的配置方法。
实现查询方式串口的收发功能,实现实验装置通PC平台的串口通信,接受PC平台发送出的字符,并将该字符重新返回给PC平台。
实验中进一步熟悉ADS的操作环境,提高了自己阅读ARM芯片文档的能力,获得了不少编写嵌入式程序的经验。
实验三综合实验—按键控制LED
一.实验目的
1.通过实验了解ARM 的中断方式和原理。
2.通过实验掌握ARM 的编程方法。
2.实验内容
掌握ARM 中断工作原理,了解S3C44B0X 的中断寄存器,掌握常用的中断的编程方法。
编写中断处理程序实现:
中断源
相应操作
ExINT4
点亮LED1
ExINT5
点亮LED2
ExINT6
点亮LED3
ExINT7
熄灭LED1,LED2,LED3
电路上面,4个1×4键盘分别接在外部中断4,5,6,7上。
三.实验设备及工具
硬件:
嵌入式实验平台一套、仿真器一个、PC 机一台。
软件:
Windows 98/2000/NT/XP 操作系统、仿真器驱动程序、ADS 开发软件一套。
4.实验原理及说明
S3C44B0X 的中断控制器可以接受来自30 个中断源的中断请求。
这些中断源来自DMA,UART,SIO 等芯片内部外围或外部引脚。
在这些中断源中,有4 个外部中断(EINT4/5/6/7)是逻辑“或“的关系。
中断控制器的任务是在片内外围和外部中断源组成的多重中断发生时,选择其中一个中断,通过FIQ 或IRQ 向ARM7TMDI 内核发出中断请求。
实际最初的ARM7TMDI 内核只有FIQ(快速中断请求)和IRQ(通用中断请求)2 种中断,其他中断都是各个芯片厂家在设计芯片的时候定义的。
对这些中断根据其优先级高低来进行处理。
例如,如果定义所有的中断为IRQ 中断(通过中断模式设置),并且同时有10个中断发出请求,那么可以通过读中断优先级寄存器来确定哪一个中断将被优先执行。
一般的中断模式在进入所需的服务程序之前,需要很长的中断反应时间。
为了解决这个问题,S3C440X 提供了一种新的中断模式。
叫做中断向量模式。
它具有CISC 结构为控制器的特征,能够降低中断反应时间。
也就是说,S3C44B0X 的中断控制器硬件本身直接提供了对向量中断服务的支持。
当众多中断源请求中断时,硬件优先级逻辑会判断哪一个中断将被执行;同时,硬件逻辑自动执行0x18(或0x1c)地址到各个中断源向量地址的跳转指令;然后再由中断源向量进入相应的中断处理程序。
与原来软件实现的方法相比,这种方法可以显著的减少中断反应时间。
4.1中断控制器的操作
1) 程序状态寄存器的F 位到1 位
如果CPSR 程序状态寄存器的F 位被置位1,那么CPU将不接受来自中断控制器的FIQ;如果CPSR 程序状态控制器的I 位被置为1,那么CPUJ 将不接受来自中断控制器的IRQ。
因此,为了使能FIQ 和IRQ,必须先将CPSR 程序状态寄存器的F 位和I 位清0,并且中断屏蔽寄存器的INTMSK 中相应的位也要清0。
2)中断模式(INTMOD)
ARM7TMDI 提供了2 种中断模式,FIQ 和IRQ 模式。
所有中断源在中断请求时都要确定使用了哪一种中断模式。
3)中断挂起寄存器(INTPND)
用于指示对应的中断是否被激活。
如果挂起位被置位1,那么无论标志I 和标志F 是否被清0,都会执行相应的中断服务程序。
中断挂起寄存器
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 实验 报告