整理嵌入式系统设计实训报告.docx

上传人:b****5 文档编号:8276577 上传时间:2023-01-30 格式:DOCX 页数:16 大小:246.22KB
下载 相关 举报
整理嵌入式系统设计实训报告.docx_第1页
第1页 / 共16页
整理嵌入式系统设计实训报告.docx_第2页
第2页 / 共16页
整理嵌入式系统设计实训报告.docx_第3页
第3页 / 共16页
整理嵌入式系统设计实训报告.docx_第4页
第4页 / 共16页
整理嵌入式系统设计实训报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

整理嵌入式系统设计实训报告.docx

《整理嵌入式系统设计实训报告.docx》由会员分享,可在线阅读,更多相关《整理嵌入式系统设计实训报告.docx(16页珍藏版)》请在冰豆网上搜索。

整理嵌入式系统设计实训报告.docx

整理嵌入式系统设计实训报告

嵌入式系统设计实训报告

编辑整理:

 

尊敬的读者朋友们:

这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(嵌入式系统设计实训报告)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为嵌入式系统设计实训报告的全部内容。

上海海洋大学

嵌入式系统设计项目实训报告

(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方面的学习也有巨大的帮助.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1