- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
西安邮电大学嵌入式实验5—UART
西 安年月日?1. 掌握串行通信原理。
?2. 掌握串行通信控制器UART0工作原理及各个控制寄存器的配置。
?3. 掌握具体的电路板(开发板)UART0电平转换电路(SP3232E芯片的功能作用,工作原理)。
?4. 掌握ARM芯片中串行通信部件UART和ARM CPU的数据交换方式。(查询方式、中断方式。
二. 实验内容
将PC串口(COM0)的发送信号(TxD)线连接到开发板UART0口中的RxD信号线,接收信号线RxD连接到开发板UART0口中的TxD信号线,通过PC机串口简单通信软件(EasyARM)向开发板发送字符串,由于交叉连接,开发板将接收到的字符串发送回来,如果EasyARM软件上能够正确的显示到接收到的字符串,表示ARM中的UART0工作正确,即UART0驱动程序功能正确。
理解芯片中UART0部件与ARM CPU核通过VPB接口连接后,数据交换方式,常用查询方式和中断方式,进一步理解外设和CPU交互数据的方式。
三.方案设计
将UARTO开发板按照要求连接到PC上,将程序下载在UARTO上,通过串口监测软件,给UARTO进行串口输入,并监测输出。观察输出结果。
四.测试数据及运行结果
1. 正常测试数据
输入 输出
① Hello EasyARM2131 Hello EasyARM2131
② ABCDEFGH ABCDEFGH
③ 1234567890 1234567890
2.非正常测试数据
输入 输出
① Hello EasyARM2131 syARM2131
② ABCDEFGH
五.总结
本次实验的目的是掌握串行通信原理,串行通信控制器UART0工作原理及各个控制寄存器的配置,具体的电路板UART0电平转换电路掌握ARM芯片中串行通信部件UART和ARM CPU的数据交换方式。相对前面的实验比较复杂
,刚开始出现了错误,更换了中断方式,出现了结果,但是结果无法正常显示,在询问老师过后,更改了部分程序,最终正常的输出。
六.附录:源代码(电子版)
#define U0RBR (*((volatile unsigned char *) 0xE000C000))
#define U0THR (*((volatile unsigned char *) 0xE000C000))
#define U0IER (*((volatile unsigned char *) 0xE000C004))
#define U0IIR (*((volatile unsigned char *) 0xE000C008))
#define U0FCR (*((volatile unsigned char *) 0xE000C008))
#define U0LCR (*((volatile unsigned char *) 0xE000C00C))
#define U0LSR (*((volatile unsigned char *) 0xE000C014))
#define U0SCR (*((volatile unsigned char *) 0xE000C01C))
#define U0DLL (*((volatile unsigned char *) 0xE000C000))
#define U0DLM (*((volatile unsigned char *) 0xE000C004))
59
ARM CPU查询方式
#include config.h
#define UART_BPS 115200 // 串口通讯波特率
void DelayNS (uint32 dly)
{
uint32 i;
for ( ; dly0; dly--)
for (i=0; i50000; i++);
}
void UART0_Init (void)
{
uint16 Fdiv;
60
PINSEL0 = 0 // 设置P0.0、P0.1引脚功能为TxD、RxD
U0LCR = 0x83; // DLAB=1,允许设置波特率
Fdiv = (Fpclk / 16) / UART_BPS; // 设置波特率
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
}
uint8 UART0_GetByte (void)
{
uint8 rcv_dat;
while ((U0LSR 0x01) == 0);
rcv_dat = U0RBR;
return (rcv_dat);
}
void UART0_GetStr (uint8 *s, uint32 n)
{
for ( ; n0; n--)
{
*
文档评论(0)