ZynqMP Vitis2021.1 PS UART接收中断及IDLE(超时)中断

前言:

硬件环境:Xilinx ZynqMP XCZU4EV-SFVC784-1-I

软件环境:Ubuntu20.04LTS + Vivado2021.1 + Vitis2021.1

文章目标:1、UART在正常模式下中断接收的回显例子。

                  2、Xilinx自带UART库代码有点累赘,在例1基础上优化。

                  3、在例2的基础上,添加UART在正常模式下IDLE中断的(接收超时中断)例子。

参考程序:/tools/Xilinx/Vitis/2021.1/data/embeddedsw/XilinxProcessorIPLib/drivers/uartps_v3_11

ZynqMP串口关键功能简介:

1、PS有两个UART外设,分别是UART0和UART1。

2、UART的TX 和 RX都有一个64Byte的FIFO,读写数据都需先经过FIFO。

3、UART支持4种模式。分别是正常模式, 回显模式,本地回环模式, 外部回环模式。 

更多详细信息请看《UG1085 Zynq UltraScale+ Device Technical Reference Manual.pdf》

准备工作:

1、打开Vivado2021.1,创建一个工程,勾选UART0外设,生成导出XSA文件。

2、打开Vitis2021.1,创建一个Platform Project。

 

例1:UART中断接收回显

1、创建一个空白的Application Project,添加main函数文件。

2、在main函数文件中添加如下代码。为了简化代码,故非关键函数不进行任何返回值判断。

#include "stdio.h"
#include "xparameters.h"
#include "xuartps.h"
#include "xscugic.h"

#define UART_DEVICE_ID		XPAR_XUARTPS_0_DEVICE_ID
#define INTC_DEVICE_ID		XPAR_SCUGIC_SINGLE_DEVICE_ID
#define UART_INT_IRQ_ID		XPAR_XUARTPS_0_INTR

void UserHandler(void *CallBackRef, u32 Event, unsigned int EventData);
void Handlers(void *CallBackRef);
int UartPsSend(XUartPs *InstancePtr, u8 *BufferPtr, u32 NumBytes);
int UartPsRev(XUartPs *InstancePtr, u8 *BufferPtr, u32 NumBytes);

XUartPs UartPs;			/* Instance of the UART Device */
XScuGic ScuGic;			/* Instance of the Interrupt Controller */

int main(void)
{
	XUartPs_Config *UartPs_Config;
	XScuGic_Config *ScuGic_Config;

	/* 1、初始化UART,设置波特率,正常模式 */
	UartPs_Config = XUartPs_LookupConfig(UART_DEVICE_ID);
	XUartPs_CfgInitialize(&UartPs, UartPs_Config,
			UartPs_Config->BaseAddress);
	XUartPs_SetBaudRate(&UartPs, 115200);
	XUartPs_SetOperMode(&UartPs, XUARTPS_OPER_MODE_NORMAL);

	/* 2、初始化中断控制器,中断函数连接到系统,使能中断 */
	ScuGic_Config = XScuGic_LookupConfig(INTC_DEVICE_ID);
	XScuGic_CfgInitialize(&ScuGic, ScuGic_Config,
			ScuGic_Config->CpuBaseAddress);
	Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
			(Xil_ExceptionHandler) XScuGic_InterruptHandle
Vitis 2021.1 中导入使用 Vitis 2020.2 创建的工程时,由于不同版本之间可能存在工具链、库支持或项目结构的变更,因此需要进行一些兼容性处理。以下是可行的步骤和注意事项: ### 兼容性处理步骤 1. **迁移项目文件** 将 Vitis 2020.2 的项目文件夹复制到新的工作空间中,确保所有源文件、链接脚本(`.ld`)、硬件描述文件(`.xsa`)和构建配置文件(`.json`)完整保留。 2. **打开 Vitis 2021.1 并导入项目** 在 Vitis 2021.1 中选择 `File → Import → General → Existing Projects into Workspace`,然后选择项目根目录。Vitis 会尝试识别项目结构并自动导入。 3. **更新工具链配置** 由于 Vitis 2021.1 使用的工具链版本可能与 2020.2 不同,建议检查并更新以下配置: - 编译器版本(默认为 `arm-none-eabi-gcc` 或 `aarch64-none-elf-gcc`) - SDK 版本是否匹配当前硬件平台 - 库路径是否正确,特别是 `lib` 和 `include` 路径 4. **重新关联硬件平台** 如果项目依赖 `.xsa` 文件(来自 Vivado 的硬件导出),则需要重新导入该硬件描述文件。可以通过 `File → Import → Hardware → XSA File` 导入,并确保平台支持的处理器架构与项目匹配。 5. **重新构建 BSP(Board Support Package)** 如果项目使用了 BSP,Vitis 2021.1 可能需要重新生成 BSP 以确保兼容性。右键点击 BSP 项目,选择 `Rebuild` 或 `Update BSP Settings`。 6. **解决依赖库冲突** 某些库在 Vitis 2020.2 和 2021.1 之间可能发生变化,例如 `xilkernel`、`lwip` 或 `xilffs`。如果构建失败,尝试更新库版本或重新添加最新版本的库支持。 7. **检查编译器警告与错误** 在构建过程中,注意编译器输出的警告信息,尤其是与废弃 API 或不推荐使用函数相关的提示。这些信息可以帮助识别潜在的兼容性问题。 ### 示例:更新 BSP 设置 ```bash Right-click on the BSP project → Board Support Package Settings → Recreate → Finish ``` ### 注意事项 - **版本兼容性文档**:Xilinx 官方提供了不同 Vitis 版本之间的兼容性指南,建议查阅官方文档以确认支持的迁移路径。 - **项目配置文件格式变更**:某些 `.project` 或 `.cproject` 文件可能需要手动调整以适应新版本的 Vitis。 - **调试配置迁移**:如果使用了自定义的调试配置(如 JTAG 设置),请检查并更新调试器配置文件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值