ZYNQ7020在linux下UART0、UART1双串口的实现 - ZYNQ7021学习

基于黑金的多以太网进行的多串口实验,UART0和UART1都使用的是PS端的引脚,不需要进行引脚分配。首先我们先双击ZYNQ核

勾选UART0的引脚如下图所示,其他配置均不用修改,点击OK完成。

然后与正常的工程一样,点击Run Implementation --> 产上Bit流文件 --> 硬件导出 --> 打开SDK。将design_1_wrapper_hw_platform_0文件拷贝到Linux系统下,用以创建petalinux工程。

 

 

按照petalinux移植的流程,在petalinux-config -c kernel 配置内核之前,进入到petalinux工程路径下的subsystems/linux/configs/device-tree文件夹,将system-top.dts 修改如下:

/dts-v1/;
/include/ "zynq-7000.dtsi"
/include/ "system-conf.dtsi"
/include/ "pl.dtsi"
/ {
	cpus {
		cpu@0 {
			operating-points = <766666 1000000 383333 1000000>;
		};
	};
	chosen {
		bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0";
	};
	aliases {
		ethernet0 = &axi_ethernet_1;
		ethernet1 = &axi_ethernet_2;
		ethernet2 = &axi_ethernet_3;
		ethernet3 = &gem0;
		ethernet4 = &axi_ethernet_0;
		serial0 = &uart1;
		serial1 = &uart0;
		spi0 = &qspi;
	};
	memory {
		device_type = "memory";
		reg = <0x0 0x40000000>;
	};
};
&gem0 {
	enet-reset = <&gpio0 7 0>;
	local-mac-address = [00 0a 35 00 00 08];
	phy-mode = "rgmii-id";
	status = "okay";
	xlnx,ptp-enet-clock = <0x79dbbf3>;
};
&gpio0 {
	emio-gpio-width = <64>;
	gpio-mask-high = <0x0>;
	gpio-mask-low = <0x5600>;
};
&intc {
	num_cpus = <2>;
	num_interrupts = <96>;
};
&qspi {
	is-dual = <0>;
	num-cs = <1>;
	status = "okay";
};
&sdhci0 {
	status = "okay";
	xlnx,has-cd = <0x1>;
	xlnx,has-power = <0x0>;
	xlnx,has-wp = <0x0>;
};
&sdhci1 {
	status = "okay";
	xlnx,has-cd = <0x0>;
	xlnx,has-power = <0x0>;
	xlnx,has-wp = <0x0>;
};
&uart0 {
	current-speed = <115200>;
	device_type = "serial";
	port-number = <1>;
	status = "okay";
};
&uart1 {
	current-speed = <115200>;
	device_type = "serial";
	port-number = <0>;
	status = "okay";
};
&usb0 {
	dr_mode = "host";
	phy_type = "ulpi";
	status = "okay";
	usb-reset = <&gpio0 8 0>;
};
&axi_ethernet_0 {
	local-mac-address = [00 0a 35 00 01 22];
	phy-handle = <&phy0>;
	xlnx,has-mdio = <0x1>;
	phy-mode = "rgmii-id";
	mdio {
		#address-cells = <1>;
		#size-cells = <0>;
	phy0: phy@1 {
		compatible = "micrel,ksz9031";
		device_type = "ethernet-phy";
		reg = <1>;
		};
	};
};
&axi_ethernet_1 {
	local-mac-address = [00 0a 35 00 01 23];
	phy-handle = <&phy1>;
	xlnx,has-mdio = <0x1>;
	phy-mode = "rgmii-id";
	mdio {
		#address-cells = <1>;
		#size-cells = <0>;
	phy1: phy@1 {
		compatible = "micrel,ksz9031";
		device_type = "ethernet-phy";
		reg = <1>;
		};
	};
};
&axi_ethernet_2 {
	local-mac-address = [00 0a 35 00 01 24];
	phy-handle = <&phy2>;
	xlnx,has-mdio = <0x1>;
	phy-mode = "rgmii-id";
	mdio {
		#address-cells = <1>;
		#size-cells = <0>;
	phy2: phy@1 {
		compatible = "micrel,ksz9031";
		device_type = "ethernet-phy";
		reg = <1>;
		};
	};
};
&axi_ethernet_3{
	local-mac-address = [00 0a 35 00 01 25];
	phy-handle = <&phy3>;
	xlnx,has-mdio = <0x1>;
	phy-mode = "rgmii-id";
	mdio {
		#address-cells = <1>;
		#size-cells = <0>;
	phy3: phy@1 {
		compatible = "micrel,ksz9031";
		device_type = "ethernet-phy";
		reg = <1>;
		};
	};
};
&clkc {
	fclk-enable = <0x3>;
	ps-clk-frequency = <33333333>;

};

按照petalinux的流程产上BOOT.BIN和image.ub文件拷贝到SD,将开发板设置问SD卡启动就可以从SD卡启动了。这里只是完成了双串口的配置,UART1用作了控制台,UART0的使用还需要自己基于Linux开发可执行文件来使用。下面的界面中是启动时添加了网口的启动配置信息,网线没有插上,所以很多disable,关于UART0编程和启动配置,下次有时间再来写。

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: Zynq 7020是一款Xilinx公司生产的可编程逻辑器件。它内部集成了ARM Cortex-A9核处理器和可编程逻辑单元,具有强大的计算和通信能力。UART(Universal Asynchronous Receiver/Transmitter)是一种常用的串行通信接口,用于在不同设备之间传输数据。 编写Zynq 7020上的UART0串口程序需要以下步骤: 1. 配置UART0的引脚:首先,需要设置Zynq 7020的引脚,将UART0的发送和接收引脚与外部设备连接起来。 2. 初始化UART0:通过对UART0控制寄存器进行设置,可以配置串口的波特率、数据位数、停止位数和校验位等参数。 3. 发送数据:通过写入UART0的数据寄存器,可以向外部设备发送数据。可以使用循环将一串数据连续发送。 4. 接收数据:通过读取UART0的数据寄存器,可以从外部设备接收数据。可以使用循环读取多个数据,并将其存储在内存中。 5. 处理数据:接收到的数据可以进一步进行处理,如解码、验证或转换成特定格式。 6. 关闭UART0:使用完UART0后,应该关闭串口,并释放相关资源。 总的来说,Zynq 7020 UART0串口程序的关键是配置和控制UART硬件,从外部设备读取数据并向外部设备发送数据。具体的实现方法可以参考Xilinx提供的相关文档和开发工具。 ### 回答2: Zynq 7020是Xilinx推出的一款SoC(系统片上系统),其中包含了核ARM Cortex-A9处理器和可编程逻辑单元(PL),可用于嵌入式系统开发。UART0是其中的一个串口接口。 在Zynq 7020上,我们可以通过编写程序来使用UART0串口。首先,我们需要配置Zynq 7020的PL部分来使UART0工作。这可以通过Vivado设计套件来完成。配置的过程涉及到连接PL中的UART0 IP核(Intellectual Property,知识产权)到PS(Processing System,处理系统)上的MIO(Multiplexed I/O)引脚,并设置相应的时钟和波特率等参数。 然后,我们可以使用C语言编写程序来与UART0进行通信。首先,我们需要打开UART0的设备文件,该文件位于Linux系统中的/dev目录下。通过打开设备文件,我们可以访问UART0的寄存器。接下来,我们可以使用标准的文件操作函数(如read和write)来发送和接收数据。 例如,要发送数据,我们可以使用write函数向设备文件写入数据。将要发送的数据存储在一个字符数组中,然后使用write函数将数据写入设备文件。类似地,我们可以使用read函数从设备文件中读取接收到的数据,并将其存储在另一个字符数组中。 除了发送和接收数据,我们还可以使用其他的配置函数来设置UART0的参数,例如设置波特率、数据位数、停止位等。这些函数可以在Linux系统UART驱动程序中找到。 总之,Zynq 7020UART0串口程序涉及到配置PL部分、使用C语言编写程序,并使用文件操作函数从设备文件中读取和写入数据。 ### 回答3: Zynq 7020是一款Xilinx公司生产的可编程SoC器件,它融合了核ARM Cortex-A9处理器和可编程逻辑部分(PL)。UART(通用异步收发传输器)是一种在计算机和外部设备之间传输数据的通信协议。 使用Zynq 7020UART0串口,我们可以通过编写程序来实现与其他设备的通信。下面是一个简单的Zynq 7020 UART0串口程序的示例: 首先,我们需要在Vivado中设计并配置Zynq 7020系统,包括设置处理器和PL的连接方式以及配置UART0。然后,在开发板上上电并启动系统。 针对UART0串口的程序编写可以分为发送和接收两部分。 发送部分的代码如下: 1. 首先,需要引入UART0的寄存器地址,可以通过查阅Zynq 7020的参考手册获得。 2. 配置UART0的波特率、数据位、停止位、奇偶校验位等参数。 3. 使用对应的寄存器写入要发送的数据。 接收部分的代码如下: 1. 首先,需要引入UART0的寄存器地址。 2. 配置UART0的波特率、数据位、停止位、奇偶校验位等参数。 3. 使用对应的寄存器读取接收到的数据。 这是一个基本的Zynq 7020 UART0串口程序示例。根据实际需求,你可以对发送和接收部分的代码进行调整和扩展。同时,还需要合适的硬件连接和电源供应来确保UART0串口能够正常工作。 总结起来,Zynq 7020 UART0 串口程序的编写需要首先设计和配置Zynq 7020系统,并在这个基础上编写发送和接收部分的代码。通过这样的程序,我们可以实现与其他设备之间的数据通信。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值