1开发平台为vivado2020.3,芯片是zynq7020clg400,CAN外设引脚为G17和G18,CAN-CLK时钟为FCLK1引出的16Mhz.CAN IP曾经在microblaze平台测试过,没有问题
2工作搭建完成后,在vitis上按照例程初始化,但是一起无法通过selfTest函数,状态寄存器值为全0.这个现象似乎说明CAN外设完全没有启动!

3 个人已经有ChatGPT4可提问,这种回答没有意义
1开发平台为vivado2020.3,芯片是zynq7020clg400,CAN外设引脚为G17和G18,CAN-CLK时钟为FCLK1引出的16Mhz.CAN IP曾经在microblaze平台测试过,没有问题
2工作搭建完成后,在vitis上按照例程初始化,但是一起无法通过selfTest函数,状态寄存器值为全0.这个现象似乎说明CAN外设完全没有启动!

关注让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如需一对一服务私聊我哦问题描述:在vivado2020.3开发平台上,使用zynq7020clg400芯片,CAN外设引脚为G17和G18,CAN-CLK时钟为FCLK1引出的16Mhz。曾经在microblaze平台测试过,没有问题。但是在vitis上按照例程初始化后,无法通过selfTest函数,状态寄存器值为全0,似乎CAN外设没有启动。 解决方案:
#include "xcan.h"
XCan Can; //定义全局CAN变量
#define CAN_DEVICE_ID XPAR_CAN_0_DEVICE_ID
int CanInit(void)
{
XCan_Config *CfgPtr = NULL;
int Status;
CfgPtr = XCan_LookupConfig(CAN_DEVICE_ID); //获取CAN外设配置
if (CfgPtr == NULL)
{
return XST_FAILURE;
}
//初始化CAN外设
Status = XCan_CfgInitialize(&Can, CfgPtr, CfgPtr->BaseAddress);
if (Status != XST_SUCCESS)
{
return XST_FAILURE;
}
//设置CAN工作模式为Normal
XCan_SetMode(&Can, XCAN_MODE_NORMAL);
//设置波特率为500kbps
XCan_SetBaudRatePrescaler(&Can, XCAN_BAUD_RATE_500K);
//启动CAN外设
XCan_Start(&Can);
return XST_SUCCESS;
}