之前的工程中,资源基本上都是利用的PS资源,包括串口、网口、USB、DisplayPort,都是PS侧已经成熟化的资源,只需要在工程中设置MIO、时钟以及各种中断即可。但是这些资源比较比较固定,无法灵活的使用,这时就需要应用PL侧资源,一方面其非常灵活,另一方面也可以利用PL资源进行加速运算。这里已串口使用为例。 1.硬件工程
硬件工程图主要需要加入时钟、中断控制器、以及串口模块,串口的波特率可以设置,这里选择9600。硬件工程如下图所示。
基于上述工程,生成xsa文件,然后利用petalinux工具生成Linux系统,需进行如下设置: petalinux-config-c kernel ---> DeviceDrivers ---> Character devices ---> Serial drivers ---> Xilinxuartlite serial port support 使能上述选项,一般默认是勾选的,此外也可以在.config文件中加入以下指令: # integrate intothe kernel CONFIG_SERIAL_UARTLITE=y # build asloadable module CONFIG_SERIAL_UARTLITE=m 然后还需设置设备树,生成的PL设备树如下所示: axi_uartlite_0: serial@80010000 { clock-names ="s_axi_aclk"; clocks =<&misc_clk_0>; compatible ="xlnx,axi-uartlite-2.0", "xlnx,xps-uartlite-1.00.a"; current-speed =<115200>; device_type ="serial"; interrupt-names ="interrupt"; interrupt-parent =<&axi_intc_0>; interrupts = <0 0>; port-number = <1>; reg = <0x0 0x80010000 0x00x10000>; xlnx,baudrate =<0x1c200>; xlnx,data-bits =<0x8>; xlnx,odd-parity =<0x0>; xlnx,s-axi-aclk-freq-hz-d ="100.0"; xlnx,use-parity =<0x0>; }; axi_uartlite_1: serial@80020000 { clock-names ="s_axi_aclk"; clocks =<&misc_clk_0>; compatible ="xlnx,axi-uartlite-2.0", "xlnx,xps-uartlite-1.00.a"; current-speed =<9600>; device_type ="serial"; interrupt-names ="interrupt"; interrupt-parent =<&axi_intc_0>; interrupts = <1 0>; port-number = <2>; reg = <0x0 0x80020000 0x00x10000>; xlnx,baudrate =<0x2580>; xlnx,data-bits =<0x8>; xlnx,odd-parity =<0x0>; xlnx,s-axi-aclk-freq-hz-d ="100.0"; xlnx,use-parity =<0x0>; }; 在system-user.dtsi中还需加入: &axi_uartlite_0{ status = "okay"; }; &axi_uartlite_1{ status = "okay"; }; 然后petalinux-build即可等待文件的生成。 二、实验
将相应的管脚插入,并连接电脑,详细如图所示: 连接上电脑之后,即可发送和接收数据, 发送的指令为: echo “XXX”/dev/ttyUL2 接受的指令为: cat /dev/ttyUL2& 板卡发送和接收的界面如图: PC发送和接收的情况如下: 发送和接收正常。
|