嵌入式课程设计报告.docx
- 文档编号:11199346
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:11
- 大小:92.36KB
嵌入式课程设计报告.docx
《嵌入式课程设计报告.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计报告.docx(11页珍藏版)》请在冰豆网上搜索。
嵌入式课程设计报告
重庆交通大学
学生实验报告
实验课程名称《嵌入式系统基础A》
开课实验室信xxx
学院信息学院年级物联网专业班一班
学生姓名gllh学号*******xx
开课时间201x至201x学年第x学期
指导教师:
xxx
(综合性实验)评定标准
1)是否完成实验任务基本要求
A()B()C()
2)方案设计是否合理
A()B()C()
3)实验报告格式符合规范要求
A()B()C()
4)实验分析总结全面,有一定创新
A()B()C()
实验报告成绩:
签名:
一、实验目的
实验目的是培养学生熟练使用交叉编译平台的配置、搭建、编译、调试、装载,熟练掌握GPIO、中断向量的原理和使用方法,ARM系统的启动代码原理与实现,掌握嵌入式系统开发的基本方法。
二、实验原理
中断是指当嵌入式系统出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。
异常是中断的一种,异常非为中断异常(IRQ/FIQ)和非中断异常(SVC/Undefine/Abort)。
即在程序运行过程中,嵌入式系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。
在ARM中,有两类中断,一类是IRQ,一类是FIQ,IRQ是普通中断,FIQ是快速中断,在进行大批量的复制、数据转移等工作时,常使用此类中断。
FIQ的优先级高于IRQ。
同时,它们都属于ARM的异常模式,当一旦有中断发生,不管是外部中断,还是内部中断,正在执行的程序都会停下,PC指针进而跳入异常向量的地址处,若是IRQ中断,则PC指针跳到0x1C处。
GPIO意为通用输入输出端口,简单说就是一些引脚,通过它们输出高低电平或者通过它们读取引脚高低电平状态,可以通过设置寄存器来确定某个引脚用于输入、输出还是特殊功能。
由于ARM软件编程一般采用高级语言,如C语言,因此在系统启动后必须有一段程序能够将CPU带入到能够运行C语言的状态,这段程序就是启动代码。
启动代码通常用汇编语言完成,并在系统复位入口点(ARM系统中为0的地址)运行,启动代码主要功能是建立异常向量表、初始化硬件、初始化堆栈、初始化读写数据段、BSS段、重定向、跳转到C代码。
其中系统启动代码流程图:
三、实验仪器
硬件清单:
●PC计算机
●ARM试验箱
软件清单:
●VMWare
●Eclipse-ARM开发环境
●JTAG启动及软件
●串口通信软件
四、实验内容(实验任务)
使用ARM试验箱,开发一个基于GPIO的综合应用软件。
要求该软件具备一下功能:
1.编写基于ARM的启动代码。
2.流水灯至少要用到4个以上,并且流水灯方式应具备唯一性。
3.按键操作应做好防抖功能。
4.至少用到一个IRQ中断(按键操作使用外部中断或者流水灯使用定时器中断)
5.完成系统流程图设计。
五、实验记录
使用按键来控制流水灯和切换中断程序:
#include"exynos_4412.h"
staticintnum=0;
voiddo_irq(void){//按键中断程序
intirq_num;
irq_num=(CPU0.ICCIAR&0x3FF);
switch(irq_num){
case58:
//按键1------------------631507030101
GPF3.GPF3CON|=0x1<<16;//LED4、3开表示6
GPX1.GPX1CON|=0x1;
mydelay_ms(500);
GPF3.GPF3CON&=~(0x1<<16);
GPX1.GPX1CON&=~0x1;
mydelay_ms(500);//LED6关
GPX1.GPX1CON|=0x1;//LED2、3开表示3
GPX2.GPX2CON|=0x1<<28;
mydelay_ms(500);
GPX1.GPX1CON&=~0x1;
GPX2.GPX2CON&=~(0x1<<28);
mydelay_ms(500);//LED关
GPX2.GPX2CON|=0x1<<28;//LED2开表示1
mydelay_ms(500);
GPX2.GPX2CON&=~(0x1<<28);
mydelay_ms(500);//LED关
GPX2.GPX2CON|=0x1<<28;//LED5、2开表示5
GPF3.GPF3CON|=0x1<<16;
mydelay_ms(500);
GPX2.GPX2CON&=~(0x1<<28);
GPF3.GPF3CON&=~(0x1<<16);
mydelay_ms(500);//LED关
mydelay_ms(500);//LED全熄表示0
GPX2.GPX2CON|=0x1<<28;//LED4、3、2开表示7
GPX1.GPX1CON|=0x1;
GPF3.GPF3CON|=0x1<<16;
mydelay_ms(500);
GPX2.GPX2CON&=~(0x1<<28);
GPF3.GPF3CON&=~(0x1<<16);
GPX1.GPX1CON&=~0x1;
mydelay_ms(500);//LED关
mydelay_ms(500);//LED全熄示0
GPX2.GPX2CON|=0x1<<28;//LED2、3开表示3
GPX1.GPX1CON|=0x1;
mydelay_ms(500);
GPX1.GPX1CON&=~0x1;
GPX2.GPX2CON&=~(0x1<<28);
mydelay_ms(500);//LED关
mydelay_ms(500);//LED全熄表示0
GPX2.GPX2CON|=0x1<<28;//LED2开表示1
mydelay_ms(500);
GPX2.GPX2CON&=~(0x1<<28);
mydelay_ms(500);//LED关
mydelay_ms(500);//LED全熄表示0
GPX2.GPX2CON|=0x1<<28;//LED2开表示1
GPX1.GPX1CON|=0x1;
mydelay_ms(500);
GPX1.GPX1CON&=~0x1;
GPX2.GPX2CON&=~(0x1<<28);
mydelay_ms(500);//LED关
printf("IRQinterrupt!
!
turnonLED2;turnoffLED3\n");
//ClearPend
EXT_INT41_PEND|=0x1<<2;
ICDICPR.ICDICPR1|=0x1<<26;
break;
case57:
//按键2-------------------81814242
GPF4.GPF4CON|=0x1<<20;//LED5开表示8
mydelay_ms(500);
GPF4.GPF4CON&=~(0x1<<20);
GPX2.GPX2CON|=0x1<<28;
mydelay_ms(500);
GPX2.GPX2CON&=~(0x1<<28);//~8
GPF4.GPF4CON|=0x1<<20;//LED2开表示1
mydelay_ms(500);
GPF4.GPF4CON&=~(0x1<<20);
GPX2.GPX2CON|=0x1<<28;
mydelay_ms(500);
GPX2.GPX2CON&=~(0x1<<28);//~1
GPF3.GPF3CON|=0x1<<16;//LED3开表示4
mydelay_ms(500);
GPF3.GPF3CON&=~(0x1<<16);
GPX1.GPX1CON|=0x1;
mydelay_ms(500);
GPX1.GPX1CON&=~0x1;//~2
GPF3.GPF3CON|=0x1<<16;//LED3开表示2
mydelay_ms(500);
GPF3.GPF3CON&=~(0x1<<16);
GPX1.GPX1CON|=0x1;
mydelay_ms(500);
GPX1.GPX1CON&=~0x1;//~2
printf("IRQinterrupt!
!
TurnonLED3;TurnoffLED2\n");
EXT_INT41_PEND|=0x1<<1;
ICDICPR.ICDICPR1|=0x1<<26;
break;
}
CPU0.ICCEOIR=(CPU0.ICCEOIR&~(0x1FF))|irq_num;
}
voidmydelay_ms(intms){
inti,j;
while(ms--){
for(i=0;i<5;i++)
for(j=0;j<514;j++);
}
}
intmain(void){
//LED2GPX2_7
GPX2.GPX2CON|=0x1<<28;
//LED3GPX1_0
GPX1.GPX1CON|=0x1;
//Led4GPF3_4
GPF3.GPF3CON|=0x1<<16;
//Led5GPF3_5
GPF4.GPF4CON|=0x1<<20;
GPX1.GPX1PUD=GPX1.GPX1PUD&~(0x3<<2);
GPX1.GPX1CON=(GPX1.GPX1CON&~(0xF<<4))|(0xF<<4);
EXT_INT41_CON=(EXT_INT41_CON&~(0x7<<4))|0x2<<4;
EXT_INT41_MASK=(EXT_INT41_MASK&~(0x1<<1));
GPX1.GPX1PUD=GPX1.GPX1PUD&~(0x3<<4);
GPX1.GPX1CON=(GPX1.GPX1CON&~(0xF<<8))|(0xF<<8);
EXT_INT41_CON=(EXT_INT41_CON&~(0x7<<8))|0x2<<8;
EXT_INT41_MASK=(EXT_INT41_MASK&~(0x1<<2));
ICDISER.ICDISER1|=(0x1<<25)|(0x1<<26);
CPU0.ICCICR|=0x1;
CPU0.ICCPMR=0xFF;
ICDDCR=1;
ICDIPTR.ICDIPTR14=0x01010101;
printf("\n*********GICtest********\n");
while
(1){
GPF3.GPF3DAT|=0x1<<4;
mydelay_ms(500);
GPF3.GPF3DAT&=~(0x1<<4);
mydelay_ms(500);
}
return0;
}
本课程设计使用按键进行中断处理,其中按键1控制流水灯显示学号631507030101,按键2控制流水灯显示自定义码81814242闪烁。
六、实验结果及分析(含仿真结果及详细原理分析,是否有创新提高部分)
实验系统流程图:
实验过程:
通过实验得出了ARM中断原理,能够对STM32F芯片的中断资源及其相关中断寄存器进行合理配置,并且掌握了对嵌入式开发板的中断的编程方法,进一步了解了ADS1.2和JAVA环境的集成开发环境及仿真调试驱动程序。
七、实验体会
通过本学期学习嵌入式的课程和进行的嵌入式开发试验课程以及这次的课程设计使我了解了什么是嵌入式,所谓嵌入系统是一种专业的计算机系统一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。
通过这次课程设计使我更加深入的了解嵌入式系统,使课堂中学到关于IRQ中断系统启动程序进行了复习和巩固,回顾了课堂上学习有关嵌入式的知识点,使今后的学习目标更加明确,虽然这学期嵌入式课程已经结束,但是感觉自己还是了解到了嵌入式系统,嵌入式在生活的方方面面都有应用,嵌入式课程也对以后的学习发展和工作有所帮助。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 课程设计 报告