第一篇:嵌入式实训 LED显示+文件系统定制实验报告
LED显示控制+文件系统定制
系
名:
专
业:
指导教师:
姓
名:
学
号:
班
级:
组
员:
科
目:
二○一 年 月
目 录
一、设计任务和技术要求:.....................................................................................................................二、器件介绍……………………………………………………………………………………………
三、设计代码:………………………………………………………………………………………….四、设计结果:.......................................................................................................................................五、系统评价:.......................................................................................................................................六、心得体会:.......................................................................................................................................一、设计任务和技术要求: 编写LED驱动程序,驱动程序采用手动定义设备名称(自己姓名拼音_led)和主设备号,设备号必须是系统尚未使用的设备号 编写对应驱动的makefile文件
将驱动程序编译成模块,并实现模块的加载及卸载
编写驱动测试程序,要求运行该测试程序后,能够对led设备打开成功与否做出判断;能够显示led控制菜单选项(至少2个控制选项),例如,选择“1”,led等循环点亮;选择“2”,指定led1灯点亮
编写对应测试程序的makefile 文件
文件系统定制 要求:
制作文件系统类型为yaffs的文件系统; 文件系统启动时显示小组成员信息; 文件系统启动时需要按提示输入用户名信息;
文件系统成功挂载后,通过串口传送刚刚编写的led控制程序,并运行该led控制程序,要求能够按照规定的控制方式实现led灯的控制
二、设计代码
程序清单:
应用程序测试leds_test.c如下:
#include
#define IOCTL_LED_ON 1 #define IOCTL_LED_OFF 5 #define IOCTL_LED_RUN 3
void usage(char *exename){ printf(“Usage:n”);printf(“
%s
led_no = 1, 2, 3 or 4n”);}
int main(int argc, char **argv){ unsigned int led_no;int fd =-1;
unsigned int count=10;
if(argc > 3 || argc == 1)
goto err;
fd = open(“/dev/cylled”, 0);// 打开设备
if(fd < 0){
printf(“Can't open /dev/fdwled,n”);
return-1;}
if(argc == 2){
if(!strcmp(argv[1], “run”))
{
ioctl(fd, IOCTL_LED_RUN, count);
//运行跑马灯
} else {
goto err;
} }
if(argc == 3){
led_no = strtoul(argv[1], NULL, 0)-1;
// 操作哪个LED?
if(led_no > 3)
goto err;
if(!strcmp(argv[2], “on”)){
ioctl(fd, IOCTL_LED_ON, led_no);
// 点亮
} else if(!strcmp(argv[2], “off”)){
ioctl(fd, IOCTL_LED_OFF, led_no);
// 熄灭
} else {
goto err;
} }
close(fd);return 0;
err:
按键驱动:
/* * linux/drivers/char/mini210_buttons.c * * This program is free software;you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation.*/
#include
#include
#define DEVICE_NAME “buttons”
struct button_desc { int gpio;int number;char *name;struct timer_list timer;};
static struct button_desc buttons[] = { { S5PV210_GPH2(0), 0, “KEY0” }, { S5PV210_GPH2(1), 1, “KEY1” }, { S5PV210_GPH2(2), 2, “KEY2” }, { S5PV210_GPH2(3), 3, “KEY3” }, { S5PV210_GPH3(0), 4, “KEY4” }, { S5PV210_GPH3(1), 5, “KEY5” }, { S5PV210_GPH3(2), 6, “KEY6” }, { S5PV210_GPH3(3), 7, “KEY7” },static volatile char key_values[] = { '0', '0', '0', '0', '0', '0', '0', '0' };
static DECLARE_WAIT_QUEUE_HEAD(button_waitq);
static volatile int ev_press = 0;
static void mini210_buttons_timer(unsigned long _data){ struct button_desc *bdata =(struct button_desc *)_data;int down;int number;unsigned tmp;
tmp = gpio_get_value(bdata->gpio);
/* active low */ down =!tmp;printk(“KEY %d: %08xn”, bdata->number, down);
number = bdata->number;if(down!=(key_values[number] & 1)){ key_values[number] = '0' + down;
ev_press = 1;wake_up_interruptible(&button_waitq);} }
static irqreturn_t button_interrupt(int irq, void *dev_id){ struct button_desc *bdata =(struct button_desc *)dev_id;mod_timer(&bdata->timer, jiffies + msecs_to_jiffies(40));
return IRQ_HANDLED;}
static int mini210_buttons_open(struct inode *inode, struct file *file){ int irq;int i;int err = 0;
for(i = 0;i < ARRAY_SIZE(buttons);i++){ if(!buttons[i].gpio)continue;
setup_timer(&buttons[i].timer, mini210_buttons_timer,(unsigned long)&buttons[i]);
irq = gpio_to_irq(buttons[i].gpio);err = request_irq(irq, button_interrupt, IRQ_TYPE_EDGE_BOTH, buttons[i].name,(void *)&buttons[i]);if(err)break;} if(err){ i--;for(;i >= 0;i--){ if(!buttons[i].gpio)continue;
irq = gpio_to_irq(buttons[i].gpio);disable_irq(irq);free_irq(irq,(void *)&buttons[i]);del_timer_sync(&buttons[i].timer);}
return-EBUSY;}
ev_press = 1;return 0;}
static int mini210_buttons_close(struct inode *inode, struct file *file){ int irq, i;
for(i = 0;i < ARRAY_SIZE(buttons);i++){ if(!buttons[i].gpio)continue;
irq = gpio_to_irq(buttons[i].gpio);free_irq(irq,(void *)&buttons[i]);
del_timer_sync(&buttons[i].timer);} return 0;}
static int mini210_buttons_read(struct file *filp, char __user *buff, size_t count, loff_t *offp){ unsigned long err;
if(!ev_press){ if(filp->f_flags & O_NONBLOCK)else wait_event_interruptible(button_waitq, ev_press);}
ev_press = 0;
err = copy_to_user((void *)buff,(const void *)(&key_values), min(sizeof(key_values), count));
return err ?-EFAULT : min(sizeof(key_values), count);}
static unsigned int mini210_buttons_poll(struct file *file, struct poll_table_struct *wait){ unsigned int mask = 0;
poll_wait(file, &button_waitq, wait);if(ev_press)mask |= POLLIN | POLLRDNORM;
return mask;}
static struct file_operations dev_fops = {.owner = THIS_MODULE,.open = mini210_buttons_open,.release = mini210_buttons_close,.read = mini210_buttons_read,.poll = mini210_buttons_poll, };
static struct miscdevice misc = {.minor = MISC_DYNAMIC_MINOR,.fops = &dev_fops, };
static int __init button_dev_init(void){ int ret;
ret = misc_register(&misc);
printk(DEVICE_NAME“tinitializedn”);
return ret;}
static void __exit button_dev_exit(void){ misc_deregister(&misc);}
module_init(button_dev_init);module_exit(button_dev_exit);
MODULE_LICENSE(“GPL”);MODULE_AUTHOR(“FriendlyARM Inc.”);程序cylled.c如下(基于实验11的代码进行更改):
#include
#include #define DEVICE_NAME “cylled” #define LED_MAJOR 222 #define IOCTL_LED_ON 1 #define IOCTL_LED_OFF 5 #define IOCTL_LED_RUN 3 %定义三个宏 #define LED_NUM ARRAY_SIZE(led_gpios) static int led_gpios[]={ S5PV210_GPJ2(0), S5PV210_GPJ2(1), S5PV210_GPJ2(2), S5PV210_GPJ2(3), }; static long mini210_leds_ioctl(struct file *filp,unsigned int cmd,unsigned long arg){ int i;int j;switch(cmd){ case IOCTL_LED_RUN: %定义RUN,用了两个for循环。 for(i=0;i { for(j=0;j<4;j++) { gpio_set_value(led_gpios[j],0); msleep(100); gpio_set_value(led_gpios[j],1); } } break; case IOCTL_LED_ON: if(arg>LED_NUM) { return-EINVAL; } gpio_set_value(led_gpios[arg],0); break; case IOCTL_LED_OFF: if(arg>LED_NUM) { return-EINVAL; } gpio_set_value(led_gpios[arg],1); break; default: return-EINVAL;} return 0;} static struct file_operations mini210_led_dev_fops={.owner =THIS_MODULE,.unlocked_ioctl =mini210_leds_ioctl, }; static int __init mini210_led_dev_init(void){ int ret;int i;for(i=0;i ret=gpio_request(led_gpios[i],“LED”); if(ret) { printk(“%s: request GPIO %d for LED failed, ret=%dn”,DEVICE_NAME ,led_gpios[i],ret); return ret; } s3c_gpio_cfgpin(led_gpios[i],S3C_GPIO_OUTPUT); gpio_set_value(led_gpios[i],1);} ret=register_chrdev(LED_MAJOR,DEVICE_NAME,&mini210_led_dev_fops);if(ret<0){ printk(“%s can't register major numbern”,DEVICE_NAME); return ret;} return 0;} static void __exit mini210_led_dev_exit(void){ int i;for(i=0;i gpio_free(led_gpios[i]); } unregister_chrdev(LED_MAJOR,DEVICE_NAME);} module_init(mini210_led_dev_init);module_exit(mini210_led_dev_exit); MODULE_LICENSE(“GPL”);MODULE_AUTHOR(“cyl”); 五.设计结果: Makefile Serial COM1 命令代码 第一盏灯亮 第二盏灯亮 第三盏灯亮 显示小组成员信息(文件系统) 用户名122014021登陆 加载驱动 创建设备名 卸载驱动 运行跑马灯命令 点灯关灯 6.心得体会: 在了解了基础知识之后,我开始进行上机操作,当然,其中遇到很多的难题,很多东西都是第一次接触,又没有别人在旁边指导操作,完全凭借自己去摸索练习。其 中的困难可想而知。然而坚持就是胜利,牙一咬眼一闭坚持做下去,而通过本次实验,我感觉收获还是蛮多的。可能我对于嵌入式的知识学习的还是不太多,但是这 之外的东西收获颇丰。它让我学会了如何通过自己的努力去认知一个新事物,更重要的是端正自己的学习态度,只有真正下功夫去学习,才能有收获,正所谓“一份 耕耘,一份收获。”没有付出,何谈回报呢?再者,通过本次实验,我也学会了如何去分析问题,如何找出自己设计中的不足,继而去排除解决问题,这就是一个自 我学习的过程。当我们通过实验去学习理论知识时,自己动手得出的结论,不仅能加深我们对嵌入式的理解,更能加深我们对此的记忆。学习到一个实验的完成过程。更深刻地了解arm的工作原理及其应用,对比出之前单片机系统应用的不同。 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 J-LINK 仿真器设置 设置步骤: 1.连接J-LINL仿真器USB到电脑。J-LINK仿真器指示灯闪烁,电脑开始自动安装驱动程序,完成驱动程序安装后指示灯常亮。2.连接J-LINL仿真器的JTAG扁平排线到LPC22EB06-I实验系统的JTAG模块CON19插座。连接完成后D12贴片LED常亮。3.连接LPC22EB06-I实验系统左侧USB供电接口到电脑,将LPC22EB06-I实验系统右下角的电源开关打到“ON”状态。此时系统上电,左下角的D4 LED灯亮度。4.将LPC22EB06-I实验系统右下角的SW1拨码开关S3拨到“ON”,其余全为“OFF”。5.在电脑上打开KEIL 4软件,建立一个工程,并新建一个C文件添加到工程中。 6.点击“Project”-“Options for Target ‘Target 1’”-Debug 选项卡,点击选择右侧的Use,然后在下拉列表中选择“J-LINK/J-TRACE”。再点击“Settings”按钮。在弹出的“J-LINK/JTrace Interface Driver Setup”对话框中点击右下方的“Target”按钮,如果弹出的信息中“ARM CPU ID:”为“0x4F1F0F0F”,说明目标芯片连接成功,否则请检查原因。点击“OK”按钮确定。7.返回“Options for Target ‘Target 1’”对话框,选择`“Utilities”选项卡,单击选择“Use Target Driver for Flash Programming”, 然后在下拉列表中选择“J-LINK/J-TRACE”。勾选“Update Target before Debugging”选项。至此J-LINK仿真设置完成。 注意事项: LPC22EB06-I实验系统外部时钟:Fosc = 10 MHz Fcclk = 50 MHz Pclk = Fcclk/4 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 实验一 GPIO输出实验(2学时) 一、实验目的 1、了解ARM7TDMI内核处理器。 2、掌握在Keil软件中编制源程序。 3、掌握在Keil软件调试源程序。 4、掌握在LPC22EB6-I实验系统的使用。 二、实验内容 1、基本要求: 编写程序驱动LPC22EB6-I实验系统上的D5、D6 LED 闪烁。 2、扩展要求: 编写延时子程序,使得D5、D6的闪烁频率约为1Hz和0.5Hz。 三、硬件电路 图1 LED电路 四、基本要求源程序 #include PINSEL2 = 0x04; //包含所需的文件 IO2DIR |=(1 << 23);IO2DIR |=(1 << 24); 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 while(1){for(j=0;j<6;j++) { if(0 ==(IO2PIN &(1 << 23)))IO2SET |=(1 << 23); } {if(0 ==(IO2PIN &(1 << 24)))IO2SET |=(1 << 24); else IO2CLR |=(1 << 24);for(i=0;i<1000000;i++);for(i=0;i<1000000;i++);else IO2CLR |=(1 << 23); for(j=0;j<6;j++) }//end of for }//end of while }//end of main 五、基本实验步骤 1.打开Keil软件,新建立一个工程Lab01.uvproj,在Select Device for Target ‘Target 1’对话框的‘Data base’选择“NXP(founder by Philips)”中的‘LPC2294’芯片。确定后弹出的确认框,选择“是”。2.新建一个后缀名为.c文件,输入上述源代码,编译。 3.按《J-LINK 仿真器设置》设置好J-LINK仿真器; 4.点击“Project”-“Options for Target ‘Target 1’”-Output 选项卡, 勾选择“Creat HEX File”,然后编译连接生成HEX文件。 5.选择“Debug”-“Start/Stop Debug Session”开始调试源代码。选择“Debug”-“Step”或者按F11可单步调试程序。选择“Debug”-“Run”或者F5全速运行程序。观察运行输出情况,修改程序。 六、扩展实验要求 1.理解基本要求实验源程序,将基本要求的闪烁周期调整到约1Hz和0.5Hz。2.根据实验内容的扩展要求,在Keil软件中编写该要求的源程序。 3.编译通过并产生机器码,下载到LPC22EB6-I实验系统,并运行看实验现象。 七、实验报告要求 1.预习报告中要体现实现内容的基本要求中的源程序理解,程序框图绘制和现实现扩展实验要求的实现原理。 2.实验报告中要体现扩展实验要求的的源程序理解,包括源程序注释及框图绘制。3.实验报告中要有实验心得体会。 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 实验二 基于GPIO数码管驱动实验(2学时) 一、实验目的 1.2.3.4.了解ARM7TDMI内核处理器。掌握在Keil软件中编制源程序。掌握在Keil软件调试源程序。 掌握74HC595芯片工作时序及动态数码管的驱动程序编写。 二、实验内容 1.基本要求: 在LPC22EB6-I实验系统上,编写程序模拟SPI时序驱动两个四位动态共阴数码管LAM1、LAM2。显示内容“12345678” 2.扩展要求: 编写程序实现动态数码显示的左移、右移、单个位闪烁功能。 三、硬件电路 图1 动态数码管电路 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 图2 74HC595工作时序图 四、基本要求源程序 #include (1)(~OUTPUT)(6)(4)(19)(18)(OUTPUT << SDI_BIT)(OUTPUT << SRCLK_BIT)(OUTPUT << RCLK_BIT)(OUTPUT << G_BIT) //共阴数码管编码,#define SRCLK_BIT #define HC595_SDI #define HC595_SRCLK #define HC595_RCLK #define HC595_G unsigned char const LEDSEG[]={ 0x3F, //“0” 0x06, //“1” 0x5B, //“2” 0x4F, //“3” 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 0x66, //“4” 0x6D, //“5” 0x7D, //“6” 0x07, //“7” 0x7F, //“8” 0x6F, //“9” };unsigned char const LEDDEG[]={0xF7,0xFB,0xFD,0xFE,0x7F,0xBF,0xDF,0xEF};unsigned char Display_Buffer[] = {1,2,3,4,5,6,7,8};void Send_Two_byte(unsigned int Data);void Delay_us(unsigned long int temp);void System_Int(void);/***************************************************************/ int main(void){ } void Send_Two_byte(unsigned int Data){ } void Delay_us(unsigned long int temp) long i;IO2CLR =(IO2CLR & ~(1 << G_BIT))|(1 << G_BIT);for(i=0;i<16;i++){ } IO2SET =(1 << RCLK_BIT);Delay_us(1);IO2CLR =(1 << RCLK_BIT);IO2SET =(1 << G_BIT);if((Data &(1 << 15))==(1 << 15))IO0SET =(1 << SDI_BIT);IO0CLR =(1 << SDI_BIT);else Delay_us(1);IO0SET =(1 << SRCLK_BIT);Delay_us(1);IO0CLR =(1 << SRCLK_BIT);Delay_us(1);Data <<= 1;long i;PINSEL2 = 0x04;System_Int();while(1){ } for(i=0;i //配置J-LINK 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 { } void System_Int(void){ } IO0DIR = HC595_SDI;IO0DIR = HC595_SRCLK;IO2DIR = HC595_RCLK;IO2DIR = HC595_G;temp = temp*10;while(temp > 0){ } temp--; 五、基本实验步骤 1.打开Keil软件,新建立一个工程Lab02.uvproj,在Select Device for Target ‘Target 1’对话框的‘Data base’选择“NXP(founder by Philips)”中的‘LPC2294’芯片。确定后弹出的确认框,选择“是”。2.新建一个后缀名为.C文件,输入上述源代码,编译。 3.按《J-LINK 仿真器设置》设置好J-LINK仿真器。4.点击“Project”-“Options for Target ‘Target 1’”-Output 选项卡, 勾选择“Creat HEX File”,然后编译连接生成HEX文件。 5.选择“Debug”-“Start/Stop Debug Session”开始调试源代码。选择“Debug”-“Step”或者按F11可单步调试程序。选择“Debug”-“Run”或者F5全速运行程序。 六、扩展实验要求 1.根据实验内容的扩展要求,理解74HC595工作时序及SPI协议原理,绘画该要求的程序流程图。2.根据实验内容的扩展要求,在Keil软件中编写该要求的源程序。 3.编译通过并产生机器码,下载到LPC22EB6-I实验系统,并运行看实验现象。 七、实验报告要求 1.预习报告中要体现实现内容的基本要求中的源程序理解,包括源程序注释及程序框图绘制和现实现扩展实验要求的实现原理; 2.实验报告中要体现扩展实验要求的的源程序理解,包括源程序注释及程序框图绘画; 3.实验报告中要有实验心得体会; 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 实验三 GPIO输入实验(2学时) 一、实验目的 1.了解并掌握Keil软件的工程设计。 2.掌握在Keil软件中编制源程序、编译通过并产生机器码。3.掌握在LPC22EB6-I实验系统中运行程序。 4.掌握在LPC22EB6-I实验系统中实现外部信息号的输入及其程序编写。 二、实验内容 1.基本要求: 利用LPC22EB6-I实验系统的外部按钮SW19,SW18手动输入开关信息,SW19按下一次D5的状态转换一次,SW18按下一次D6状态转换一次。要求有去抖功能。 2.扩展要求: 利用LPC22EB6-I实验系统的SW2—SW17 4x4键盘做为输入按键,并将被按下的按键编号显示在U17动态数码管上。 三、硬件电路 图1 按键电路 图2 LED输出电路 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 图3 矩阵键盘电路 四、基本要求源程序 #include long j;PINSEL2 = 0x04;IO2DIR |=(1 << D5);IO2DIR |=(1 << D6);IO1DIR &=(0 << SW_19);IO1DIR &=(0 << SW_18);IO2SET |=(1 << D5);IO2SET |=(1 << D6);IO1SET |=(1 << SW_19);IO1SET |=(1 << SW_18);while(1){ if((IO1PIN &(1 << SW_19))== 0){ for(j=0;j<10000;j++);if((IO1PIN &(1 << SW_19))== 0){ if((IO2PIN &(1 << D5))== 0)IO2SET |=(1 << D5);IO2CLR |=(1 << D5); else(23)(24)(25)#define SW_18(24)桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 } } } if((IO1PIN &(1 << SW_18))== 0){ } for(j=0;j<10000;j++);if((IO1PIN &(1 << SW_18))== 0){ } if((IO2PIN &(1 << D6))== 0)IO2SET |=(1 << D6);IO2CLR |=(1 << D6);else while((IO1PIN &(1 << SW_18))== 0);} while((IO1PIN &(1 << SW_19))== 0); 五、基本实验步骤 1.打开Keil软件,新建立一个工程Lab03.uvproj,在Select Device for Target ‘Target 1’对话框的‘Data base’选择“NXP(founder by Philips)”中的‘LPC2294’芯片。确定后弹出的确认框,选择“是”。2.新建一个后缀名为.C文件,按照原理图4和原理图5编写输入上述源代码,编译并排除错误。3.按《J-LINK 仿真器设置》设置好J-LINK仿真器; 4.点击“Project”-“Options for Target ‘Target 1’”-Output 选项卡, 勾选择“Creat HEX File”,然后编译连接生成HEX文件。5.选择“Debug”-“Start/Stop Debug Session”开始调试源代码。选择“Debug”-“Step”或者按F11可单步调试程序。选择“Debug”-“Run”或者F5全速运行程序。 六、扩展实验要求 1.根据实验内容的扩展要求,理解74HC595、矩阵键盘和动态数码管工作时序与原理,绘制该要求的程序流程图。 2.根据实验内容的扩展要求,在Keil软件中编写该要求的源程序。 3.编译通过并产生机器码,下载到LPC22EB6-I实验系统,并运行看实验现象。 七、实验报告要求 1.预习报告中要体现实现内容的基本要求中的源程序理解,包括源程序注释及程序框图绘制和现实现扩展实验要求的实现原理; 2.实验报告中要体现扩展实验要求的的源程序理解,包括源程序注释及程序框图绘制; 3.实验报告中要有实验心得体会; 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 实验四 基于定时器的LED闪烁实验(2学时) 一、实验目的 1.了解并掌握Keil软件的工程设计。 2.掌握在Keil软件中编制源程序、编译通过并产生机器码。3.掌握LPC2294处理器的定时器程序编写。4.掌握在LPC22EB6-I实验系统中运行程序。 二、实验内容 1.基本要求: 在Keil软件中编写基于定时器的LED闪烁程序,频率:D5为1Hz,D6为2Hz。 2.扩展要求: 在基本要求的基础上,使用LAM1或者LAM2动态数码管设计实现一个简单秒表。 三、硬件电路 图1 LED输出电路 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 图2动态数码管电路 四、基本要求源程序 #include unsigned long temp = 0;PINSEL2 = 0x04;IO2DIR |=(1 << D5);IO2DIR |=(1 << D6);T0TC = 0;T0PR = 10000;T0MCR = 0x06;T0MR0 = 250;while(1){ T0TCR = 0x01;while(T0TCR == 0x01);temp++;if(temp == 2){ } if((IO2PIN &(1 << D6))== 0)IO2SET |=(1 << D6); if((IO2PIN &(1 << D5))== 0)IO2SET |=(1 << D5);IO2CLR |=(1 << D5);else temp = 0; (23)(24) //VPB = Fosc/4=2.5MHz 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 } } else IO2CLR |=(1 << D6); 五、基本实验步骤 1.打开Keil软件,新建立一个工程Lab04.uvproj,在Select Device for Target ‘Target 1’对话框的‘Data base’选择“NXP(founder by Philips)”中的‘LPC2294’芯片。确定后弹出的确认框,选择“是”。2.新建一个后缀名为.C文件,按照原理图1和原理图2编写输入上述源代码,编译并排除错误。3.按《J-LINK 仿真器设置》设置好J-LINK仿真器; 4.点击“Project”-“Options for Target ‘Target 1’”-Output 选项卡, 勾选择“Creat HEX File”,然后编译连接生成HEX文件。 5.选择“Debug”-“Start/Stop Debug Session”开始调试源代码。选择“Debug”-“Step”或者按F11可单步调试程序。选择“Debug”-“Run”或者F5全速运行程序。 六、扩展实验要求 1.根据实验内容的扩展要求,理解74HC595、矩阵键盘和动态数码管工作时序与原理,绘制该要求的程序流程图。 2.根据实验内容的扩展要求,在Keil软件中编写该要求的源程序。 3.编译通过并产生机器码,下载到LPC22EB6-I实验系统,并运行看实验现象。 七、实验报告要求 1.预习报告中要体现实现内容的基本要求中的源程序理解,包括源程序注释及程序框图绘制和现实现扩展实验要求的实现原理; 2.实验报告中要体现扩展实验要求的源程序理解,包括源程序注释及程序框图绘画; 3.实验报告中要有实验心得体会; 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 实验五 外部中断实验(2学时) 一、实验目的 1.了解并掌握Keil软件的工程设计。 2.掌握在Keil软件中编制源程序、编译通过并产生机器码。3.掌握LPC2294处理器的外部中断程序编写。4.掌握在LPC22EB6-I实验系统中运行程序。 二、实验内容 1.基本要求: 在Keil软件中编写外部中断EXTIN0的中断程序,并对中断进行计数,然后将计数值以二进制形式从D5、D6输出。 2.扩展要求: 在基本要求的基础上,编写基于外部中断EINT3和矩阵键盘的输入程序。并将按键编号显示在LAM1或者LAM2动态数码管上。 三、硬件电路 图1按键电路 图2 LED输出电路 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 图2 矩阵键盘电路 四、基本要求源程序 #include } void EXTIN0_FIQ(void){ if((IO2PIN &(1 << D5))== 0)IO2SET |=(1 << D5);IO2CLR |=(1 << D5); else PINSEL2 = 0x04;PINSEL1 =(PINSEL1 & ~(3 << 28)|(2 << 28));VICIntSelect =(1 << 17);VICIntEnable =(1 << 17);EXTMODE = EXTMODE|0x08;EXTPOLAR = EXTPOLAR&0x07;IO2DIR |=(1 << D5);IO2SET |=(1 << D5);IO1DIR |=(1 << KEY16);IO1CLR |=(1<< KEY16);while(1); while((EXTINT&(1 << 3))!=0){ EXTINT =(1<<3);桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 } } 在Startup.s 文件 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 实验六 PWM实验(2学时) 一、实验目的 1.了解并掌握Keil软件的工程设计。 2.掌握在Keil软件中编制源程序、编译通过并产生机器码。3.掌握LPC2294处理器PWM波型输出程序的编写。4.掌握在LPC22EB6-I实验系统中运行程序。 二、实验内容 1.基本要求: 在Keil软件中编写PWM程序。编写LPC2294程序从PWM3输出1KHz的PWM信号驱动蜂鸣器发出声音。 2.扩展要求: 在基本要求的基础上,将输出的PWM信号驱动直流电机,有关电路如图1,图2所示。并使用《实验3》图1中的SW18或者SW19按键实现对直流电机的简单调速。 三、硬件电路 图1 基本要求电路 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 图2 扩展要求电路A 四、基本要求源程序 #include //Fosc = 10MHz pclk = Fosc/4=2.5MHz PWM_EN(21)BUZZER(1)int main(void) 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 { PINSEL2 = 0x04;PINSEL0 |=(PINSEL0 & ~(3 << 2))|(2 << 2);IO0DIR |=(1 << BUZZER);IO2DIR |=(1 << PWM_EN);IO2CLR =(1 << PWM_EN);PWMMCR |=(1 << 1);PWMPCR =(1 << 11);PWMPR = 10;PWMPC = 0;PWMMR0 = 250;PWMMR3 = 250/2;PWMLER =(0x09);PWMTCR = 0x09;while(1);} 五、基本实验步骤 1.打开Keil软件,新建立一个工程Lab05uvproj,在Select Device for Target ‘Target 1’对话框的‘Data base’选择“NXP(founder by Philips)”中的‘LPC2294’芯片。确定后弹出的确认框,选择“是”。2.新建一个后缀名为.C文件,按照原理图1和原理图4编写输入上述源代码,编译并排除错误。3.按《J-LINK 仿真器设置》设置好J-LINK仿真器; 4.点击“Project”-“Options for Target ‘Target 1’”-Output 选项卡, 勾选择“Creat HEX File”,然后编译连接生成HEX文件。5.选择“Debug”-“Start/Stop Debug Session”开始调试源代码。选择“Debug”-“Step”或者按F11可单步调试程序。选择“Debug”-“Run”或者F5全速运行程序。6.观察LPC22EB6-I实验系统右下角的Buzzer蜂鸣器现象,并记录。 六、扩展实验要求 1.理解基本要求实验源程序,如何配置不同的PWM频率和占空比。 2.根据实验内容的扩展要求,在Keil软件中编写该要求的源程序,编译通过生成HEX文件,下载到LPC22EB6-I实验系统。3.观察LPC22EB6-I实验系统上DC/STEP MOTOR 模块左边的直流电机的运行情况。 七、实验报告要求 1.预习报告中要体现实现内容的基本要求中的源程序理解,包括源程序注释及程序框图绘制和现实现扩展实验要求的实现原理。 2.实验报告中要体现扩展实验要求的源程序理解,包括源程序注释及程序框图绘制。3.实验报告中要有实验心得体会。 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 实验七 SPI驱动实验(2学时) 一、实验目的 1.了解并掌握Keil软件的工程设计。 2.掌握在Keil软件中编制源程序、编译和产生机器码。3.掌握LPC2294处理器SPI时序波型输出程序的编写。4.掌握在LPC22EB6-I实验系统中运行程序。 二、实验内容 1.基本要求: 在LPC22EB6-I实验系统上,编写SPI驱动程序点亮LAM1、LAM2动态数码管。 2.扩展要求: 在基本要求基础上,编写D/A芯片CS4334的SPI驱动程序并使之播放一段音乐。 三、硬件电路 图1动态数码管电路 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 图2 CS4334工作时序图 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 图3 D/A转换电路 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 图3 使能电路 四、基本要求源程序 #include (1)(0)(0 << 3)(0 << 4)(1 << 5)(1 << 6)(MSTR|CP0L|CPHA)(18)(19)(OUTPUT << G_BIT)(6)(5)(4)(7)(INPUT << SSEL0)(OUTPUT << MOSI_BIT)(OUTPUT << SCK_BIT)#define SPI_MODE #define G_BIT #define RCLK_BIT #define HC595_G #define MOSI_BIT #define MISO_BIT #define SCK_BIT #define SSEL0 #define HC595_SSEL #define HC595_SDI #define HC595_SRCLK unsigned char const LEDSEG[]={ 0x3F, //“0” 0x06, //“1” 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 0x5B, //“2” 0x4F, //“3” 0x66, //“4” 0x6D, //“5” 0x7D, //“6” 0x07, //“7” 0x7F, //“8” 0x6F, //“9” };unsigned char const LEDDEG[]={0xF7,0xFB,0xFD,0xFE,0x7F,0xBF,0xDF,0xEF};unsigned char Display_Buffer[]={1,2,3,4,5,6,7,8};void Delay_us(unsigned long temp);void SPI_Send_Data(unsigned char TEMP);void SPI_Ini(unsigned char fdiv);int main(void){ } void SPI_Ini(unsigned char fdiv){ } void SPI_Send_Data(unsigned char TEMP) if(fdiv < 8)fdiv = 8;S0SPCCR = fdiv & 0xFE;S0SPCR = SPI_MODE;unsigned char i;PINSEL2 |= 0x04;PINSEL0 =(PINSEL0 & ~(3 << SSEL0*2))|(1 << SSEL0*2);PINSEL0 =(PINSEL0 & ~(3 << MISO_BIT*2))|(1 << MISO_BIT*2);PINSEL0 =(PINSEL0 & ~(3 << MOSI_BIT*2))|(1 << MOSI_BIT*2);PINSEL0 =(PINSEL0 & ~(3 << SCK_BIT*2))|(1 << SCK_BIT*2);IO0DIR |=(1 << 24);IO0SET |=(1 << 24);IO2DIR |=(1 << RCLK_BIT);IO2DIR |=(1 << G_BIT);IO2CLR |=(1 << G_BIT);SPI_Ini(200);while(1){ } for(i=0;i < sizeof(Display_Buffer);i++){ } SPI_Send_Data(LEDDEG[i]);SPI_Send_Data(LEDSEG[Display_Buffer[i]]);IO2SET =(1 << RCLK_BIT);Delay_us(1);IO2CLR =(1 << RCLK_BIT);Delay_us(1000);桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 { } void Delay_us(unsigned long temp){ } temp = temp*10;while(temp > 0){temp--;} S0SPDR = TEMP;while((S0SPSR & 0x80)== 0); 五、基本实验步骤 1.打开Keil软件,新建立一个工程Lab08uvproj,在Select Device for Target ‘Target 1’对话框的‘Data base’选择“NXP(founder by Philips)”中的‘LPC2294’芯片。确定后弹出的确认框,选择“是”。2.新建一个后缀名为.C文件,按照图10原理编写输入上述源代码,编译并排除错误。3.按《J-LINK 仿真器设置》设置好J-LINK仿真器; 4.点击“Project”-“Options for Target ‘Target 1’”-Output 选项卡, 勾选择“Creat HEX File”,然后编译连接生成HEX文件。5.选择“Debug”-“Start/Stop Debug Session”开始调试源代码。选择“Debug”-“Step”或者按F11可单步调试程序。选择“Debug”-“Run”或者F5全速运行程序。6.观察动态数码管的显示情况,修正程序,并记录。 六、扩展实验要求 1.理解基本要求实验源程序,如何配置不同的PWM频率和占空比。 2.根据实验内容的扩展要求,在Keil软件中编写该要求的源程序,编译通过生成HEX文件,下载到LPC22EB6-I实验系统。3.观察声音的情况; 七、实验报告要求 4.预习报告中要体现实现内容的基本要求中的源程序理解,包括源程序注释及程序框图绘制和现实现扩展实验要求的实现原理; 5.实验报告中要体现扩展实验要求的源程序理解,包括源程序注释及程序框图绘制; 6.实验报告中要有实验心得体会; 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 实验八 A/D模数转换实验(2学时) 一、实验目的 1. 了解并掌握Keil软件的工程设计。 2. 掌握在Keil软件中编制源程序、编译通过并产生机器码。3. 掌握LPC2294处理器A/D模数转换程序的编写。4. 掌握在LPC22EB6-I实验系统中运行程序。 二、实验内容 1. 基本要求: 在LPC22EB6-I实验系统上编写程序,读取AIN17电位器的输出电压的A/D转换值,并以十进制的形式显示在动态数码管LAM1上。 2. 扩展要求: 在基本要求的基础上,将AIN7与AIN6输出的通过A/D采集,并在LAM1与LAM2上分别显示出来,实现简单的数字电压表功能。所需原理图参见图1和图2。 三、硬件电路 图1 A/D转换输入电路 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 图 2 动态数码管电路 四、基本要求源程序 #include 31(1)(~OUTPUT)(6)(4)(19)(18) ((IO0DIR & ~(1 << SDI_BIT)|(OUTPUT << SDI_BIT)))((IO0DIR & ~(1 << SRCLK_BIT)|(OUTPUT << SRCLK_BIT)))((IO2DIR & ~(1 << RCLK_BIT)|(OUTPUT << RCLK_BIT)))((IO2DIR & ~(1 << G_BIT)|(OUTPUT << G_BIT)))(28) | | | | | | ((2500000/1000000-1)<< 8)|(0 << 16)(0 << 17)(1 << 21)(0 << 22)(1 << 24)(0 << 27); #define SRCLK_BIT #define HC595_SDI #define HC595_SRCLK #define HC595_RCLK #define HC595_G #define AIN7 #define START_ADC()ADCR =(1 << 7)桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 unsigned char const LEDSEG[]={ 0x3F, //“0” 0x06, //“1” 0x5B, //“2” 0x4F, //“3” 0x66, //“4” 0x6D, //“5” 0x7D, //“6” 0x07, //“7” 0x7F, //“8” 0x6F, //“9” };unsigned char const LEDDEG[]={0xF7,0xFB,0xFD,0xFE,0x7F,0xBF,0xDF,0xEF};unsigned char Display_Buffer[] = {0,0,0,0};void Send_Two_byte(unsigned int Data);void Delay_us(unsigned long int temp);void System_Int(void);int main(void){ } void Send_Two_byte(unsigned int Data){ long i; unsigned char i;unsigned int temp = 0;unsigned int ADC_Val;PINSEL2 = 0x04;PINSEL2 =(PINSEL2 & ~(3 << 4))|(3 << 4);PINSEL2 =(PINSEL2 & ~(1 << 7))|(1 << 7);System_Int();while(1){ } for(i=0;i<=GET_ADC_CNT;i++){ } Display_Buffer[0] = temp/1000;Display_Buffer[1] =(temp/100)% 10;Display_Buffer[2] =(temp/10)% 10;Display_Buffer[3] = temp % 10;for(i=0;i 应用科技学院 《ARM嵌入式系统实验指导书》 } void Delay_us(unsigned long int temp){ } void System_Int(void){ } IO0DIR = HC595_SDI;IO0DIR = HC595_SRCLK;IO2DIR = HC595_RCLK;IO2DIR = HC595_G;temp = temp*10;while(temp > 0){ temp--;} IO2CLR =(IO2CLR & ~(1 << G_BIT))|(1 << G_BIT);for(i=0;i<16;i++){ } IO2SET =(1 << RCLK_BIT);Delay_us(1);IO2CLR =(1 << RCLK_BIT);IO2SET =(1 << G_BIT);if((Data &(1 << 15))==(1 << 15))IO0SET =(1 << SDI_BIT);IO0CLR =(1 << SDI_BIT);else Delay_us(1);IO0SET =(1 << SRCLK_BIT);Delay_us(1);IO0CLR =(1 << SRCLK_BIT);Delay_us(1);Data <<= 1; 五、基本实验步骤 1. 打开Keil软件,新建立一个工程Lab08uvproj,在Select Device for Target ‘Target 1’对话框的‘Data base’选择“NXP(founder by Philips)”中的‘LPC2294’芯片。确定后弹出的确认框,选择“是”。2. 新建一个后缀名为.C文件,按照图10原理编写输入上述源代码,编译并排除错误。 3. 按《J-LINK 仿真器设置》设置好J-LINK仿真器; 4. 点击“Project”-“Options for Target ‘Target 1’”-Output 选项卡, 勾选择“Creat HEX File”,然后编译连接生成HEX文件。 5. 选择“Debug”-“Start/Stop Debug Session”开始调试源代码。选择“Debug”-“Step”或者按F11可单步调试程序。选择“Debug”-“Run”或者F5全速运行程序。6. 旋转AIN7或者AIN6,观察动态数码管的显示情况,并记录。 六、扩展实验要求 1.理解基本要求实验源程序; 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 2.根据实验内容的扩展要求,在Keil软件中编写该要求的源程序。 3.编译通过并产生机器码,加载LPC22EB6-I实验系统中,并运行看实验现象。 七、实验报告要求 1.预习报告中要体现实现内容的基本要求中的源程序理解,包括源程序注释及程序框图绘制和现实现扩展实验要求的实现原理; 2.实验报告中要体现扩展实验要求的源程序理解,包括源程序注释及程序框图绘制; 3.实验报告中要有实验心得体会; 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 实验九 串口通信实验(2学时) 一、实验目的 1.了解并掌握Keil软件的工程设计。 2.掌握在Keil软件中编制源程序、编译通过并产生机器码。3.掌握LPC2294处理器串行通信程序的编写。4.掌握在LPC22EB6-I实验系统中运行程序。 二、实验内容 1.基本要求: 在LPC22EB6-I实验系统上编写程序,从串口0(UART0)发送字符串“Hello ARM!”到计算机。 2.扩展要求: 在基本要求的基础上,实现在计算机输入一个数值控制D5的闪烁速度,并回发此数值到计算机上。 三、硬件电路 图1 UART0电路 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 图2 拨码开关电路 四、基本要求源程序 #include (1200)(50000000/4)unsigned char const String[]=“Hello ARM!”;void UART_Send_Byte(unsigned char data);void System_Int(void);void UART_Ini(void);int main(void){ unsigned long i = 0; } void System_Int(void){ } void UART_Ini(void){ unsigned int FDIV; PINSEL2 = 0x04;PINSEL0 =(PINSEL0 & ~(3 << 0))|(1 << 0);PINSEL0 =(PINSEL0 & ~(3 << 2))|(1 << 2);System_Int();UART_Ini();while(1){ } while(String[i]!= ' '){ } UART_Send_Byte('n');i = 0;UART_Send_Byte(String[i]);i++;桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 } void UART_Send_Byte(unsigned char data){ } U0THR = data;while((U0LSR & 0x40)== 0);U0LCR = 0x83;FDIV =(FPCLK >> 4)/UART_BPS;U0DLM = FDIV/256;U0DLL = FDIV%256;U0LCR = 0x03; 五、基本实验步骤 1.打开Keil软件,新建立一个工程Lab08uvproj,在Select Device for Target ‘Target 1’对话框的‘Data base’选择“NXP(founder by Philips)”中的‘LPC2294’芯片。确定后弹出的确认框,选择“是”。2.新建一个后缀名为.C文件,按照图1原理编写输入上述源代码,编译并排除错误。 3.按《J-LINK 仿真器设置》设置好J-LINK仿真器,将计算机串口线连接到LPC22EB6-I实验系统的CON11 UART0接口。4.将SW1拨码开关的S6,S7打到“NO”位置,强行使能UART0。 5.点击“Project”-“Options for Target ‘Target 1’”-Output 选项卡, 勾选择“Creat HEX File”,然后编译连接生成HEX文件。 6.在计算机建立一个超级终端来调试串口。点击“开始”-“所有程序”-“附件”-“通讯”-“超级终端”。在光标处输入名称“LAB09”,确定,在“连接时使用(N)”下拉列表中选择“COM1”,确定后按图13选择参数。点击“确定”后计算机已经打开串口1并准备好与LPC22EB6-I实验系统通讯。 图3 串口属性设置 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 图4 串口实验效果图 7.选择“Debug”-“Start/Stop Debug Session”开始调试源代码。选择“Debug”-“Step”或者按F11可单步调试程序。选择“Debug”-“Run”或者F5全速运行程序。8.查看超级终端是否收到所输入“Hell ARM!”字符。9.记录实验现象,基本要求源程序代码如图4所示。 六、扩展实验要求 1.理解基本要求实验源程序; 2.根据实验内容的扩展要求,在Keil软件中编写该要求的源程序。 3.编译通过并产生机器码,加载LPC22EB6-I实验系统中,并运行看实验现象。 七、实验报告要求 1.预习报告中要体现实现内容的基本要求中的源程序理解,包括源程序注释及程序框图绘制和现实现扩展实验要求的实现原理。 2.实验报告中要体现扩展实验要求的源程序理解,包括源程序注释及程序框图绘制。3.实验报告中要有实验心得体会。 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 实验十 语音实时回放实验(2学时) 一、实验目的 5. 了解并掌握Keil软件的工程设计。 6. 掌握在Keil软件中编制源程序、编译通过并产生机器码。 7. 掌握LPC2294处理器A/D模数转换、D/A数模转换程序的编写。8. 掌握在LPC22EB6-I实验系统中运行程序。 二、实验内容 1. 基本要求: 在LPC22EB6-I实验系统上编写程序,实时从MIC传感器读取输入的声音信号A/D值,并从SPEAKER-R输出还原后的声音。 三、硬件电路 图1 MIC电路 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 图2 D/A转换电路 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 图3 使能电路 四、实验要求 1.自主编写程序源代码。 五、实验报告要求 1.源程序代码 2.程序框图绘制 3.实验报告中要有实验心得体会; 桂林电子科技大学 应用科技学院 《ARM嵌入式系统实验指导书》 实验十一 基于LPC22EB6-I实验系统的电子密码锁设计 (4学时) 一、实验目的 1. 了解并掌握Keil软件的工程设计。 2. 掌握在Keil软件中编制源程序、编译通过并产生机器码。3. 掌握LPC2294处理器综合应用程序的编写。4. 掌握在LPC22EB6-I实验系统中运行程序。 二、实验内容 1. 基本要求: 在前十个实验的基础上,使用LPC22EB6-I实验系统编写一个电子密码锁程序,实现4~8位的电子密码锁设计。具体要求如下: 1)矩阵键盘输入 2)8位动态数码管输出 3)LED灯指示锁状态 4)设置至少一个超级密码 5)具有密码设置错误超次数锁死功能 三、硬件电路 所需电路原理图:参照《实验一》至《实验九》有关电路图。 四、实验报告要求 实验报告应包含以下方面的内容: 1、系统的组成框图 2、系统功能简述 3、系统的程序框图 4、程序源代码 5、效果记录 6、实验心得体会 实训总结 班级:卓越1301 姓名:刘* 短短三周的很快就过去了,在中软国际嵌入式方向班的第二次实习马上就要结束了。虽然只有短短的三周,但我学会了很多知识,学习了在Linux-Fedora14操作系统的环境下完成基于Smart210SDK开发板和DS18B20的温度采集及显示系统还有按键控制LED灯并实现开机和关机的相关功能,这些知识让我们对嵌入式有了更进一步的了解与熟悉。 作为一名大学生,纵观现在的就业形势,国家高校的扩招,世界金融危机的横扫,大学生应该有一种居安思危的紧迫感,特别是对已经度过几年大学的我来说,毕业并不是一个遥远的词汇。宝剑锋从磨砺出,梅花香自苦寒来,缺少了平时的锻炼,没有厚积当然不能有薄发。首先我得有思想上的紧迫感,在学校学习的都是理论知识,实践经验则是少之又少。综合能力强的人才才是这个社会需要的,成长成为社会需要的人才是我的个人奋斗目标。有了强大的精神动力,有了坚如磐石的毅力,相信成功并不遥远。 首先,通过这些天的实训我学到了很多知识。这一阶段在Linux-Fedora14操作系统的环境使用Smart210SDK开发板做一些程序设计并烧写到SD卡中通过Smart210SDK开发板来实现程序的执行,通过对Smart210SDK开发板的一步一步的熟悉和了解我们开展了嵌入式的基本的程序烧写、调试、执行这些相关的锻炼过程。 最后我们做了两个项目: 第一个是基于Smart210SDK开发板的按键控制LED灯并且实现开机和关机的相关功能与实现---项目功能是:实现长按开发板上的K1键实现开机或关机,在开机状态下能够实现K1短按控制LED1的点亮与熄灭、K2短按控制LED2的点亮与熄灭、K3短按控制LED3的点亮与熄灭、K4短按控制LED4的点亮与熄灭。项目涉及的相关技术是:相关寄存器的调用,延时子函数的调用,LED灯的初始化,实现按键的长按与短按的控制的C语言程序的设计与实现。 第二个是基于Smart210SDK开发板和DS18B20的测量并在minicom上显示的功能与实现---项目功能:首先实现DS18B20的初始化,然后在DS18B20中写数据、数据转换、读数据、进行数据间的格式转换,最后在minicom上显示出所读出的温度,并且实现当温度高于32°C的时候LED灯闪烁,当温度高于35°C的时候蜂鸣器响。项目涉及的相关技术是:相关寄存器的调用,UART的串口与DS18B20的初始化,延时子函数的调用,字符与字符串的输入输出,计算温度的并进行数据类型的转换的C语言程序的设计与实现! 在此次的实训中我感觉到我们最大的不足就是动手的能力太差,这次实训也让我深刻的了解到,不管在工作中还是在生活中要和老师、同学保持良好的关系是很重要的。做事首先要先做人,要明白做人的道理,如何与人相处是现代社会的做认得一个最基本的问题,对已自己这样一个即将步入社会的人来说,需要学习的东西很多。从一起做项目的同学身上我看到了谦虚谨慎、细心努力的态度,在以后我的生活中我还会留意身边同学的优点,从他们身上找寻我所缺少的品质,不断学习。从老师那里我看到了企业人的生活面貌,没有事情可以不劳而获,今天老师们能够领导我们是他们之前努力的结果,虽然老师没有和我们讲很多公司里的事情,可是他们的言行中所表现出来的都是比我们要严谨的多的对工作的态度。最后谢谢老师辛苦的教导我们! 姓名:刘* 学号:13******** 日期:2014.07.04 嵌入式实训报告 班级:电子信息1301 姓名:钟海明 学号:3138702144 同组人:胡晓海 指导老师:韦龙新 目录: 一、实训目的---------------------3 二、实训要求---------------------3 三、实训内容---------------------3 1、嵌入式系统开发环境的搭建----------3 2、嵌入式程序的编译与下载------------3 3、uboot的移植----------------------4 4、linux内核的移植------------------4 5、NFS网络文件挂载------------------5 6、FTP和TFTP的运用-----------------6 7、试验箱镜像的烧写-----------------7 8、串口实验和TCP实验同时传送AD值--7 四、实训心得体会及体会----------8 一、实训目的: 学习和掌握ARM嵌入式Linux系统的体系结构和基本指令,熟悉Linux下的设计流程和编程流程,能够实现一定功能的嵌入式的设计,为之前的理论课程实践验证和为今后的学习及将来从事的技术工作打下一定的基础。 二、实训要求: 1、嵌入式系统开发环境的搭建 2、嵌入式程序的编译与下载 3、uboot的移植 4、linux内核的移植 5、NFS网络文件挂载 6、FTP和TFTP的运用 7、试验箱镜像的烧写 8、串口实验和TCP实验同时传送AD值 三、实训内容: 1、嵌入式系统开发环境的搭建: 首先在笔记本电脑下安装虚拟机VMware,安装成功后拷贝安装好的Fedora到本机上在虚拟机上找到路径打开。打开虚拟机进入Fedora选择用户为root密码为123456。交叉环境的安装,下载好arm-linux-gcc的编译包,解压安装到/opt下。 2、嵌入式程序的编译与下载: 用vi编辑一个(.C)的文件,保存退出后使用(arm-linux-gcc-o 编译后的文件名 编译文件名)的指令编译,编译成功后用FTP或TFTP将可执行文件拷贝到实验开发板中,chmod +x 文件名 修改权限(./文件名)执行编译文件。 3、uboot的移植 下载U-boot的安装包,解压到/opt路径下进入u-boot。修改Makefile将CROSS_COMPILE=/opt/Embedsky/4.3.3/bin/arm-linux-后执行#make distclean #make smdk2440_config #make 4、Linux内核的移植: 下载Linux的安装包,解压的/opt路径下进入Linux执行#make menuconfig进行配置 配置内核支持NFS启动文件系统 内核支持NFS分区(即编译时在File system中选中[*] Root file system on NFS), 以及支持内核IP_PNP(即编译时在Networking中选中[*] IP: kernel level autoconfiguration) File systems---> Network File Systems---> <*> NFS file system support ## 必选 [*] Provide NFSv3 client support ## 可选 [*] Root file system on NFS ## 必选 Networking---> [*] Networking support Networking options---> [*] IP: kernel level autoconfiguration ## 必选 需要打开IP:Kernel level autoconfiguration 以及下面所有的选项包括DHCP, BOOTP, RARP,而且NFS Client Support不能是模块,必须编译进内核。配置完毕后,保存退出。执行下面的命令来生成内核映像。 #make dep #make #make zImage 映像文件产生在/arch/arm/boot/目录下,名称“zImage”。 5、NFS网络文件挂载: 1)首先修改虚拟机网络为: 192.168.0.43 输入以下命令: #cd /root #mkdir nfs #touch aaa #cd /mnt #mkdir nfs #vi /etc/exports 进入修改内容为: /root/nfs 192.168.0.*(rw,sync,no_root_squash)存盘退出 #ifconfig(查看网络) #ifconfig eth1 192.168.0.43 #ifconfig eth1 down #ifconfig eth1 up #ping 192.168.0.43 #/etc/init.d/nfs start #mount-t nfs 192.168.0.43:/root/nfs /mnt/nfs /*此时可以在/root/nfs下新建一个文件,如果在/mnt/nfs下也有,表示NFS挂载成功。 6、TFTP的运用: 修改计算机的IP为192.168.1.43,用网络线将开发板和实验板链接起来(开发板的IP默认问192.168.1.6),打开电脑的菜单栏运行输入cmd,#telnet 192.168.1.6进去开发板用户名为root。如果进不去,打开计算机的Telnet的允许指令,还有一个就是看网络有没有ping通。打开TFTP应用程序, 将Windows文件传送到开发板使用指令: #tftp-r 文件名-g 192.168.1.43 将开发板的文件传送到Windows使用指令: #tftp-l 文件名-p 192.168.1.43 进入查看文件是否有添加,有添加则表示传送成功。 7、试验箱镜像的烧写: 连接好串口和USB,安装USB的驱动(安装驱动由于试验箱和USB线的问题我们那一组试了无数次都没有安装成功,最后还是通过换用别人的电脑才成功的)。实验箱按键拨到下载模式,打开DNW软件选择5,6,7,分别下载内核,u-boot,根文件系统,按键拨到工作模式重启实验箱,看是否正常启动即可。 8、串口实验和TCP实验同时传送AD值: 串口实验 修改串口实验的C文件并用arm-linux-gcc编译器编译生成可执行文件,利用TFTP传送到开发板的/root下,改变权限chmod +x 之后(./)执行./adc 和./uart程序,同时打开串口调试助手波特率选择9600,虚拟机的串口COM1断开,串口调试助手连接串口。接收端选择文本模式,此时就可以看见接收区收到每隔一秒钟收到的AD值,和名字学号。 TCP实验 在虚拟机中打开TCP实验的文件,修改Makefile文件中arm-linux-gcc 编译器的路径,和server.c文件中的hell[]数主的字符为zhonghaiming3138702144.保存退出。#Make 之后会生成一个为client和server的两个程序。此时将两个编译生成的文件传送到开发板上,给权限执行。同时打开网络调试助手,执行client时选择TCPserver IP为Windows IP192.168.1.43,Telnet中执行(#./client 192.168.1.43 8080)点击发送即可在Telnet中接收到 由网络调试助手发送过来的数据。执行./server时 选择TCPclient IP为开发板IP 192.168.1.6 执行(#./server 8080&)点击连接就可以在网络调试助手上接收到(zhonghaiming318702144)。 网络AD测试,先编译,之后和执行server步骤一样,每连接一次,发送一次AD值和姓名学号。 四、实训心得体会及总结: 三周的实训说快也快,说慢也慢。可以说这三周的实训并不是很顺利,由于对试验箱的不熟悉和嵌入式理论与实际的差距在加上嵌入式本身有一定的难度,所以走了很多的弯路。从NFS的挂载开始ping网络一步步的开始试,找原因找百度,最终还是没有成功的用NFS挂载到试验箱上,这期间几乎用了一周的时间,效率可见。 虽然走了许多的弯路,但是我觉得有时候弯路并不是坏事,就此次实训来说,我就知道了挂载实验箱不仅仅可以用NFS挂载还可以用TFTP和FTP以及实验板的rz命令直接挂载,进入实验板不仅仅可以用scoreCRT软件还可以用虚拟机的minicom以及Windows下的Telnet命令直接进入试验箱。 这次实训最大的感触就是要细心多尝试,遇到问题多看多问不要逃避,不会的要虚心求教。要把握好时间观念不要在一个地方死磕,多和同学交流,每个人遇到的问题都不一样当下次你遇到和他一样的问题是说不定你就会了。所以在这里也要感谢同组人和同学的帮助,以及老师耐教学和指导。 嵌入式实训总结 2012年8月我参加了学校安排的课题实训,基地在北京,学院安排我们集体坐火车一同前去,浩浩荡荡的队伍开始出发了。刚来北京的时候,映入眼绵的都是高楼大厦,一直想到的地方终于到了,好多以前的同学听说我要去北京实训都很羡慕不已,我自己也隐隐感到自豪。 我参加的课题实训是嵌入式方向的,开课的内容主要是嵌入式开发方面的,C语言,数据结构,LINUX基本操作,网络编程,操作系统和汇编语言,这些都是嵌入式不可缺少的。每个专业技能都决定了你以后找工过。我们班分了很多小组,每组都有小组长,小组长直接对我们负责。教课老师很认真,都是从很基础的开始讲;同学们听课也很认真,由于代码操作比较多,键盘的声音源源不断的在响。好久没有感觉到这种浓重的学习气氛了,而在这紧张而充实的学习氛围中我获益匪浅,感受颇多。 授课过程中老师们也传授了一些找工作方面的经验,比如简介的样式和写法,面试中的一些着装,礼貌用语和技巧,对此基地的老师还精心的为我们安排了一场模拟面试,在其中我们学到了很多有关于面试方面的经验。 通过这几个月的实训我学到了很多,同时也让我们意识到我们要学的更多。从程序的设计到编写、画图、调试、修改、完善、到最后的实训报告,每个人都付出了时间和精力去做好自己的任务帮助队友,所以团队的合作和队友之间的相互协助非常重要。通过实训让我们更深一步的对自己的专业,对自己的能力,对自己所学的有正确的认识,并且能在以后的学习工作中不断提高和完善自己。特别是讲C语言和进程通信中老师给了我们每个小组的几个小项目,让我学到了更多项目经验,这在学校之前是没有的。这次实训也碰到了些问题,比如项目文档的写法,代码的规范,流程图的画法,这些都有讲究,在老师和同学的帮助下,我不断的提高了在这些方面的学习。 生活上班主任郭老师和王老师对我们关怀备至,让我们没有感觉在外面的那种不适感,同学们也互帮互助,所以生活上大致没什么问题,这让我们更好的去学专业。很感谢学校有这样的实训安排。 总的来说,这次实训还是比较成功的,无论是个人动手能力还是团队协作能力都得到了很好的锻炼。在实训过程中老师也交给我们很多简单实用的技巧。我们也学到了,做好做对一个项目固然重要,同时美观程度也是必不可少的,无论是从参观者的角度还是自己看的角度都很重要。第二篇:电子信息专业_嵌入式实验报告实训指导书
第三篇:嵌入式--实训总结
第四篇:嵌入式实训报告
第五篇:嵌入式实训总结