【JokerのZYNQ7020】AXI_UARTLITE。

软件环境:vivado 2017.4        硬件平台:XC7Z020


本月的这一篇呢,主要说的是axi_uartlite这个模块,利用这个模块,我们可以将pl部分的pin复用为uart的rx和tx,交给ps来操作,相当于无形之中给ps扩展了许多uart接口,所以特别适用于板子需要跟许多外部串口设备通讯,而ps只有两个uart能同时使用,无法满足需求的情况。这篇里会先说SDK裸机程序怎么跑,后面会说linux下怎么利用这个模块与外部串口设备通讯。

由于主要是想说axi_uartlite扩串口怎么用,所以只做了最简工程。

 vivado这边需要注意的只有一点,就是实际pl扩出来的串口的波特率,是在axi_uartlite中需要提前设置好的,这边设置9600,那就只能用9600,设置115200那就只能115200,比特流生成好后就没法变了,要变的话就要重新配置然后重新生成比特流。

比特流生成好后,SDK这边的程序很简单。

#include "xparameters.h"
#include "xil_printf.h"
#include "xuartlite.h"
#include "string.h"
#include "sleep.h"

u8 uartlite_buf[512]={0};

int main()
{
	XUartLite  PL_Uartlite;
	XUartLite_Config *XUARTConfigPtr;
	int Uartlite_Init_Status;
	u32 uartlite_recv_cnt = 0;

	XUARTConfigPtr = XUartLite_LookupConfig(XPAR_UARTLITE_0_DEVICE_ID);
	if (XUARTConfigPtr == NULL){
		xil_printf("XUartlite_LookupConfig failed\n\r");
		return XST_FAILURE;
	}
	else{
		xil_printf("XUartlite_LookupConfig succeed\n\r");
	}

	Uartlite_Init_Status = XUartLite_Initialize(&PL_Uartlite, XPAR_UARTLITE_0_DEVICE_ID);
	if (Uartlite_Init_Status != XST_SUCCESS){
		xil_printf("Uartlite Initialize failed\n\r");
		return XST_FAILURE;
	}
	else{
		xil_printf("Uartlite Initialize succeed\n\r");
	}

	while (1){
		uartlite_recv_cnt = XUartLite_Recv(&PL_Uartlite, uartlite_buf, 512);

		if (uartlite_recv_cnt > 0){
			XUartLite_Send(&PL_Uartlite, uartlite_buf, uartlite_recv_cnt);
			memset(uartlite_buf, 0, 512);
			uartlite_recv_cnt = 0;
		}
	}

	return 0;
}

 axi_uartlite设备ID在xparameters.h中,调用axi_uartlite模块前,需包含xuartlite.h。

程序中,依靠XUartLite_Recv完成接收,将实际接收到的字节数由uartlite_recv_cnt获取,收到数据后由XUartLite_Send发送出,实现简单的收发回环。

  • 2
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值