嵌入式系统设计
实验报告
教室:E504
班级:030914
学号:03091360
姓名:刘俊波
实验一:LED 等控制实验
一. 实验目的:显示一个动态模拟时钟(显示分钟和秒)。
通过本次试验,熟悉实验环境,以及编程,调试,下载流程;具体如下:
1.了解 PXA270 处理器结构 ;
2. 了解 ARM 指令集;
3. 了解嵌入式系统的引导过程;
4. 了解八段数码管的知识 ;
5. 了解系统的硬件寻址方式;
6. 掌握 ADS 编程和调试方法;
7. 掌握 JTAG 调试技巧;
二. 实验内容:
1.分析 PXA270 基本结构;
2.分析 Eeliod 实验平台实现的存储系统架构;
3.分析 PXA270 的引导过程;
4.分析 Eeliod 实验平台 LED 发光管和 7 段数码管的设计原理图;
5.参考系统引导示例程序完成数码管的控制代码;
6.编译程序,下载执行,让数码管显示一组特定的数据。
三. 实验准备知识及原理:
1.认识 Eeliod 实验平台,了解各模块及相应的功能;
2.熟悉相关软件环境:
ADS(ARM Developer Suite):ARM 公司推出的 ARM 集成开发工具。
Code Warrior:集成开发环境(IDE),为管理和开发项目提供了多样化的
图形用户界面。
AXD(ARM eXtended Debugger): ARM 扩展调试器,可以对包含有调试信息
的,正在运行的可执行代码进行比如变量的查看,断点的控制等调试操作。
Debug target:目标处理器可以是硬件,也可仿真
ARM 仿真器代理软件 :
H-JTAG:仿真器代理服务器
H-Flash:基于 JTAG 的烧写程序
四. 实验原理:
根据阅读相关器件的原理图(数码管,译码器等)和寄存器工作原理,编程控制读写
寄存器里的相关数据,改变跟数码管相连的锁存器的值使数码管持续显示写入数码管锁存
器的值。
五. 实验步骤:
1. 编写实验程序。
2. 编译链接生成映像文件,用 ADS 软件将该映像文件下载到 FALSH 或者 SDRAM
运行和调试。
3. 运行和调试 观察运行结果。
六. 实验源代码:
#include
#define LED_CSL
and LED2
#define LED_CSR
and LED4
vooid Delay(unsigned int x)
{
//延时函数
(*((volatile unsigned short int *)(0x10300000)))
(*((volatile unsigned short int *)(0x10400000)))
//LED1
//LED3
unsigned int i, j, k;
for (i =0; i <=x; i++)
for (j = 0; j <0xff; j++)
for (k = 0; k <0xff; k++);
}
int main(void)
{
//定义数码管显示相关数据
a[10]={0x0040,0x0079,0x0024,0x0030,0x0019,0x0012,0x0002,0x0078,0x0000,0x00
10};
short mini,sec;
short sec1,sec2,mini1,mini2; //显示分秒个位和十位
short sec3,mini3;
//定义秒,分计时
//将要显示的内容
mini=sec=0;
//初始化
LED_CSL=0X4040;
LED_CSR=0X4040;
//初始化数码管显示 0000
while(1)
{
sec++;
Delay(100);
if(sec==60)
{
mini++;
sec=0;
}
sec1=a[sec/10];
sec2=a[sec%10];
sec2=sec2<<8;
sec3=sec1|sec2;
//秒的十位左移八位
mini1= a[mini/10];
mini2= a[mini%10];
mini2= mini2<<8;
mini3= mini1| mini2;
//分的十位左移 8 位
LED_CSL=mini3;
LED_CSR=sec3;
}
return 0;
}
七. 心得体会:
通过这次实验让我对 ADS 有了初步了解,学会了配置编译环境。同时也学会了通
过编程定义寄存器地址,让指针变量与寄存器地址相关联以便向寄存器写入数据。但是对
于编译软件的使用还是不太熟练,调试过程遇到 很多麻烦,不过最后在同学的帮助下都得
到圆满解决。总之,这次实验让我对嵌入式开发有了初步了解,对开发步骤有了深刻映像。
实验二:键盘控制实验
一. 实验目的:显示一个动态模拟时钟(显示分钟和秒)。
1.了解直入式键盘与矩阵键盘的工作原理;
2.学习如何配置键盘控制器的寄存器;
3.掌握键盘扫描程序的实现过程;
二. 实验内容:
1.熟悉 PXA270 提供的键盘接口;
2.分析 Eeliod 实验平台的键盘原理图;
3.参考直连键盘示例程序实现矩阵键盘扫描,利用数码管显示区分不同按键;
4.编译程序,下载执行,验证程序工作是否正常。
三. 实验准备知识及原理:
通过阅读 PXA270 的接口原理图和键盘的原理图,分析键盘引脚的工作原理,查看键
盘引脚与 CPU 相连的原理图,利用行扫描键盘法的原理。通过控制 GPIO 接口功能的寄存
器组来将 GPIO94、GPIO95、GPIO98、GPIO99 四个 GPIO 上,设置成 KP-DKIN 功能。
键盘输入用到的接口:GPIO94、GPIO95、GPIO98 、GPIO99、GPIO100、GPIO101、
GPIO102
键盘输出用到的接口:GPIO103、GPIO104、GPIO105 、GPIO108
KPC 键盘接口控制寄存器是一个可读写的寄存器,用于设置直入/矩阵键盘的使能、中断、
自动扫描等控制。
KPDK 直入式键盘寄存器是一个只读寄存器,它显示了直入式键盘的所按键盘位置。如图
3.6 所示,表示各个直入式键盘的状态。
相关原理图如下:
四. 实验原理:
利用行扫描原理,先将行寄存器中表示第一行状态的位置 1,然后判断列寄存器的值,
判断是第一行哪个键按下,输出相应的置,接着按第二行依次进行下去,四行扫描是一个
循环。
五. 实验步骤:
1. 分析实验要求,得出编程思路:
矩阵键盘
一共有 3 行 :
第 0 行:KPMK_VALUE= 0x01;
第 1 行:KPMK_VALUE= 0x02;
第 3 行:KPMK_VALUE= 0x03;
第 4 行:KPMK_VALUE= 0x04;
共有 4 列:
第 0 列:KPC_VALUE |= 0x00002000;
第 1 列:KPC_VALUE |= 0x00004000;
第 2 列:KPC_VALUE |= 0x00008000;
第 5 列:KPC_VALUE |= 0x00040000;
要实现键盘控制八段数码管,可以用 switch 语句,当扫描到键盘某个按键按下时,赋给
LED_CS2 和 LED_CS3 不同的值,来标识哪个按键被按下;
实验中我实现的 16 个按键对应的数码管的值如下:
1
5
9
13
2
6
10
14
3
7
11
15
4
8
12
16
2. 实验中还用到了延时函数:
void Delay(unsigned int x)
{
unsigned int n, j, k;
for (n =0; n <=x; n++)
for (j = 0; j <0xff; j++)
for (k = 0; k <0xff; k++);