嵌入式系统开发与应用实验报告Word格式文档下载.docx

上传人:b****6 文档编号:16106594 上传时间:2022-11-20 格式:DOCX 页数:17 大小:208.86KB
下载 相关 举报
嵌入式系统开发与应用实验报告Word格式文档下载.docx_第1页
第1页 / 共17页
嵌入式系统开发与应用实验报告Word格式文档下载.docx_第2页
第2页 / 共17页
嵌入式系统开发与应用实验报告Word格式文档下载.docx_第3页
第3页 / 共17页
嵌入式系统开发与应用实验报告Word格式文档下载.docx_第4页
第4页 / 共17页
嵌入式系统开发与应用实验报告Word格式文档下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

嵌入式系统开发与应用实验报告Word格式文档下载.docx

《嵌入式系统开发与应用实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《嵌入式系统开发与应用实验报告Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。

嵌入式系统开发与应用实验报告Word格式文档下载.docx

ARM监视串行口,将接收到的字符再发送给串口(计算机与开发平台是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发平台将接收到的数据再返送给PC,在超级终端上显示。

三、预备知识

了解ADT集成开发环境的基本功能。

学习串口通讯的基本知识。

熟悉S3C2410串口有关的寄存器。

四、实验设备

JXARM9-2410教学实验箱

ADT1000仿真器和ADTIDE集成开发环境

串口连接线

五、实验原理

1.异步串行I/O异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。

数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。

接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。

为了恢复发送的信息,双方必须协调工作。

在微型计算机中大量使用异步串I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。

但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。

串行通信字符格式

DB-25DB-9引脚定义

DB-25DB-9引脚说明

RS-232C接口通信的两种基本连接方式

信号电平规定

⑴EIA电平:

双极性信号逻辑电平,它是一套负逻辑定义

⑵-3V到-25V之间的电平表示逻辑“1”

⑶+3V到+25V之间的电平表示逻辑“0”

⑷TTL电平:

计算机内部(S3C2410)使用TTL电平

电平转换电路:

常用专门的RS-232接口芯片,如SP3232、SP3220等,在TTL电平和EIA电平之间实现相互转换。

2.S3C2410异步串行口控制器

⑴S3C2410自带三个异步串行口控制器

⑵每个控制器有16字节的FIFO(先入先出寄存器)

⑶最大波特率115.2K

⑷每个UART有7种状态:

溢出错误,校验错误,帧错误,暂停态,接收缓冲区准备好,发送缓冲区空,发送移位缓冲器空,这些状态可以由相应的UTRSTATn或UERSTATn寄存器表示,并且与发送接收缓冲区相对应的有错误缓冲区

⑸波特率的大小可以通过设置波特率寄存器(UBRDIVn)控制,计算公式如下:

使用PCLK时的计算公式如下:

UBRDIVn=(int)[PCLK/(波特率×

16)]–1

使用UCLK时的计算公式如下:

UBRDIVn=(int)[UCLK/(波特率×

例如:

使用PCLK,在40MHz的情况下,当波特率取115200bps时,

UBRDIVn=(int)[40000000/(115200×

16)]–1=20

六、实验步骤

1.串口初始化

/*配置系统时钟*/

ChangeClockDivider(1,1);

//1:

2:

4

ChangeMPllValue(0xa1,0x3,0x1);

//FCLK=202.8MHz

/*初始化端口*/

Port_Init();

/*初始化串口*/

Uart_Init(0,115200);

Uart_Select(0);

2.发送数据

unsignedcharch='

a'

;

ch=Uart_Getch();

3.接收数据

Uart_SendByte(ch)

七、实验结果

实验结果如图所示

实验二中断实验

1.了解中断的作用

2.掌握嵌入式系统中断的处理流程

3.掌握ARM中断编程

编写中断处理程序,处理外部中断

了解ADT集成开发环境的基本功能

了解中断的作用以及处理过程

1.CPU与外设之间传输数据的控制方式

⑴查询方式

查询方式的优点是硬件开销小,使用起来比较简单,但在此方式下,CPU要不断地查询外设的状态,当外设未准备好时,CPU就只能循环等待,不能执行其它程序,这样就浪费了CPU的大量时间,降低了CPU的利用率

⑵中断方式

当CPU进行主程序操作时,外设的数据已存入输入端口的数据寄存器;

或端口的数据输出寄存器已空,由外设通过接口电路向CPU发出中断请求信号,CPU在满足一定的条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行输入/输出操作的子程序,待输入/输出操作执行完毕之后CPU再返回并继续执行原来被中断的主程序。

这样CPU就避免了把大量时间耗费在等待、查询状态信号的操作上,使其工作效率得以大大地提高

⑶DMA方式

当高速外设要与系统内存或者要在系统内存的不同区域之间,进行大量数据的快速传送时,查询方式和中断方式可能不能满足要求,直接存储器存取(DMA)就是为解决这个问题提出的采用DMA方式,在一定时间段内,由DMA控制器取代CPU,获得总线控制权,来实现内存与外设或者内存的不同区域之间大量数据的快速传送

中断处理示意图

向CPU发出中断请求的设备或事件称为中断源,断点处产生中断请求,CPU执行中断流程,响应中断,并执行用户定义的中断服务子程序处理完毕,执行中断返回动作,主程序继续运行

中断响应

中断源向CPU发出中断请求,若优先级别最高,CPU在满足一定的条件下,可以中断当前程序的运行,保护好被中断的主程序的断点及现场信息。

然后,根据中断源提供的信息,找到中断服务子程序的入口地址,转去执行新的程序段,这就是中断响应。

中断服务子程序

2.S3C2410的中断控制器:

⑴中断源状态寄存器

该寄存器的32位中每一位对应一个中断源。

如果相应中断源产生中断请求则其对应位被置为1。

该寄存器中的位将自动由中断请求置位,而不管INTMASK寄存器中的掩码位是否有效。

另外,该寄存器不受中断控制器的优先级逻辑影响。

在中断服务程序中,该寄存器的相应位必须进行清零处理,清零的方法是将该位写入1。

⑵寄存器中断模式

⑶中断屏蔽寄存器

⑷优先级寄存器

⑸中断状态寄存器

⑹中断偏移寄存器

1、建立一个中断工程。

2、编写外部中断处理程序的中断服务函数,并保存为main.c文件,将该文件加入到工程中。

main.c文件如下:

/*包含文件*/

#include"

def.h"

2410lib.h"

option.h"

2410addr.h"

interrupt.h"

/*functions*/

voideint2_isr(void)__attribute__((interrupt("

IRQ"

)));

voideint3_isr(void)__attribute__((interrupt("

voiddelay();

/*variables*/

intdither_count2=0;

intdither_count3=0;

staticintnLed=0;

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

//Functionname:

Main

//Description:

JXARM9-2410中断实验主程序

//完成功能:

//外部中断按键引发中断

//Returntype:

void

//Argument:

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

voidMain(void)

{

/*配置系统时钟*/

/*中断初始化*/

Isr_Init();

Uart_Select(0);

/*打印提示信息*/

PRINTF("

\n---外部中断测试程序---\n"

);

\n请将UART0与PC串口进行连接,然后启动超级终端程序(115200,8,N,1)\n"

\n外部中断测试开始\n"

/*请求中断*/

//TODO...

Irq_Request(IRQ_EINT2,eint2_isr);

Irq_Request(IRQ_EINT3,eint3_isr);

/*使能中断*/

Irq_Enable(IRQ_EINT2);

Irq_Enable(IRQ_EINT3);

dither_count2=0;

dither_count3=0;

while

(1)

{

delay();

dither_count2++;

dither_count3++;

}

}

eint2_isr

EINT2中断处理程序

int

voideint2_isr(void)

Irq_Clear(IRQ_EINT2);

if(dither_count2>

5)

dither_count2=0;

Led_Display(nLed);

nLed=(nLed^0x01);

}

eint3_isr

EINT3中断处理程序

*******************************************

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

当前位置:首页 > 幼儿教育 > 少儿英语

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

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