整理嵌入式系统设计实训报告.docx
- 文档编号:8276577
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:16
- 大小:246.22KB
整理嵌入式系统设计实训报告.docx
《整理嵌入式系统设计实训报告.docx》由会员分享,可在线阅读,更多相关《整理嵌入式系统设计实训报告.docx(16页珍藏版)》请在冰豆网上搜索。
整理嵌入式系统设计实训报告
嵌入式系统设计实训报告
编辑整理:
尊敬的读者朋友们:
这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(嵌入式系统设计实训报告)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为嵌入式系统设计实训报告的全部内容。
上海海洋大学
嵌入式系统设计项目实训报告
(2016—2017第_1_学期)
专业:
______计算机科学与技术_________________
实训项目:
____嵌入式应用-—电子相册________
实训时间:
__2016_______年__12___月___26___日
实训成员:
_________孙嘉晨1351127____________
_________周力1351137______________
__________________________________
__________________________________
指导老师:
________池涛_____________________
计算机科学技术系
2015年11月制
一、实训目的
通过电子相册的制作,了解S3C2440芯片的构造,了解外围SDRAM及NANDFLASH的存储结构。
学会运用定时器中断及通过LCD显示图片,加强自身对嵌入式的理解,提升自身的实践能力。
二、实训内容
以S3C2440芯片为核心,通过外围SDRAM及NANDFLASH存储实现照片的存储,结合定时器中断,实现LCD显示图片,完成简易电子相册的设计。
三、实训设备
硬件:
mini2440硬件平台
软件:
bmp2h。
exe软件进行图片转换
CodeWarriorforARMDeveloperSuite软件
四、实训设计方案
(包括项目功能需求分析,方案设计,完成时间规划)
需求分析:
在上世纪末本世纪初,电子相册呈现迅速发展的势头,普及型数码相机的分辨率由200万象素增长到现在的800-1500万象素,价格也由300美元左右下降到现在的120美元左右。
随着数码相机的日益普及,作为一种以数字照片的保存、回放和浏览为核心功能的产品——电子相册自然迎合了消费者的需求。
方案设计:
软件设计:
代码包含2个模块,LCD模块包含两个文件,进行图片的显示与编辑;Timer模块包含6个文件,其中timer.c和timer。
h文件完成定时器的初始化,interrupt。
h和interrupt.c文件完成定时器中断函数的初始化,isrservice。
h和isrservice。
c文件完成定时器中断处理,pic。
c和pic.h等文件是由图片生产的C语言数组文件
硬件方面选择了S3C2440为核心的架构。
基于ARM的微处理器具有低功耗、低成本、高性能等特点,ARM采用RISC(精简指令集计算机)架构和流水线结构,使用了大量的寄存器,具有极高的工作效率。
其中,RISC架构具有如下特点:
固定长度的指令格式,指令归整、简单,基本寻址方式只有2~3种,使用单周期指令,便于流水线操作.因此选择此硬件方案的优势有如下:
(1)系统芯片功能强大,实现的功能多,对于新的多媒体格式支持性好,只需要安装更新的软件;
(2)硬件电路简单,可采用标准电路,不需耗费过多的资源(人力,资金等);
(3)可以在硬件上增加模块,留作二次开发使用,极为方便;
(4)S3C2440是一个比较成熟的芯片,技术积累齐全;
(5)S3C2440支持丰富的存储卡接口。
完成时间规划:
第一天分析实训项目实现过程,完成软件方面内容,编写代码。
第二天实现硬件分析,完成硬件连接,对项目进行测试。
第三天完成实训内容,提交报告。
五、实训项目实现
代码结构逻辑:
S3C2440简介:
Samsung公司推出的32位RISC处理器S3C2440A,为手持设备和一般类型应用提供了低价格、低功耗、高性能小型微控制器的解决方案.S3C2440为手持设备和一般类型应用提供了低价格、低功耗、高性能小型微控制器的解决方案。
采用272脚FPGA封装,内含一个ARM920T内核。
为了降低系统成本,S3C2440A提供了以下丰富的片内外围.
ARM9—S3C2440处理器,ARM920T核由ARM9TDMI、存储管理单元,MMU和高速缓存三部分组成.其中MMU可以管理虚拟内存,高速缓存由独立的16KB地址和16KB数据高速Cache组成。
ARM92T0有两个内部协处理器:
CP14和CP15。
CP14用于调试控制CP15用于存储系统控制以及测试控制.总的资源如下:
・内核工作电压为1.2V,内存工作电压兼容1.8V/2.5V/3。
3V,外围I/O口使用3。
3V,集成16KB的指令缓存和16KB的数据缓存,带MMU(MemoryManagementUnit),支持SRAM和SDRAM等内存。
・LCD控制器接口(最高支持4K色的STN和256K色的TFT)
・4通道DMA控制器
・3通道UART
・2通道SPI接口
・IIC总线接口
・IIS音频编解码数据接口
・AC97音频接口
・MMC/SD存储卡接口
・2通道USB传输接口和1个复用的USB设备接口
・4通道PWM(脉宽调制)定时器和1个看门狗定时器
・8通道10位ADC和一个触控屏接口
・实时时钟
・130个GPIO口和24通道外部中断源接口
・片上PLL时钟发生锁相环
硬件系统框图如下:
SDRAM存储接口原理图:
SDRAM:
同步动态随机存储器,同步是指Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写. SDRAM从发展到现在已经经历了四代,分别是:
第一代SDRSDRAM,第二代DDRSDRAM,第三代DDR2SDRAM,第四代DDR3SDRAM.(显卡上的DDR已经发展到DDR5)第一代SDRAM采用单端(Single-Ended)时钟信号,第二代、第三代与第四代由于工作频率比较快,所以采用可降低干扰的差分时钟信号作为同步时钟。
SDRAM之所以成为DRARM就是因为它要不断进行刷新(Refresh)才能保留住数据,因此它是DRAM最重要的操作。
那么要隔多长时间重复一次刷新,目前公认的标准是,存储体中电容的数据有效保存期上限是64ms(毫秒,1/1000秒),也就是说每一行刷新的循环周期是64ms。
这样刷新速度就是:
行数量/64ms。
我们在看内存规格时,经常会看到4096RefreshCycles/64ms或8192RefreshCycles/64ms的标识,这里的4096与8192就代表这个芯片中每个Bank的行数.刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096行时为15。
625μs(微秒,1/1000毫秒),8192行时就为7。
8125μs.HY57V561620为8192refreshcycles/64ms。
本设计采用32M的HY57V56162来设计SDRAM存储电路,它的单片内存规格为256Mbit4M*16bit*4Banks,即容量为32MB的16位SDRAM。
使用S3C2410的nGCS6片选信号HY57V56162的数据总线与上S3C2410的低16位相连。
操作地址的最小值变为0x00000004,所以将S3C2410的ADDR2-ADDR14顺序与HY57V56162的A0-A12相连。
为了能够正确访问HY57V56162高/低位字节数据,又将HY57V56162的LDQM和UDQM分别与nBE0:
nWBE0:
DQM0和nBE1:
nWBE1:
DQM1相连,HY57V56162的BA0、BA1是SDRAM内部BANK选择地址线,代表着SDRAM内存的最高地址,因为两片HY57V56162组成了64M的内存,也就是说要26根地址线来实现寻址,所以将BA0、BA1分别与S3C2410的ADDR24和ADDR25引脚相连。
原理图如下图所示:
实验代码:
NANDFLASH存储接口原理图:
Nand—flash内存是flash内存的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。
Nand—flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等。
NOR和NAND是现在市场上两种主要的非易失闪存技术。
Intel于1988年首先开发出NORflash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。
紧接着,1989年,东芝公司发表了NANDflash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级.但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。
许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些.而NAND则是高数据存储密度的理想解决方案。
NANDflash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。
NandFlash读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。
NORflash占据了容量为1~16MB闪存市场的大部分,而NANDflash只是用在8~128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、SecureDigital、PCCards和MMC存储卡市场上所占份额最大。
当前NORFLASH价格比较昂贵,考虑到成本问题,本设计采用了64M的K9F1208U0BNandFlash作为介质存储电路,将K9F1208U0B的I/O[0-7]与上S3C2410的数据总线DATA[0-7]相连,实现数据的读写.S3C2410中NandFlash控制器的R/nB与K9F1208U0B的R/nB相连,可以检查nFCE/GPA22、nFRE/GPA20、nFWE/GPA19分别与K9F1208U0B的CLE、nCE、nRE、new是否相连。
分别可以控制K9F1208U0B的地址锁存使能、命令锁存使能、片选使能、读使能和写使能。
原理图如下图所示:
LCD电路模块:
LCD的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的.现在LCD已经替代CRT成为主流,价格也已经下降了很多,并已充分的普及。
LCD制造时选用的控制IC、滤光片和定向膜等配件,与面板的对比度有关,一般而言,对比度能够达到350:
1就足够了,但在专业领域这样的对比度平还不够。
相对CRT显示器轻易达到500:
1甚至更高的对比度而言,只有高档液晶显示器才能达到这样如此程度。
LCD是一种介于固态与液态之间的物质,本身是不能发光的,需借助要额外的光源才行。
最早的液晶显示器只有上下两个灯管,发展到现在,普及型的最低也是四灯,高端的是六灯。
四灯管设计分为三种摆放形式:
一种是四个边各有一个灯管,但缺点是中间会出现黑影,解决的方法就是由上到下四个灯管平排列的方式,最后一种是U型的摆放形式,其实是两灯变相产生的两根灯管。
六灯管设计实际使用的是三根灯管,将三根灯管都弯成U型,然后平行放置,以达到六根灯管的效果。
下2图是S3C2410X芯片内部集成的LCD控制器的外部管脚图和内部方框图,其中内部的寄存器作用如下:
REGBANK有17个可编程寄存器组和256*16的调色板存储器,用来设定LCD控制器。
LCDCDMA是一个专用DMA,自动从帧存储器传输视频数据到LCD控制器,用这个特殊的DMA,视频数据可不经过CPU干涉就显示在屏幕上。
VIDPRCS接受从LCDCDMA来的视频数据,并在将其改变到合适数据格式后,经VD[23:
0]将之送到LCD驱动器,如4/8单扫描或4双扫描显示模式。
TIMEGEN由可编程逻辑组成,以支持不同LCD驱动器的接口时序和速率的不同要求.TIMEGEN产生VFRAME、VLINE、VCLK、VM信号等.数据流描述如下:
FIFO存储器位于LCDCDMA。
当FIFO空或部分空时,LCDCDMA要求从基于突发传输模式的帧存储器中获取数据,存入要显示的图像数据,而这个帧存储器是LCD控制器在RAM中开辟的一片缓冲区。
当这个传输请求被存储控制器中的总线仲裁器接收到后,从系统存储器到内部FIFO就会成功传输4个字。
由于S3C2410内部集成的LCD控制器如上所以设计的外接LCD电路模块如下图:
软件代码:
Main。
c文件:
#include"timer。
h"
#include”isrservice.h"
#include"uart.h”
#include"lcd。
h”
#include”pic。
h”
#include"pic1。
h”
#include”pic2。
h”
#include”pic3。
h”
#include”pic4。
h"
#include"led。
h”
voidIO_Init(void);
unsignedintflag=0;
intMain(void)
{
IO_Init();
while
(1)
{
switch(flag)
{
case1:
Paint_Bmp(pic);
break;
case2:
Paint_Bmp(pic1);
break;
case3:
Paint_Bmp(pic2);
break;
case4:
Paint_Bmp(pic3);
break;
case5:
Paint_Bmp(pic4);
break;
default:
break;
}
}
return0;
}
voidIO_Init(void)
{
Timer0_Init();
Timer0_Interrupt_Init();
Isr_Init();
Lcd_Init();
}
Lcd.c文件:
#include"2440addr。
h"
#include”lcd.h"
#defineLOW21BITS(n)((n)&0x1fffff)//Togetlower21bits
#defineLcd_Enable()rLCDCON1|=1
volatileunsignedshortLCD_BUFFER[240][320];
externunsignedchar__CHS[];
staticvoidLcd_Config(void)
{
rGPCCON=0xaaaa02a9;
rGPDCON=0xaaaaaaaa;
rLCDCON1=(CLKVAL_TFT〈〈8)|(3<〈5)|(BPPMODE_TFT〈〈1);
rLCDCON2=(VBPD<〈24)|(LINEVAL_TFT〈<14)|(VFPD〈<6)|(VSPW);
rLCDCON3=(HBPD〈<19)|(HOZVAL_TFT〈〈8)|(HFPD);
rLCDCON4=(HSPW);
rLCDCON5=(FRM565_TFT<<11)|(INVVCLK_TFT〈<10)|(INVVLINE_TFT〈<9)|(INVVFRAME_TFT〈〈8)|(HWSWP);
rLCDSADDR1=(((unsignedint)LCD_BUFFER>〉22)<<21)|LOW21BITS((unsignedint)LCD_BUFFER>〉1);
rLCDSADDR2=LOW21BITS(((unsignedint)LCD_BUFFER+(LCD_YSIZE_TFT*LCD_XSIZE_TFT*2))>〉1);
rLCDSADDR3=(0<〈11)|(LCD_XSIZE_TFT/1);
}
voidLcd_PowerEnable(intpowerEnable)
{
rGPGCON=rGPGCON&(~(3〈〈8))|(3〈<8);
rGPGDAT=rGPGDAT|(1〈<4);
rLCDCON5=rLCDCON5&(~(1〈<3))|(powerEnable〈<3);
}
voidPutPixel(unsignedintx,unsignedinty,unsignedshortc)
{
if((x〈320)&&(y<240))
LCD_BUFFER[(y)][(x)]=c;
}
voidPaint_Bmp(constunsignedcharbmp[])
{
intx,y;
unsignedshortc;
intp=0;
for(y=0;y<240;y++)
{
for(x=0;x〈320;x++)
{
c=bmp[p+1]|(bmp[p]<〈8);
if((x<320)&&(y<240))
LCD_BUFFER[y][x]=c;
p=p+2;
}
}
}
voidLcd_Init(void)
{
Lcd_Config();
Lcd_Enable();
Lcd_PowerEnable
(1);
}
Lcd.h文件:
#ifndef__LCD_H__
#define__LCD_H__
#defineMVAL(0)
#defineINVVDEN
(1)//0=normal1=inverted
#defineHWSWP
(1)//Halfwordswapcontrol
#definePNRMODE(3)//设置为TFT屏
#defineBPPMODE(12)//设置为16bpp模式
#defineLCD_XSIZE_TFT(320)
#defineLCD_YSIZE_TFT(240)
#defineCLKVAL_TFT(7)
#defineVBPD(14)
#defineVFPD(11)
#defineVSPW
(2)
#defineHBPD(37)
#defineHFPD(19)
#defineHSPW(29)
#defineHOZVAL_TFT(320—1)
#defineLINEVAL_TFT(240—1)
#defineBPPMODE_TFT(12)
#defineFRM565_TFT
(1)
#defineINVVCLK_TFT
(1)
#defineINVVLINE_TFT
(1)
#defineINVVFRAME_TFT
(1)
#defineINVVD_TFT(0)
#defineINVVDEN_TFT(0)
#definePWREN_TFT(0)
externvoidLcd_Init(void);
externvoidLcd_PowerEnable(intpowerEnable);
externvoidPaint_Bmp(constunsignedcharbmp[]);
#endif
Timer。
h文件:
#ifndef_TIMER0_H_
#define_TIMER0_H_
voidTimer0_Init(void);
#endif
Timer。
c文件:
#include"timer。
h”
#include"2440addr.h”
voidTimer0_Init(void)
{
rTCFG0&=~(0xff);
rTCFG0|=99;
rTCFG1&=~(0xf);
rTCFG1|=0X02;
rTCNTB0=62500;//1s中断一次
rTCON|=(1<<1);//手动更新
rTCON=0x09;//自动加载,清除手动更新位,启动定时器
}
Interrupt.c文件:
#include”2440addr.h”
voidTimer0_Interrupt_Init(void)
{
rINTMSK&=~(1〈<10);
}
Interrupt。
h文件:
#ifndef__INTERRUPT_H__
#define__INTERRUPT_H__
voidTimer0_Interrupt_Init(void);
#endif
Isrservice。
c文件:
#include”config.h”
#include"isrservice.h”
externunsignedintflag;
voidIsr_Init(void)
{
pISR_TIMER0=(U32)Timer0_Isr;
}
void__irqTimer0_Isr(void)
{
flag++;
flag%=5;
rSRCPND|=1<〈10;
rINTPND|=1〈〈10;
}
Isrservice。
h文件:
#ifndef__ISRSERVICE_h__
#define__ISRSERVICE_h__
voidIsr_Init(void);
void__irqTimer0_Isr(void);
#endif
六、实训小结
经历了几天的实训,通过老师的帮助和网上的资料查找,我们终于完成了这次实训项目,通过对arm的使用让我们领略到了arm的强大功能,也让我们知道了arm的复杂性以及我在arm方面知识的不足.这也激发了我们对arm的学习兴趣,相信这次实训项目的成功,对将来我们在arm方面的学习也有巨大的帮助.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 整理 嵌入式 系统 设计 报告