zynq-7000系列基于zynq-zed的vivado初步设计之linux下控制PL扩展的UART

 zynq-7000系列基于zynq-zed的vivado初步设计之linux下控制PL扩展的UART

                              作者:卢浩  

                                     时间:2017.2.13

                                    转载请注明出处

                                                                 嵌入式爱好者开发群:122879839

基于上一篇AXI GPIO的设计,我们进行UART的扩展,打开vivado工程,添加UART IP,在zynq上打开IRQ_F2P的中断,如图:

zynq-7000系列基于zynq-zed的vivado初步设计之linux下控制PL扩展的UART_第1张图片

然后把中断连接上,点击自动连接,生成如图:

zynq-7000系列基于zynq-zed的vivado初步设计之linux下控制PL扩展的UART_第2张图片

然后Run Implementation.

然后进行约束设计,如图:

zynq-7000系列基于zynq-zed的vivado初步设计之linux下控制PL扩展的UART_第3张图片

我选择的是JA座子上的JA1和JA7两个引脚来做UART的RX TX,对应处理器的Y11 AB11引脚,都是bank13的引脚。

如图:

zynq-7000系列基于zynq-zed的vivado初步设计之linux下控制PL扩展的UART_第4张图片

接下来生成BIT文件。然后export hardware,launck sdk,步骤和上一篇AXI GPIO差不多,但是还是有几个注意点的,我们继续往下做。

打开SDK后,生成FSBL文件,输出串口配置一定不能错,如图:

zynq-7000系列基于zynq-zed的vivado初步设计之linux下控制PL扩展的UART_第5张图片

另外在dts里面也不能配置错。

我们可以看sdk生成的pl.dtsi文件,如图:

zynq-7000系列基于zynq-zed的vivado初步设计之linux下控制PL扩展的UART_第6张图片

可以看到PL扩展的UART的DTS描述信息。

axi_uartlite_0: serial@42c00000 {
clock-names = "ref_clk";
clocks = <&clkc 0>;
compatible = "xlnx,xps-uartlite-1.00.a";
current-speed = <115200>;
device_type = "serial";
interrupt-parent = <&intc>;
interrupts = <0 29 1>;
port-number = <1>;
reg = <0x42c00000 0x10000>;
xlnx,baudrate = <0x2580>;
xlnx,data-bits = <0x8>;
xlnx,odd-parity = <0x0>;
xlnx,s-axi-aclk-freq-hz-d = <0x64>;
xlnx,use-parity = <0x0>;
};

另外有一个重要点就是记得内核配置需要添加axi uart的支持

make menuconfig
---> Device Drivers ---> Character devices ---> Serial drivers ---> Xilinx uartlite serial port support
# integrate into the kernel
CONFIG_SERIAL_UARTLITE=y
# build as loadable module
CONFIG_SERIAL_UARTLITE=m

编译进内核还是内核模块,用户自己选择。

我们把顺序理一下,1.用vivado生成bit文件;2.在sdk里面生成fsbl文件;3.合成BOOT.bin文件;4.生成dtb文件;5.生成uImage文件

然后可以放在sd卡里面启动。

在linux启动信息中,我们可以看到这样一句打印信息:

42c00000.serial: ttyUL1 at MMIO 0x42c00000 (irq = 165, base_baud = 0) is a uartlite

这就是PL扩展的UART。

在linux下可以作为标准串口使用,用户可以短接TX RX,然后测试一下收发。

你可能感兴趣的:(ARM-LINUX,ZYNQ)