嵌入式系统开发与应用实验报告Word格式文档下载.docx
《嵌入式系统开发与应用实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《嵌入式系统开发与应用实验报告Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
![嵌入式系统开发与应用实验报告Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-11/19/f2922f84-ee46-48a0-b323-600c0bd39671/f2922f84-ee46-48a0-b323-600c0bd396711.gif)
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中断处理程序
*******************************************