> 文档中心 > zynq 7000 sdk下裸机can(ps/pl) 调试

zynq 7000 sdk下裸机can(ps/pl) 调试

1. SDK下打开system.mss文件,如下图所示,import examples导入polled相关例程。

因为我们的设备上有两个can,一个ps端一个pl端的,原理图在can收发器侧一样。

2. ps 端参调试

确定逻辑对ps can的clock配置值,为100M,参考《ug585-Zynq-7000-TRM.pdf》手册,计算can波特率

波特率=100M/ ((49 +1)*(3 +15 +2)) = 100k

int CanPsPolledExample(u16 DeviceId){int Status;XCanPs *CanInstPtr = &Can;XCanPs_Config *ConfigPtr;/* * Initialize the Can device. */ConfigPtr = XCanPs_LookupConfig(DeviceId);if (CanInstPtr == NULL) {return XST_FAILURE;}Status = XCanPs_CfgInitialize(CanInstPtr,ConfigPtr,ConfigPtr->BaseAddr);if (Status != XST_SUCCESS) {return XST_FAILURE;}/* * Run self-test on the device, which verifies basic sanity of the * device and the driver. */Status = XCanPs_SelfTest(CanInstPtr);if (Status != XST_SUCCESS) {return XST_FAILURE;}xil_printf("SelfTest successfuly \r\n\r\n");/* * Enter Configuration Mode so we can setup Baud Rate Prescaler * Register (BRPR) and Bit Timing Register (BTR). */XCanPs_EnterMode(CanInstPtr, XCANPS_MODE_CONFIG);while(XCanPs_GetMode(CanInstPtr) != XCANPS_MODE_CONFIG);/* * Setup Baud Rate Prescaler Register (BRPR) and * Bit Timing Register (BTR). ps_can_clock = 100M . */XCanPs_SetBaudRatePrescaler(CanInstPtr, /*TEST_BRPR_BAUD_PRESCALAR*/ 49);XCanPs_SetBitTiming(CanInstPtr, TEST_BTR_SYNCJUMPWIDTH,TEST_BTR_SECOND_TIMESEGMENT,TEST_BTR_FIRST_TIMESEGMENT);/* * Enter Loop Back Mode. */#define ps_can_clock 100000000  //100MXCanPs_EnterMode(CanInstPtr, XCANPS_MODE_SLEEP);while(XCanPs_GetMode(CanInstPtr) != XCANPS_MODE_SLEEP);xil_printf("ps can bitRate: %lu bps\r\n", ps_can_clock/((49+1)* (3+15+2)));/* * Send a frame, receive the frame via the loop back and verify its * contents. */Status = SendFrame(CanInstPtr);if (Status != XST_SUCCESS) {return Status;}xil_printf("recving ....... \r\n");while(1){Status = RecvFrame(CanInstPtr);}return Status;}

can消息格式:有效负载为DWR, DW2R

 

确定发送id

2. 使用宇泰的 8251 usb can设备,按照说明书设置好can卡,波特率为100k.

sdk启动debug,上来就会发送一帧数据个给外部can设备,使用宇泰can上位机给板子发数据,板子侧添加收数据打印信息。

3. pl 侧can和ps测试过程一样,需要注意can clock是多少,去计算can波特率