基于嵌入式LED显示课程设计报告书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
前言 ------------------------------------------------------------------- - 1 -
1.1嵌入式系统简介................................................... - 2 -
1.2认识博创经典实验箱............................................... - 2 -
1.3建立开发环境..................................................... - 3 -
1.4给下位机烧写软件系统............................................. - 3 -
二.基本原理-------------------------------------------------------------- - 4 -
2.1 LED显示控制原理................................................. - 4 -
2.1.1 7段(或8段)LED .......................................... - 5 -
2.1.2点阵式LED .................................................. - 6 -
2.2 74HC273在开发板上的连接......................................... - 6 -
2.2.1 7段(或8段)LED的连接.................................... - 6 -
2.2.2点阵式LED的连接........................................... - 7 -
2.3 LED编程......................................................... - 8 -
2.3.1 7段LED的段码表........................................... - 8 -
2.3.2点阵式LED的显示缓冲区..................................... - 9 - 三.系统分析与设计------------------------------------------------------- - 9 -
3.1设计需求......................................................... - 9 -
3.2 LED点阵显示与C语言编程......................................... - 9 -
3.2.1 LED点阵显示............................................... - 9 -
3.2.2 C语言编程 (10)
3.3 Makefile文件的编写 (12)
3.4实验环境的连接 (14)
四.运行结果---------------------------------------------------------------- 16 总结 ---------------------------------------------------------------------- 18 致谢 ----------------------------------------------------------------------- 19 参考文献-------------------------------------------------------------------- 20
摘要
由于电子技术的迅猛发展,在我们生活的到处都会发现,LED灯的广泛存在。
LED以其组构方式灵活,显示灵活,寿命长,功耗低,技术成熟,成本低廉等特点,广泛在车站,证券所,运动场所,交通干道各种室外显示场所的信息发布,公益宣传,环境参数实时显示,重大活动倒计时等场所得到广泛应用。
本文通过上位机编程控制下位机,在LED灯驱动程序设计的过程中,从零开始做起,到最后完成LED驱动程序设计并成功驱动LED灯,编写本文档有助于巩固实训所学。
设计该LED灯驱动程序主要是为了完成在Linux下设计LED灯驱动程序并成功驱动LED显示相应的图案。
关键词:嵌入式 makefile 点阵LED
前言
嵌入式系统一般由嵌入式微处理器,外围硬件设备,嵌入式操作系统,用户应用程序4个部分组成。
用于实现对其他设备的控制,监视或管理等功能。
嵌入式系统已经广泛应用于科学研究,工业控制,军事技术,交通通信,医疗卫生,消费娱乐等领域,人们常用的手机,PDA,汽车,智能家电,GPS等均是嵌入式系统的典型代表。
本课程设计要求利用实验室提供的ARM2410实验箱进行相应的设计,主要包括理解LED原理,掌握在LINUX下常用编辑器的使用,掌握MAKEFILE的编写和使用,掌握LINUX下的程序编译与交叉编译过程,有一定的数字电路的知识,能够设计出新颖的显示图样,最后通过上下位机实现结果的显示
一.实验平台
1.1嵌入式系统简介
嵌入式系统是基于单片机的一种升级版,它是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
我们可从几方面来理解嵌入式系统:
1、嵌入式系统是面向用户、面向产品、面向应用的,嵌入式系统是与应用紧密结合的,它具有很强的专用性,必须结合实际系统需求进行合理的裁减利用。
嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。
2、嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物。
这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。
3、嵌入式系统必须根据应用需求对软硬件进行裁剪,满足应用系统的功能、可靠性、成本、体积等要求。
为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。
4、嵌入式系统本身不具备自主开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发。
实际上,凡是与产品结合在一起的具有嵌入式特点的控制系统都可以叫嵌入式系统。
现在人们讲嵌入式系统时,某种程度上指近些年比较热的具有操作系统的嵌入式系统。
1.2认识博创经典实验箱
博创经典UP-TECH-S2410/P270-DVP实验箱是由北京博创兴业科技推出的一款嵌入式实验箱。
它的核心模块为S2410或P270,当它安装S2410核心模块时为S2410实验箱,安装P270核心模块时为P270实验箱。
1.3建立开发环境
1.在下位机断电的情况下,利用实验箱中自带的串口线将上位机的com1口与下位机的RS232-0口进行连接。
2.利用实验箱中自带的直连网线将上位机与下位机进行连接。
3.根据下位机中安装的核心模块,选择相应的嵌入式系统开发软件光盘。
4.将选择好的嵌入式系统开发软件光盘放入上位机的光驱中,在终端命令窗口中挂载该光盘。
mount –o iocharset=gb2312 /dev/cdrom /mnt
5.进入光盘的Linux工具软件目录。
执行该目录下的shell文件“install.sh”,Linux工具软件会自动安装完成。
对于S2410,会将程序安装在目录“arm2410cl”下,交叉编译器安装在目录“/opt/host”下。
用户可以通过使用命令“armv41-unknown-linux-gcc”运行交叉编译器。
6.启动minicom超级终端程序,选择“Serial port setup”进入串口配置界面进行串口配置。
然后可以打开下位机的电源,通过minicom对下位机进行操作。
7.使用命令ifconfig分别查看上位机和下位机的IP地址,判断上位机与下位机是否处于同一个网段。
若它们不在同一网段,使用命令ifconfig或者KDE 桌面的工具,将它们配置在同一网段。
使用命令ping查看上位机与下位机的网络连接是否正常,如不正常,请检查网线的连接、IP地址的配置、IP地址是否冲突等。
8.将上位机配置为NFS服务器,设置共享目录为“/arm2410cl”。
9.在上位机中启动NFS服务,下位机使用命令mount挂载上位机的共享目录。
mount –t nfs 192.168.0.252:arm2410cl /mnt/nfs
1.4给下位机烧写软件系统
下位机的软件系统由Bootloader、系统核、根文件系统和应用程序四部分
组成。
Bootloader相当于PC机上的BIOS,在下位机加电时自动运行,执行硬件初始化和调用系统核的功能。
Bootloader分为U-boot、Vivi、Blob、ARMBoot、RedBoot等多种,本实验使用实验箱自带光盘中的vivi。
系统核就是运行在下位机上的操作系统核,本实验使用实验箱自带光盘中的zImage,是ARM-Linux的核,版本号为2.6。
根文件系统是Linux系统必不可少的一部分,用来管理下位机中的文件。
本实验使用实验箱自带光盘中的root.cramfs。
Cramfs是专门针对Flash设计的只读压缩的文件系统,其容量上限为256M,采用zlib压缩,文件系统类型可以是EXT2或EXT3,经常作为下位机的根文件系统。
应用程序是需要烧写到下位机,在下位机中运行的程序,在上位机中以压缩文件包的形式保存,本实验使用实验箱自带光盘中的yaffs.tar.bz2。
应用程序所的文件系统为Yaffs(Yet Another Flash File System),Yaffs是一种专门为Flash设计的嵌入式文件系统,运行速度快、占用存小,提供写均衡、垃圾收集等底层功能。
给下位机烧写软件系统的步骤:
1.烧写Vivi到下位机;
2.在上位机的Windows XP中配置超级终端,连接下位机;
3.烧写系统核到下位机;
4.烧写根文件系统到下位机;
5.烧写应用程序到下位机。
二.基本原理
2.1LED显示控制原理
LED是发光二极管英文Light Emitting Diode的缩写格式,LED器件种类繁多,早期的LED产品是单个发光管,随着数字化设备的出现,LED数码管和字符管得到了广泛的应用,LED点阵等显示器件的出现,适应了信息化社会发展的需要,成为了大众传媒的重要工具。
LED 发光灯按类型可以分为单色发光灯、双色发光灯、三色发光灯、面发光灯、闪烁发光灯、电压型发光灯等;按发光强度可分为普通亮度发光灯、高亮度发光灯、超高亮度发光灯等。
2.1.1 7段(或8段)LED
LED 的7个字段分别称为a 、b 、c 、d 、e 、f 、g ,有时还有一个小数点段h ,图1(a)所示。
通过7个(或8个)发光段的不同组合,显示0~9和A ~F 共16个字母数字,从而实现十六进制的显示。
为使7段显示器显示数字或字符,就需点亮相应的段,每个段分别由数据线进行控制,通常数据线D0~D7顺序控制a ~h 段,如图11-34(b)所示,所需的控制信号称为段码。
由于数字与段码之间没有规律性,因此必须进行数字与段码之间的转换以便显示数字。
常用的转换方法是将要显示字形的段码列成一个表,称为段码表。
显示时,根据字符查段码表,取出其对应的段码送到数据线上来控制显示。
LED 有两种不同的形式:
一种是8个发光二极管的阳极都连在一起,称为共阳极,如图2(a )所示; 另一种是8个发光二极管的阴极都连在一起,称为共阴极,如图2(b )所示。
a
b c d e f g h
h g f e d c b a D 7D 6D 5D 4D 3D 2D 1D 0(a) 8段LED 显示器外形(b) 8段对应的数据线图1 8段LED 显示器外形及各段对应的数据线
a b c d e f g
h
(a)共阴极(b)共阳极a b c d e f g h 图2 8段LED 显示器原理图
2.1.2点阵式LED
点阵式LED 的显示单元一般由8行8列LED 组成,其外形及部连接如图3所示,可以再由这8行8列的LED 拼成更大的LED 阵列。
点阵式LED 显示器能显示各种字符、汉字及图形、图像,并具有色彩。
点阵式LED 中,每个LED 表示一个像素,通过每个LED 的亮与灭来构造出所需的图形,各种字符及汉字也是通过图形方式来显示的。
对于单色点阵式LED ,每个像素需要1位二进制数表示,1表示亮,0表示灭。
对于彩色点阵式LED ,则每个像素需要更多的二进制位表示,通常需要一个字节。
点阵式LED 显示器的显示控制采用扫描方式,在数据存储器中开辟若干个存储单元作为显示缓冲区,缓冲区中存有所需显示图形的控制信息。
显示时依次通过列信号驱动器输出一行所需所有列的信号,然后再驱动对应的行信号,控制该行显示。
只要扫描速度适当,显示的图形就不会出现闪烁。
2.2 74HC273在开发板上的连接
2.2.1 7段(或8段)LED 的连接
开发板上设置了2个数码管,由74HC273控制,如图4所示。
74HC273是同步串行转并行的锁存器,在此通过SPI 总线和CPU 连接,锁存数据后驱动数码管发光。
07(a) 点阵式LED 外形(b) 点阵式LED 内部连接图3 点阵式LED 的外形和内部连接
图4 开发板上7段LED的连接
2.2.2点阵式LED的连接
点阵式LED在开发板上的连接如图5所示。
点阵式LED 驱动器逻辑中设置了8 个字节的缓冲区,每个字节按位对应点阵式LED 模块上的一列8个点。
驱动器中的扫描电路会将缓冲区的容不断输出到LED模块,CPU 可以读写此缓冲区,从而可以更新现实容。
图5 开发板上点阵式LED的连接
点阵LED寄存器组共8个字节寄存器,地址A4A3A2A1=从0000 到0111,按地址递增顺序分别对应点阵LED模块从左到右的8个列。
每个字节寄存器对应一列,字节寄存器8 个位对应该列的8 个LED,从Bit0 到Bit7 分别对应从上到下的LED,如图6所示。
图6 点阵式LED寄存器组
2.3LED编程
本次实验中,利用 LED驱动程序“s3c2410-led.o”提供的open、ioctl、write、release等函数控制LED显示。
可在相同目录下找到其源程序“s3c2410-led.c”进行分析。
2.3.17段LED的段码表
由于开发板上两个数码管的连接是共阳极,分别显示“十位”和“个位”数字,中间是一个点号,总是让它置“1”。
所以当想要其中之一显示为“0”时,那么其对应的段码应为“11000000”,转化为十六进制即为0xc0。
同理可以给出“1”~“9”的段码,从而形成如下段码表:
unsigned char LEDCODE[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
注意:前10个表示字符“0”~“9”的段码,最后一个表示各段全灭,不显示。
用户程序使用ioctl函数用来控制2个数码管的显示:
ioctl(fd,0x12,LEDWORD);
由于两个8字数码管需要同时显示,故需要将“十位”的段码左移8位,拼接上“个位”的段码,形成一个16位的LEDWORD。
2.3.2点阵式LED的显示缓冲区
点阵式LED 驱动器逻辑中设置了8 个字节的缓冲区,每个字节按位对应点阵式LED 模块上的一列8个点。
如要显示字符或图形,需要先给出对应点阵数据存储在缓冲区才能显示。
图7所示的是字符“0”和心形图的点阵,参照图6分别给出各自8个字节中的数据为:
“0”: {0x00,0x00,0x7c,0x82,0x82,0x82,0x7c,0x00}
心形图: {0x00,0x0c,0x12,0x22,0x44,0x22,0x12,0x0c}
通过调用write函数控制点阵式LED显示对应字符或图形。
图7 字符“0”和心形图的点阵
三.系统分析与设计
3.1设计需求
本次综合实训任务主要是基于Linux的LED驱动程序设计及完成相关的操作。
大致分为两个阶段,第一阶段为环境搭建,第二部分是驱动程序设计。
需要完成的任务是,由驱动程序驱动开发板的LED灯,并且经测试,能够正确的点亮或熄灭开发板上的LED灯,即为完成本次实训任务。
3.2 LED点阵显示与C语言编程
3.2.1 LED点阵显示
点阵的接法有共阴极和共阳极两种(共阳极指的是对每一行LED来讲是共阳极的)。
显示的方法有两种:
1、逐列扫描方式:亮的列从左向右扫描完8列(相当于位码循环移位8次)即显示出一帧完整的图像。
uchar code
TAB[]={0x81,0xFD,0xFD,0xC1,0xBF,0 xBF,0xBD,0xC3};
uchar i,t;
delay(uchar t)
{
while (t--)
{;}
}
void main(void)
{
while(1)
{
P2=0x01;
for(i=0;i<8;i++)
{
P1=TAB[i];
delay(100);
P2=P2<<1|P2>>7;
}
}
}
2、逐行扫描方式:与逐列扫描调换,扫描完8行显示出一帧图像。
本设计中图形显示的C语言程序的分析
3.2.2 C语言编程
利用嵌入式实验平台和LED的工作原理,在本设计中的C语言编程如下:
1)调用系统库函数
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <linux/delay.h>
#define TUBE_IOCTROL 0x11
#define DOT_IOCTROL 0x12
2)子函数的设计
void jmdelay(int n)
{
int i,j,k;
for (i=0;i<n;i++)
for (j=0;j<100;j++)
for (k=0;k<100;k++);
}
3)主函数的设计
int main()
{
int fd;
int i;
unsigned int LEDWORD;
unsigned char LEDCODE[11]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
unsigned char man_data[9][8]={
{0x4c,0x92,0x92,0x7c,0x0c,0x12,0x12,0x0c},
{0,0,0,0,0,0,0x0b,0xd3},
{0,0,0,0,0x0b,0xd3,0x3c,0x48},
{0,0,0x0b,0xd3,0x3c,0x4b,0x20,0},
{0,0,0x03,0x13,0xfc,0x08,0,0},
{0,0,0,0x0b,0xd3,0x3c,0x48,0},
{0,0x0b,0xd3,0x3c,0x48,0x20,0,0},
{0,0x08,0x93,0x4b,0x3c,0x24,0x48,0x20},
{0x48,0x20,0,0,0,0,0,0} };
fd=open("/dev/led/0raw",O_RDWR);
if (fd < 0)
{
printf("####Led device open fail####\n");
return (-1);
}
LEDWORD=0xff00;
printf("will enter TUBE LED ,please waiting .............. \n");
LEDWORD=0xff00;
ioctl(fd,0x12,LEDWORD);
sleep(1);
for (i=10;i>=0;i--)
{
LEDWORD=(LEDCODE[i]<<8)|LEDCODE[i];
ioctl(fd,0x12,LEDWORD);
jmdelay(1500);
}
printf("will enter DIG LED ,please waiting .............. \n");
sleep(1);
for (i=0;i<9;i++)
{
write(fd,man_data[i],8);
jmdelay(1000);
}
close(fd);
return 0;
}
3.3 Makefile文件的编写
在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。
make所支持的函数也不算很多,不过已经足够我们的操作
了。
函数调用后,函数的返回值可以当做变量来使用。
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。
make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。
可见,makefile都成为了一种在工程方面的编译方法。
Makefile文件的一般格式
objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit $(objects)
Makefile文件编写的规则:
1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被。
2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并目标程序。
3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并目标程序。
利用Makefile文件的编写方法,编写本设计中的Makefile文件:
KERNELDIR = /arm2410cl/kernel/linux-2.4.18-2410cl/
INCLUDEDIR = $(KERNELDIR)/include
CROSS_COMPILE=armv4l-unknown-linux-
CC =$(CROSS_COMPILE)gcc
CFLAGS += -I..
CFLAGS += -Wall -O -D__KERNEL__ -DMODULE -I$(INCLUDEDIR)
TARGET = s3c2410-led.o led01
all: $(TARGET)
s3c2410-led.o:s3c2410-led.c
$(CC) -c $(CFLAGS) $^ -o $
led01:led01.o
$(CC) $^ -o $
clean:
rm -f $(TARGET) *.o *~ core .depend
注意:“$(CC) $^ -o $”和“rm -f $(TARGET) *.o *~ core .depend”前面的空白有一个Tab制表符生成,不能单纯有空格代替。
3.4实验环境的连接
1).配置实验的环境。
一、配置NFS服务
NFS(Network File System)指网络文件系统,是Linux 系统中经常使用的一种服务,NFS是一个RPC service,很像windows 中的文件共享服务。
它的
设计是为了在不同的系统间使用, 所以它的通讯协议设计与主机及作业系统无关。
当使用者想用远端档案时只要用"mount"就可把remote档案系统挂接在自己的档案系统之下,使得远端的档案在使用上和local 的档案没两样。
在NFS 服务中,宿主机(Servers)是被挂载(mount)端,为了远端客户机(Clients)(如:S3C6410 目标板)可以访问宿主PC机的文件,我们需要配置宿主机两方面容:①打开NFS服务,②允许“指定用户”访问宿主PC 机。
A、在终端中输入命令安装NFS服务:apt-get install nfs-kernel-server
B、输入以下命令以配置NFS服务:
sudo gedit /etc/exports
打开文件后,在文件中添加如下容:
/temp/tftpboot/nfsroot *(insecure,rw,sync,no_root_squash) 添加完毕,保存文件并退出,继续输入如下命令,为NFS服务端所在目录授予权限:
chmod 777 /temp/tftpboot/nfsroot
C、重新启动NFS服务
sudo /etc/init.d/nfs-kernel-server restart
sudo /etc/init.d/portmap restart
D、测试NFS服务:
showmount –e
mount 172.16.41.217:/temp/tftpboot/nfsroot /mnt
ls -l /mnt
二、配置超级终端
A、在Windwos操作系统下,打开超级终端,新建一个连接,步骤如下:
首先为新建连接输入一个名称,然后选择我们所需要连接到的端口,最后配置端口属性,这里只需要修改两处:①位/秒(B):115200,②数据流控制(F):无。
B、连接到开发板
C、配置开发板
仅仅连接到开发板还不够,要使用开发板进行开发测试工作,需要进行一定
的配置后,才能正常工作,接下来准备在超级终端下对开发板进行配置按如下步骤在超级终端下分别输入如下命令:
Ⅰ、setenv bootargs noinitrd init=/linuxrc console=ttySAC2,115200 mem=256M root=/dev/nfs nfsroot=172.16.41.217:/temp/tftpboot/nfsroot
ip=172.16.41.35:172.16.41.217:172.16.41.1:255.255.255.0::eth0:off Ⅱ、set serverip 172.16.41.217
Ⅲ、set ipaddr 172.16.41.35
Ⅴ、save
执行完以上命令后,开发板就配置完成了,可以使用"print"命令来查看开发板参数。
2).根据要求编写C语言程序和Makefile文件,放到相应目录。
3).使用命令“cd /labs/Lab_9”进入本次设计实验目录。
4).运行“make”命令产生可执行文件“led01”。
5).切换到下位机的minicom窗口,使用NFS mount上位机的“/labs”目录到“/host”目录,然后进入“/host/Lab_9”目录,使用命令“insmod s3c2410-led.o”插入led驱动,并用lsmod查看命令是否已经插入。
四.运行结果
在下位机的minicon窗口执行“. /led01”命令,8字数码管倒计时显示99~00,之后点阵数码管显示一个小人跑步运动。
总结
虽然以前做过几次课设,但是每次都会遇到新的问题,但是我们能够从努力中去寻找解决问题的办法,这让我们收获很多。
在整整二星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固通过这次课程设计,让我学习到以下几点,每次动手前一定要多查询资料,做到谋而后动这可以减少实践过程中的无用功。
而且做事一定要认真,否则一点小小的错误都会让整个程序错误。
还有一定要重视团队合作,毕竟团队的力量是强大的。
通过本次试验,我们详细的了解了LED的发光原理,和LED的显示原理,对嵌入式开发有了更深刻的理解。
致谢
对于本次课设,首先感谢关心、指导、帮助和鼓励过我的老师、同学们表示衷心的感谢。
让我们共同分享完成论文的喜悦。
设计师的完成不仅仅是我一个人的功劳,这离不开老师的悉心指导和同学的帮助鼓励。
在此感谢我嵌入式的任课老师玺君老师和此次课设的指导老师马维俊老师,在一些关键性的问题上给了我详细的解答和指导,这使我能顺利地完成此次课设。
当然这也少不了我们这一小组的同学,搜集资料,热情帮助,让我能够有充足的资源和信息,来完成课程设计。
最后,祝愿所有的老师和同学在今后的工作、学习和生活中事事顺心、心想事成。
谢谢!
参考文献
[1]宏、王小牛、任学慧. 嵌入式应用教程. 人民邮电
[2]刚.嵌入式基础实践教程. 北京大学
[3]杜春雷. ARM体系与编程. 清华大学
[4]王宜怀、晓升. 嵌入式技术基础与实践. 清华大学
[5]博创公司. 270经典实验指导书1.1. 北京博创兴业科技
[6]博创公司. 2410经典实验指导书3.2. 北京博创兴业科技
[8]石. 嵌入式系统技术教程. 人民邮电
[9] .arm./chinese
[10] http://infocenter.arm./help/index.jsp?topic=/.arm.doc.dui0064d。