【再话ZedBoard】利用EMIO连接UART至PL
0赞前两天在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已经被引出来了(如下图所示)。
正如我之前所说的:
“这两个引脚如何处理,要看你的需求了。直接输出至PL的引脚,或送入PL的某模块进行数据处理,都可以。
你不需要知道tx和rx对应到什么引脚,因为你不可能像操作gpio那样操作到这两个pin,至于数据如何从发送寄存器、接收寄存器经并串转换、串并转换,如何送到tx,rx引脚,也不需要关心吧? 只需要考虑处理232接口数据就OK了…… ”
以上述说法为指导思想,设计硬件测试平台如下图所示:
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