1号ARM实验报告.docx

上传人:b****6 文档编号:10192070 上传时间:2023-02-09 格式:DOCX 页数:53 大小:709.42KB
下载 相关 举报
1号ARM实验报告.docx_第1页
第1页 / 共53页
1号ARM实验报告.docx_第2页
第2页 / 共53页
1号ARM实验报告.docx_第3页
第3页 / 共53页
1号ARM实验报告.docx_第4页
第4页 / 共53页
1号ARM实验报告.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

1号ARM实验报告.docx

《1号ARM实验报告.docx》由会员分享,可在线阅读,更多相关《1号ARM实验报告.docx(53页珍藏版)》请在冰豆网上搜索。

1号ARM实验报告.docx

1号ARM实验报告

电子科技大学成都学院

实验报告册

 

课程名称:

ARM开发实践

姓名:

学号:

院系:

微电子技术系

专业:

电子科学与技术

教师:

 

2014年6月1日

实验一:

S3C2440IIC控制

1、实验目的:

本次实验的主要目的是通过S3C2440的IIC接口,达到了解IIC传输和接收数据的原理,同时掌握IIC通信协议。

二、实验原理和内容:

内容:

是通过S3C2440的IIC接口,向EEPROM芯片AT24C02A写入8个数据,然后再将所写的数据读出,并显示在串口调试工具上。

原理:

IIC(Inter-IntegratedCircuit,I2C)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微处理器及其外围设备,它的最主要优点是简单和有效。

它只需要数据线SDA和时钟线SCL,就能够实现CPU与被控IC之间、IC与IC之间进行双向传送。

S3C2440ARISC微处理器可以支持一个多主控IIC总线串行接口。

一条专用串行数据线(SDA)和一条专用串行时钟线(SCL)传递连接到IIC总线的总线主控和外设之间的信息。

SDA和SCL线都为双向的。

多主控IIC总线模式中,多个S3C2440ARISC微处理器可以发送或接收串行数据来自或到从设备。

主机S3C2440A可以通过IIC总线启动和结束数据传输。

S3C2440A中的IIC总线是使用标准总线仲裁步骤。

为了控制多主控IIC总线操作,必须写入值到以下寄存器中:

–多主控IIC总线控制寄存器,IICCON

–多主控IIC总线控制/状态寄存器,IICSTAT

–多主控IIC总线Tx/Rx数据移位寄存器,IICDS

–多主控IIC总线地址寄存器,IICADD

当释放了IIC总线时,SDA和SCL线应该都保持为高电平。

一个高到低SDA的变化可以启动一个起始条件。

SCL稳定保持在高电平时的一个低到高SDA的变化可以启动一个停止条件。

起始和停止条件通常由主设备产生。

第一个数据字节为7位地址值,其在启动起始条件后放到总线上,可以确定出主设备要选择的从设备。

第8位是决定传输方向(读或写)。

每个放到SDA线上的字节都应该总共为8位。

字节可以在总线传输操作期间无限制的发送或接收。

数据通常从最高有效位(MSB)开始始发送,并且每个字节应该立即通过应答(ACK)位跟上。

IIC总线接口

S3C2440A的IIC总线接口有4种工作模式:

–主机发送模式

–主机接收模式

–从机发送模式

–从机接收模式

起始和停止条件

当IIC总线接口不活动时,其通常在从机模式。

换句话说,该接口在从SDA线上检测到起始条件(当SCL时钟信号为高时的一个高到低SDA的变化可以启动一个起始条件)之前应该处于从机模式。

当接口状态被改为主机模式时,可以起始发送数据到SDA上并且产生SCL信号。

起始条件可以传输1字节串行数据到SDA线上,而停止条件可以结束数据的传输。

停止条件是在当SCL为高时的SDA线由低到高的变化。

起始和停止条件总由主机产生。

当产生了一个起始条件时IIC总线变为忙。

停止条件将使得IIC总线空闲。

当主机发起一个起始条件时,其应该送出一个从机地址来通知从设备。

地址字段的1字节由7位地址和1位传输方向标志(表现为读或写)组成。

如果位[8]为0,其表示一个写操作(发送操作);如果位[8]为1,其表示一个数据读取的请求(接收操作)。

主机将通过发送一个停止条件来完成传输操作。

如果主机希望持续发生数据到总线上,其应该在同一个从地址产生再一个起始条件。

这样就可以执行各种格式的读写操作。

图三起始和停止条件

数据传输格式

放置到SDA线上的每个字节应该以8位为长度。

每次传输字节可以无限制的发送。

起始条件随后的第一个字节应该包含地址字段。

当IIC总线工作在主机模式时可以由主机发送该地址字段。

每个字节都应该跟随一个应答(ACK)位。

总是最先发送串行数据和地址的MSB。

图四IIC总线接口数据格式

图五IIC总线上的数据传输

发送ACK信号

为了完成一次单字节传输操作,接收器应该发送一个ACK位给发送器。

ACK脉冲应该发生在SCL线的第9个时钟。

前8个时钟是提供给单字节传输的。

主机需要应该产生时钟脉冲来发送ACK位。

当发送器收到ACK时钟脉冲时应该通过拉高SDA线来释放SDA线。

当接收器在ACK时钟脉冲期间也应该驱动SDA线为低来在第9个脉冲的高电平时期期间保持SDA为低。

ACK位发送功能可以由软件(IICSTAT)使能或禁止。

然而,需要SCL的第9个时钟上的ACK脉冲来完成单字节的传输操作。

图六IIC总线上的应答

读写操作

发送模式中当发送了数据时,在IIC总线数据移位(IICDS)寄存器收到新数据之前IIC总线接口将会一直等待。

在新数据写入到寄存器之前,SCL线将会保持为低,然后在其写入后释放。

S3C2440A应该等待中断来确定当前数据发送的完成。

在CPU收到中断请求后,需要再次写一个新数据到IICDS寄存器中。

接收模式中当收到了数据时,在读取IICDS寄存器前IIC接口将会一直等待。

在新数据读出前,SCL线将会保持为低,然后在其读取后释放。

S3C2440A应该等待中断来确定当前数据接收的完成。

在CPU收到中断请求后,需要从IICDS寄存器中读取数据。

总线仲裁步骤

发生在SDA线上的仲裁是预防总线上两个主机的竞争。

如果SDA为高电平的主机检测到另一个主机的SDA激活了低电平,其将不会启动数据传输,这是因为总线上的当前电平与其(前者)拥有的电平不符合。

将扩展仲裁步骤直到SDA线变为高。

然而,当主机同时拉低SDA线时,每个主机都应该判断是否分配了主控给自己。

为了判断则每个主机应该检测地址位。

当每个主机都产生的从地址时,它们也应该检测SDA线上的地址位,这是因为SDA线个更倾向于获得低电平而不是保持为高电平。

假定一个主机产生了一个低电平作为第一个地址位,同时其它主机保持为高。

在这种情况中,主机都将检测到总线上的低电平,因为低电平状态在电平上优先于高电平状态。

当发生这种情况时,产生低电平(作为地址的第一位)的主机将得到主控,同时产生高电平(作为地址的第一位)的主机应该退出主控。

如果主机都产生低电平作为地址的第一位,它们应该继续通过第二个地址位仲裁。

这种仲裁将持续到最后地址位的结束。

中止条件

如果从接收器不能应答从地址的确认,其应该保持SDA线的电平为高。

这种情况中,主机应该产生一个停止条件并且中止传输。

如果主机接收器收到了传输中止的影响,其应该通过取消来自从机收到的最后数据字节后ACK的产生来指示从发送操作的结束。

从发送器应该随后释放SDA来允许主机产生停止条件。

三、实验步骤:

1、首先在ADS上建立一个工程,工程名为IIC,然后选择一个合适的路径存放。

2、将光盘中TQ2440测试程序里面inc和src文件夹下的2440addr.h、2440lib.h、2440slib.h、def.h、Nand.h、Option.h、2440addr.inc、Memcfg.inc、Option.inc、2440init.s、2440slib.s、2440lib.c、nand.c这13个文件依次拷贝到刚才所建工程的文件夹下。

3、新建一个源文件,命名为IIC.c,存放到工程名为IIC的文件夹下。

4、在IIC.mcp下创建一个分组,取名为startcode,然后将前面拷贝的3个文件2440init.s、2440slib.s、nand.c依次添加到以startcode命名的文件夹下。

5、将IIC.c添加到工程里面去。

6、配置DebugRelSettings。

7、在IIC.c里面进行程序的书写。

8、编译所写程序。

9、打开串口调试工具,将波特率设为115200。

10、将开发板、仿真器、串口线和电脑正确连接,打开Hjtag软件,调试程序。

四、实验结果:

1、写入数据是收到了写入的数据,说明程序进行了写内存的操作

2、再将数据读出,在串口调试工具中可以看到,接收数据里面会接收到程序发过来的字节,这些字节都是我们最开始写进去的数据。

五、实验总结:

通过本次试验,更深一步了解IIC传输和接收数据的原理,同时牢固地掌握IIC通信协议,以及串口的工作原理,并且了解了EEPROM的存取规则和原理

六、附录:

//wordAddr对应的是adress,*buffer对应IIC_buffer,sizeofdate对应length

voidwr24c02a(unsignedcharwordAddr,unsignedchar*buffer,intsizeofdate)

{

inti;

flag=1;//应答信号

//先发送从设备地址信息

rIICDS=devAddr;//从设备地址:

devAddr=0xa0;

rIICCON&=~0x10;//清中断标志

rIICSTAT=0xf0;//主设备发送模式

//当地址匹配时,发送应答

while(flag==1)//等待从设备应答,IIC中断一次,表示应答

Delay(100);

//接受设备内存地址信息

flag=1;

rIICDS=wordAddr;//写入从设备内存地址

rIICCON&=~0x10;//清中断标志

//再次应答

while(flag==1)//等待从设备应答,IIC中断一次,表示应答

Delay(100);

for(i=0;i

{

flag=1;

rIICDS=*(buffer+i);

rIICCON&=~0x10;//清中断标志

//应答

while(flag==1)//等待从设备应答,IIC中断一次,表示应答

Delay(100);

}

rIICSTAT=0xd0;//发送stop命令,接收该次通信

rIICCON=0xe0;//为下次IIC通信作准备

Delay(100);//等待

}

voidrd24c02a(unsignedcharwordAddr,unsignedchar*buffer,intsizeofdate)

{

inti;

unsignedchartemp;

flag=1;

//接收带有写命令的从设备地址信息

rIICDS=devAddr;//从设备地址:

devAddr=0xa0;

rIICCON&=~0x10;//清中断标志

rIICSTAT=0xf0;//主设备发送模式

//应答

while(flag==1)//等待从设备应答,IIC中断一次,表示应答

Delay(100);

//从设备内存地址信息

flag=1;

rIICDS=wordAddr;//写入从设备内存地址

rIICCON&=~0x10;//清中断标志

//应答

while(flag==1)//等待从设备应答,IIC中断一次,表示应答

Delay(100);

flag=1;

rIICDS=devAddr;

rIICCON&=~0x10;//清中断标志

rIICSTAT=0xb0;//主设备接收模式

//应答

while(flag==1)//等待从设备应答,IIC中断一次,表示应答

Delay(100);

flag=1;

temp=rIICDS;

rIICCON&=~0x10;//清中断标志

//应答

while(flag==1)//等待从设备应答,IIC中断一次,表示应答

Delay(100);

//连续读

for(i=0;i

{

flag=1;

if(i==sizeofdate-1)//若是最后一个数据

rIICCON&=~0x80;

*(buffer+i)=rIICDS;

rIICCON&=~0x10;//清中断标志

//应答

while(flag==1)//等待从设备应答,IIC中断一次,表示应答

Delay(100);

}

rIICSTAT=0x90;//结束该次通信

rIICCON=0xe0;

Delay(100);

}

 

实验二:

S3C2440图形显示控制

一、实验目的:

本次实验的主要目的是通过S3C2440来驱动外部3.5寸TFT屏,并且在屏上显示一个圆,矩形,三角形,菱形。

屏大小是320X240,所设置的颜色为24位真彩色模式。

同时掌握TFT型LCD屏初始化寄存器的配置方法,以及屏显示的颜色控制方法。

二、实验原理和内容:

内容:

人机交互是嵌入式系统必须具有的功能。

比较简单的人机交互有按键、LED、蜂鸣器,稍微复杂的有7段数码管和点阵。

但如今这些都不能满足人们的需求了,所以又出现了LCD和触摸屏技术。

s3c2440具有LCD和触摸屏接口,可以很好的连接LCD和触摸屏。

本次实验主要介绍TFT型LCD的用法。

原理:

3C2440A中的LCD控制器由从位于系统存储器的视频缓冲区到外部LCD驱动器的转移LCD图像数据逻辑组成。

LCD控制器支持LCD的单色、2位每像素(4阶灰度)或4位每像素(16阶灰度)模式,通过使用基于时间的抖动算法和帧频控制(FRC)方法,其可以连接到8位每像素(256色)的彩色LCD面板和连接到12位每像素(4096色)的STNLCD。

其支持1位每像素、2位每像素、4位每像素和8位每像素的调色TFT彩色LCD面板连接,以及16位每像素和24位每像素的无调色真彩显示。

可以编程LCD控制器来支持不同涉及屏幕水平和垂直像素数、数据接口的数据线宽度、接口时序和刷新率的需要。

特性:

TFTLCD显示:

–支持TFT的1、2、4、8bpp(位每像素)调色显示

–支持彩色TFT的16、24bpp无调色显示

–支持24位每像素模式下最大16M色TFT

–支持多种屏幕尺寸

典型实际屏幕尺寸:

640×480、320×240、160×160等,最大虚拟屏幕尺寸为4M字节,64K色模式最大虚拟屏幕尺寸:

2048×1024等。

S3C2440ALCD控制器是用于传输视频数据和产生必要的控制信号,如VFRAME、VLINE、VCLK、VM等等。

除控制信号外,S3C2440A还有视频数据的数据端口,如图二所示的VD[23:

0]。

LCD控制器包括REGBANK、LCDCDMA、VIDPRCS、TIMEGEN和LPC3600(见上图)。

REGBANK有17个可编程寄存器集和用于配制LCD控制器的256×16个调色存储器。

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请求基于突发存储器传输模式(连续4字(16字节)每单次突发请求的存储器刷新,无需总线传输期间随着总线主控到其它总线主机)从帧存储器刷新数据。

当存储器控制器中的总线仲裁器同意了传输请求,将会从系统存储器到内部FIFO传输4个连续字数据。

FIFO分别由12字FIFOL和16字FIFOH组成,总计28字大小。

S3C2440A有2个FIFO来支持双扫描显示模式。

在单扫描模式情况中,只能使用FIFO的一个(FIFOH)。

TFTLCD控制器操作

TIMEGEN产生控制信号给LCD驱动器,例如VSYNC、HSYNC、VCLK、VDEN和LEND信号。

这些控制信号与REGBANK中LCDCON1/2/3/4/5寄存器的配制有极大的关系。

基于REGBANK中的LCD控制寄存器的这些可编程配制,TIMEGEN可以产生可编程控制信号适合支持多种不同LCD驱动器的类型。

发出VSYNC信号来引起LCD的行指针重新从显示的顶处开始。

VSYNC和HSYNC脉冲的产生取决于LCDCON2/3寄存器中HOZVAL字段和LINEVAL字段的配制。

HOZVAL和LINEVAL可以按照下列等式由LCD面板大小决定:

HOZVAL=(水平显示大小)-1

LINEVAL=(垂直显示大小)-1

VCLK信号的频率取决于LCDCON1寄存器中的CLKVAL字段。

表15-3定义了VCLK和CLKVAL之间的关系。

CLKVAL的最小值为0。

VCLK(Hz)=HCLK/[(CLKVAL+1)×2]

帧频即为VSYNC信号频率。

帧频与LCDCON1和LCDCON2/3/4寄存器中的VSYNC、VBPD、VFPD、LINEVAL、HSYNC、HBPD、HFPD、HOZVAL、和CLKVAL字段有关系。

多数LCD驱动器需要它们自己适当的帧频。

帧频(Hz)=1/[{(1/VCLK)×(HOZVAL+1)+(1/HCLK)×(A

+B+(LINEBLANK×8))}×(LINEVAL+1)]

其中

视频操作

S3C2440中的TFTLCD控制器支持1、2、4或8bpp(位每像素)调色显示和16或24bpp无调色真彩显示。

256色调色板

S3C2440可以支持256色调色板给各种色彩映射的选择,以提供灵活操作给用户。

存储器数据格式

24BPP显示

(BSWP=0,HWSWP=0,BPP24BL=0)

D[31:

24]

D[23:

0]

000H

空位

P1

004H

空位

P2

008H

空位

P3

...

(BSWP=0,HWSWP=0,BPP24BL=1)

D[31:

24]

D[23:

0]

000H

P1

空位

004H

P2

空位

008H

P3

空位

...

LCD电源使能(STN/TFT)

S3C2440A提供了电源使能(PWREN)功能。

当PWREN设置为使得PWREN信号使能时,LCD_PWREN引脚的输出值被ENVID控制。

换句话说,如果LCD_PWREN引脚连接了LCD面板的电源开/关控制引脚,LCD面板的电源将自动的由ENVID的设置来控制。

S3C2440A同样支持INVPWREN位来反转PWREN信号的极性。

此功能只在当LCD面板拥有其自己的电源开/关控制端口并且当端口连接到了LCD_PWREN引脚时才可用。

3、实验步骤:

1、首先在ADS上建立一个工程,工程名为lcd,然后选择一个合适的路径存放。

2、将光盘中TQ2440测试程序里面inc和src文件夹下的2440addr.h、2440lib.h、2440slib.h、def.h、Nand.h、Option.h、2440addr.inc、Memcfg.inc、Option.inc、2440init.s、2440slib.s、2440lib.c、nand.c这13个文件依次拷贝到刚才所建工程的文件夹下。

3、新建一个源文件,命名为lcd.c,存放到工程名为lcd的文件夹下。

4、在lcd.mcp下创建一个分组,取名为startcode,然后将前面拷贝的3个文件2440init.s、2440slib.s、nand.c依次添加到以startcode命名的文件夹下。

5、将lcd.c添加到工程里面去。

6、配置DebugRelSettings。

7、在lcd.c里面进行程序的书写。

8、编译所写程序。

9、打开串口调试工具,将波特率设为115200。

10、将开发板、仿真器、和电脑正确连接,并将3.5寸TFT屏连到开发板上对应的位置,打开Hjtag软件,调试程序。

11、观察LCD屏上显示的图形变化情况。

四、实验结果:

在lcd屏上经过一段时间的延时依次循环显示圆、矩形、三角形、菱形,并可控制颜色的变化以及背景色。

五、实验总结:

掌握了TFT型LCD屏初始化寄存器的配置方法,以及屏显示的颜色控制方法,了解了如何实现lcd屏的简单显示控制。

六、附录:

#defineM5D(n)((n)&0x1fffff)//用于设置显示缓存区时,取低21位地址

#defineLCD_WIDTH320//屏幕的宽

#defineLCD_HEIGHT240//屏幕的高

//水平同步信号的脉宽、后肩、前肩

#defineHSPW30

#defineHBPD38

#defineHFPD20

//垂直同步信号的脉宽、后肩、前肩

#defineVSPW3

#defineVBPD15

#defineVFPD12

//有效显示尺寸

#defineHOVZAL(LCD_WIDTH-1)//决定lcd面板的水平尺寸

#defineLINEVAL(LCD_HEIGHT-1)//决定lcd面板的垂直尺寸

//LCDCON1

#defineCLKVAL_TFT6//vclk=7.1MHz

#defineMMODE0//决定VM的触发频率:

0=每帧

#definePNRMODE_TFT3//选择TFT型LCD

#defineBPPMODE_TFT13//选择24位每像素(bpp)

//LCDCON5

#defineBPP24BL0//32位数据表示24位颜色时,低位数据有效

#defineINVVCLK0//VCLK下降沿取视频数据

#defineINVVLINE1//反转HSYNC信号

#defineINVVFRAME1//反转VSYNC信号

#defineINVVD0//正常VD信号

#defineINVVDEN0//正常VDEN信号

#definePWREN1//允许PWREN信号

#defineBSWP0//颜色数据字节不交换

#defineHWSWP0//颜色数据半字不交换

//定义显示缓存区

volatileU32LCD_BUFFER[LCD_HEIGHT][LCD_WIDTH];

//绘制屏幕的背景颜色,颜色为c

voidBrush_Background(U32c)

{

intx,y;

for(y=0;y

{

for(x=0;x

{

LCD_BUFFER[y][x]=c;

}}}

//画实心圆,颜色为c,圆心在屏幕中心,半径为80个像素

voidDraw_Circular(U32c)

{

intx,y;

inttempX,tempY;

intradius=90;

intSquareOfR=radius*radius;

fo

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

当前位置:首页 > 经管营销 > 生产经营管理

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

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