作者:卢浩
时间:2017.2.13
转载请注明出处
嵌入式爱好者开发群:
基于上一篇AXI GPIO的设计,我们进行UART的扩展,打开vivado工程,添加UART IP,在zynq上打开IRQ_F2P的中断,如图:
然后把中断连接上,点击自动连接,生成如图:
然后Run Implementation.
然后进行约束设计,如图:
我选择的是JA座子上的JA1和JA7两个引脚来做UART的RX TX,对应处理器的Y11 AB11引脚,都是bank13的引脚。
如图:
接下来生成BIT文件。然后export hardware,launck sdk,步骤和上一篇AXI GPIO差不多,但是还是有几个注意点的,我们继续往下做。
打开SDK后,生成FSBL文件,输出串口配置一定不能错,如图:
另外在dts里面也不能配置错。
我们可以看sdk生成的pl.dtsi文件,如图:
可以看到PL扩展的UART的DTS描述信息。
axi_uartlite_0: serial@42c00000 {
clock-names = "ref_clk";
clocks = <&clkc 0>;
compatible = "xlnx,xps-uartlite-1.00.a";
current-speed = <>;
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,然后测试一下收发。