嵌入式实验报告.docx

上传人:b****7 文档编号:16430931 上传时间:2023-07-13 格式:DOCX 页数:20 大小:1.88MB
下载 相关 举报
嵌入式实验报告.docx_第1页
第1页 / 共20页
嵌入式实验报告.docx_第2页
第2页 / 共20页
嵌入式实验报告.docx_第3页
第3页 / 共20页
嵌入式实验报告.docx_第4页
第4页 / 共20页
嵌入式实验报告.docx_第5页
第5页 / 共20页
嵌入式实验报告.docx_第6页
第6页 / 共20页
嵌入式实验报告.docx_第7页
第7页 / 共20页
嵌入式实验报告.docx_第8页
第8页 / 共20页
嵌入式实验报告.docx_第9页
第9页 / 共20页
嵌入式实验报告.docx_第10页
第10页 / 共20页
嵌入式实验报告.docx_第11页
第11页 / 共20页
嵌入式实验报告.docx_第12页
第12页 / 共20页
嵌入式实验报告.docx_第13页
第13页 / 共20页
嵌入式实验报告.docx_第14页
第14页 / 共20页
嵌入式实验报告.docx_第15页
第15页 / 共20页
嵌入式实验报告.docx_第16页
第16页 / 共20页
嵌入式实验报告.docx_第17页
第17页 / 共20页
嵌入式实验报告.docx_第18页
第18页 / 共20页
嵌入式实验报告.docx_第19页
第19页 / 共20页
嵌入式实验报告.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式实验报告.docx

《嵌入式实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式实验报告.docx(20页珍藏版)》请在冰点文库上搜索。

嵌入式实验报告.docx

嵌入式实验报告

嵌入式系统设计实验

实验报告

 

 

2016.4

一使用μVision集成开发环境——C源代码

1实验步骤

新建一个嵌入式项目主要分为以下几个步骤:

•在菜单栏点击Project,选择新建工程,在打开的对话框中为项目选择所属文件夹和名称,再保存即可。

•在紧接着弹出的selectdevice窗口中选择目标(或使用的)微控制器芯片的型号。

之后软件会自动将相应的启动代码复制到项目所属的文件夹之中。

•按照使用情况设定属性。

•为项目添加文件。

这里我们加入新建的C源代码。

选择File–New菜单创建一个新的源文件。

在编辑器窗口中,我们可以为新建源文件输入源代码。

μVision支持根据文件后名的语法彩色高亮功能。

为了尽快使用该功能,我们在输入源代码前先将空文件保存。

选择File工具栏的保存按钮或使用File–Save菜单,将源文件保存。

•在左侧的文件列表右键点击SourceGroup1,在弹出菜单中选择AddFiletoGroup,按照提示一步步将新建源代码文件添加到当前工程中。

2C源代码

#defineN6

intmain(void)

{

unsignedcharc[6]={1,2,3,4,5,6};

unsignedcharx[6]={4,8,9,3,5,1};

unsignedchari,f;

for(i=0,f=0;i

{

f=f+c[i]*x[i];

}

return0;

}

3调试与运行

从图一可以看到,LDSTM命令执行之前,R0地址已经安排好了0-6,此时C数组内还没有赋值,所以其各个元素仍然是任意值。

但是到第二步,可以看到,C数组已经完成赋值。

图三这一步刚进入循环体,此时f还是初值0x00,i为1。

图四循环已经运行一遍,计算得f=f(=0)+c[0]*x[0]=4。

循环运行结束时,i=5,f=0x54.

二使用μVision集成开发环境——汇编源代码

1实验步骤

与C语言的工程步骤不同的是,新建文件以.s为后缀。

另外,在新建项目这一步不需要添加启动代码。

2实验代码

AREAFIR,CODE,READONLY

CODE32

ENTRY

MOVR0,#0

MOVR8,#0

ADRR2,N

LDRR1,[R2]

MOVR2,#0

ADRR3,C

ADRR5,X

LOOP

LDRR4,[R3,R8]

LDRR6,[R5,R8]

MULR9,R4,R6

ADDR2,R2,R9

ADDR8,R8,#4

ADDR0,R0,#1

CMPR0,R1

BLTLOOP

B.

ALIGN

NDCD&0A

CDCD&01,&02,&03,&04,&05,&06,&07,&08,&09,&0A

XDCD&01,&02,&03,&04,&05,&06,&07,&08,&09,&0A

END

3调试与运行

三基于ARM处理器的I/O接口实验——流水灯

1实验步骤

新建工程等步骤同实验一,在SelectDevice对话框选择NUC710芯片。

2实验代码

#defineWriteReg(Address,Value)*(unsignedintvolatile*)(Address)=Value

#defineuintunsignedint

#defineREG_EXT0CON0xFFF01018

#defineEBILED_ADDRESS0x78000000

voidEBILedSet(uintValue);

voidDelay(uintt);

intmain()

{

uinti;

WriteReg(REG_EXT0CON,0xF0078003);

while

(1)

{

for(i=0;i<8;i++)

{

EBILedSet(0x1<

Delay(10000000);

}

}

return0;

}

voidDelay(uintt)

{

do

{

t--;

}while(t);

}

voidEBILedSet(uintValue)

{

WriteReg(EBILED_ADDRESS,~Value);

}

3调试与结果

通过对0x01的移位操作控制不同led灯亮。

部分时刻如下图所示:

四基于ARM处理器的I/O接口实验——键盘

1实验步骤

同实验三。

2实验代码

#defineu32unsignedint

#defineREG_GPIO_CFG20xFFF83020

#defineREG_AIC_SCR290xFFF82074

#defineREG_AIC_MECR0xFFF82120

#defineREG_KPICONF0xFFF88000

#defineREG_KPISTATUS0xFFF8800C

#defineEBILED_ADDRESS0x78000000

#defineREG_EXT0CON0xFFF01018

#defineEBI_EXT0_VALUE0xF0078003

#defineWriteReg(Address,Value)*(unsignedintvolatile*)(Address)=Value

#defineReadReg(Address)*(unsignedintvolatile*)(Address)

__irqvoidIRQ_Handler(void)

{

u32KeyValue,temp,temp2;

temp=ReadReg(REG_KPISTATUS);

temp&=0x0000000f;

if(temp>0xB)

{

KeyValue=temp-0xC;

}

elseif(temp<0x4)

{

KeyValue=temp+0xC;

}

else

{

KeyValue=temp;

}

WriteReg(EBILED_ADDRESS,~KeyValue);

}

voidKPIInit(void);

intmain(void)

{

WriteReg(REG_EXT0CON,EBI_EXT0_VALUE);

KPIInit();

while

(1);

return0;

}

voidKPIInit(void)

{

WriteReg(REG_GPIO_CFG2,0x000aaaaa);

WriteReg(REG_AIC_SCR29,0x00000045);

WriteReg(REG_AIC_MECR,0x20000000);

WriteReg(REG_KPICONF,0x00142fff);

}

3调试与结果

由程序可以分析不同按键对应的二进制码值,进而分析得到对应LED灯的亮灭情况。

假设从键盘矩阵左上角的第一个按键从左到右,自上而下编号为:

0x00~0x0F,则其对应码值为:

(码值为一对应的LED灯亮)

0x00

0x01

0x02

0x03

0x04

0x05

0x06

0x07

00001100

00001101

00001110

00001111

00001000

00001001

00001010

00001011

0x08

0x09

0x0A

0x0B

0x0C

0x0D

0x0E

0x0F

00000100

00000101

00000110

00000111

00000000

00000001

00000010

00000011

比如按下0x00,0x04,0x05,0x06,0x08几个按键,对比上表可知分别是LED3、4,LED4,LED1、4,LED2、4和LED3亮,分别如下图所示:

五基于ARM处理器的I/O接口实验——LCD显示

1实验步骤

实验步骤与“LED灯闪烁实验”类似,但有两个不同点:

在步骤3中不需要新建源文件,直接将“LCD显示实验”提供的实验文件拷贝到实验目录的新建文件夹LCD中;步骤4中将LCD文件夹中的所有文件添加到工程目录中。

除此之外,需要利用专门的工具将待显示的图片转化为纯数据格式。

2实验源码

LCD.c

#include/*WinbondW90P710definitions*/

#include"GLCD.h"

#defineLED_ALL0xff

externunsignedcharBackground[];

intmain(void){/*MainFunction*/

Reg8(0x78000000)=LED_ALL;/*TurnoffallLEDs*/

GLCD_bitmap(0,0,320,240,Background);

GLCD_init();

}

GLCD.c

#include/*WinbondW90P710definitions*/

#include/*WinbondW90P710LCDdefinitions*/

#include

#include

#ifndef_GLCD_H

#define_GLCD_H

#defineDELAY_2N4

/*----------------------GraphicLCDsizedefinitions------------------------*/

#defineWIDTH320/*ScreenWidth(inpixels)*/

#defineHEIGHT240/*ScreenHight(inpixels)*/

#defineBPP16/*Bitsperpixel*/

#defineBYPP((BPP+7)/8)/*Bytesperpixel*/

#defineFB_WIDTH(3*WIDTH)/*Framebufferwidth*/

#defineFB_HEIGHT240/*Framebufferheight*/

#defineFB_SIZE(FB_WIDTH*FB_HEIGHT*BYPP)/*Framebuffersize(inbytes)*/

/*---------------GraphicLCDinterfacehardwaredefinitions-----------------*/

/*----------------------------Globalvariables------------------------------*/

unsignedchar*fb_start;/*Startaddressofframebuffer*/

/************************Localauxiliaryfunctions***************************/

/*******************************************************************************

*Delayinwhileloopcycles*

*Parameter:

cnt:

numberofwhilecyclestodelay*嵌入式系统设计

*Return:

*

*******************************************************************************/

staticvoiddelay(intcnt){

cnt<<=DELAY_2N;

while(cnt--);

}

/*******************************************************************************

*Waitwhilecontrolofdisplayisbusy*

*Parameter:

*

*Return:

*

*******************************************************************************/

staticvoidwait_while_busy(void){

Reg32(REG_USI_CNTRL)|=0x01;

while(Reg32(REG_USI_CNTRL)&0x01);

}

/************************Exportedfunctions**********************************/

/*******************************************************************************

*InitializetheGraphicLCDcontroller*

*Parameter:

*

*Return:

*

*******************************************************************************/

voidGLCD_init(void){

//unsignedintp;

Reg32(REG_GPIO_CFG6)=0x00555555;/*ConfigureLCDGPIO(GPIO30-41)*/

/*ConfigureLCDcontrollercontrolregister*/

Reg32(REG_LCD_LCDCON)|=LCD_LCDCON_LCDTFT|

LCD_LCDCON_LCDBUS_24|

LCD_LCDCON_CASIOSHOWTYPE_R1G1B1R2G2B2|

LCD_LCDCON_LCDTFTTYPE|

LCD_LCDCON_RGBSEQ_RBG|

LCD_LCDCON_BPP_16;

//Reg32(REG_LCD_LCDCON)|=0x000B0C05;

delay(200);

/*Configuredummydisplaycolorpatternregister*/

Reg32(REG_LCD_DDISPCP)=0;

/*Configurevaliddisplaywindowstartingcoordinate*/

Reg32(REG_LCD_DISPWINS)=0;

/*Configurevaliddisplaywindowendingcoordinate*/

Reg32(REG_LCD_DISPWINE)=(FB_HEIGHT<<16)|FB_WIDTH;

/*ConfigureLCDtiminggeneration*/

Reg32(REG_LCD_LCDTCON1)=0x0003B166;

Reg32(REG_LCD_LCDTCON2)=0x03BF00F1;

Reg32(REG_LCD_LCDTCON3)=0x00105401;

Reg32(REG_LCD_LCDTCON4)=0x00020101;

Reg32(REG_LCD_LCDTCON5)=0x0000000E;

/*ConfigureLCDFIFO1transferparameters*/

Reg32(REG_LCD_FIFO1PRM)=LCD_FIFO1PRM_F1BURSTY_16DATABURST|

LCD_FIFO1PRM_F1TRANSZ_4BYTE;//0xa

/*FIFO1transferdatacountregister*/

Reg32(REG_LCD_F1DREQCNT)=((FB_WIDTH<<16)>>1)|FB_HEIGHT;嵌入式系统设计

/*FIFO1realcolumncountregister*/

Reg32(REG_LCD_FIFO1RELACOLCNT)=FB_WIDTH>>1;

/*FIFO1startaddressregister*/

Reg32(REG_LCD_F1SADDR)=(unsignedlong)fb_start;

/*ConfigureLCDFIFOscontrollerregisterandtiggertheengine*/

Reg32(REG_LCD_FIFOCON)=LCD_FIFOCON_FIFOEN_FIFO1;

/*LCDControllerEnable*/

Reg32(REG_LCD_LCDCON)|=LCD_LCDCON_LCDCEN;

/*EnableUSIpinsforcommunicationwithdisplay*/

Reg32(REG_GPIO_CFG5)&=0xFFF00FFF;

Reg32(REG_GPIO_CFG5)|=0x000AA000;

/*Setupcommunicationparameters*/

Reg32(REG_USI_DIVIDER)=0x27;/*SCLK=PCLK/80=1MHz*/

Reg32(REG_USI_SSR)=0;/*CSactivelow*/

Reg32(REG_USI_CNTRL)=0x84;/*16bits;Txfall,Rxriseedge*/

Reg32(REG_USI_SSR)|=0x01;/*ActivateCS0*/

Reg32(REG_USI_Tx0)=0x0596;/*SetregisterR5*/

wait_while_busy();

Reg32(REG_USI_SSR)&=0xFE;/*DeactivateCS0*/

delay

(1);

Reg32(REG_USI_SSR)|=0x01;/*ActivateCS0*/

Reg32(REG_USI_Tx0)=0x0408;/*SetregisterR4*/

wait_while_busy();

Reg32(REG_USI_SSR)&=0xFE;/*DeactivateCS0*/

delay

(1);

Reg32(REG_USI_SSR)|=0x01;/*ActivateCS0*/

Reg32(REG_USI_Tx0)=0x07F1;/*SetregisterR7*/

wait_while_busy();

Reg32(REG_USI_SSR)&=0xFE;/*DeactivateCS0*/

delay

(1);

Reg32(REG_USI_SSR)|=0x01;/*ActivateCS0*/

Reg32(REG_USI_Tx0)=0x08C0;/*SetregisterR8*/

wait_while_busy();

Reg32(REG_USI_SSR)&=0xFE;/*DeactivateCS0*/

delay

(1);

Reg32(REG_USI_SSR)|=0x01;/*ActivateCS0*/

Reg32(REG_USI_Tx0)=0x0616;/*SetregisterR6*/

wait_while_busy();

Reg32(REG_USI_SSR)&=0xFE;/*DeactivateCS0*/

delay

(1);

Reg32(REG_USI_SSR)|=0x01;/*ActivateCS0*/

Reg32(REG_USI_Tx0)=0x05D7;/*SetregisterR5*/

wait_while_busy();

Reg32(REG_USI_SSR)&=0xFE;/*DeactivateCS0*/

}

voidGLCD_bitmap(unsignedintx,unsignedinty,unsignedintw,unsignedinth,unsignedchar*bitmap){

unsignedinti,j;

unsignedchar*disp_start;

unsignedchar*disp_ptr0;

unsignedchar*disp_ptr1;

unsignedchar*disp_ptr2;

unsignedchar*bitmap_ptr;

unsignedcharpixel;

fb_start=malloc(FB_SIZE);/*InitializeFrameBuffer*/

memset(fb_start,0x00,FB_SIZE);/*ClearFrameBuffer*/

disp_start=fb_start+(x+y*WIDTH)*BYPP;嵌入式系统设计

disp_ptr0=disp_start;

disp_ptr1=disp_start+WIDTH*HEIGHT*BYPP;

disp_ptr2=disp_start+2*WIDTH*HEIGHT*BYPP;

bitmap_ptr=bitmap;

for(j=0;j

for(i=0;i

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2