cuter

【再话ZedBoard】利用EMIO连接UART至PL

0
阅读(11803)

前两天在Xilinx技术小组回答了一个网友的提问,涉及到EMIO的使用问题,他还没有给反馈,所以干脆自己试一试,做下笔记,算是完善了EMIO的使用方法——之前已经写过一篇和EMIO相关的文章,但侧重于GPIO的使用;这次是利用EMIO将ARM内核的外设uart连接到PL,其他外设接口的扩展也是同样的道理和方法。EMIO的使用差不多就分为这两种了。

首先给出两个链接,一个是网友fangliball的提问帖:

http://group.chinaaet.com/109/73713

一个是我之前的EMIO使用笔记:

http://blog.chinaaet.com/detail/31857.html

fangliball童鞋给出了在XPS14.3 14.4版本如何使能EMIO,我的笔记给出了14.2版本如何使能EMIO GPIO,差别不是太大,也不是难点,所以本文就不再给出详细操作了。

其实fangliball的问题在于将uart扩展至EMIO之后,不知道如何使用……本文也恰好解决了这一问题。

首先需要说明的是,在XPS中将uart编程至EMIO之后,切换至图形视图,就可以看到uart的发送和接收引脚UARTx_TX、UARTx_RX已经被引出来了(如下图所示)。

RPXC)_V6N_5$8TI_L0S}YLA

正如我之前所说的:

“这两个引脚如何处理,要看你的需求了。直接输出至PL的引脚,或送入PL的某模块进行数据处理,都可以。

你不需要知道tx和rx对应到什么引脚,因为你不可能像操作gpio那样操作到这两个pin,至于数据如何从发送寄存器、接收寄存器经并串转换、串并转换,如何送到tx,rx引脚,也不需要关心吧? 只需要考虑处理232接口数据就OK了…… ”

以上述说法为指导思想,设计硬件测试平台如下图所示:

image


uart_rx是用HDL语言编写的串口数据接收模块,负责将来自ps的串行数据转化为并行数据;baud是波特率发生器,实质上是分频器;并行数据最后送zynq外部led,用于直观地显示,和程序中发送的数据做出对比。

 

软件测试程序:

#include <stdio.h>
#include "platform.h"
#include "sleep.h"
#include "xil_printf.h"


int main()
{
    init_platform();
    int i=1;

    while(1)
    {
    	xil_printf("%c",i);		// %c保证发送一个字节,为了配合显示需要
    	sleep(1);
    	i=i<<1;
    	if(i==0x100)
    		i=0x01;
    }
    return 0;
}



测试效果我就不做图或者视频了,你懂的,流水灯~


版权声明:

本文由博主“cuter”发布。欢迎转载,但不得擅自更改博文内容,也不得用于任何盈利目的。转载时不得删除作者简介和版权声明。如有盗用而不说明出处引起的版权纠纷,由盗用者自负。

博客官方地址:

ChinaAET:http://blog.chinaaet.com/cuter521

EDN China: http://bbs.ednchina.com/BLOG_cuter521_356737.HTM