关于zynq7020的printf函数的执行时间,与中断延迟 - minichao9901/TangNano-20k-Zynq-7020 GitHub Wiki
兄弟们,关于那个printf执行时间的问题,破案了。 确实是coresight_uart速度慢的原因。 printf("hello world\r\n"),用ps_uart只需要13us,用coresight_uart需要25ms。
中断延迟500ns-1us不等,最大中断工作频率可以到500kHz。
需要include ACZ702_Lib
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "ACZ702_Lib/COMMON.h"
#define PS_EMIO_KEY (54+0)
#define PS_EMIO_LED (54+1)
u8 state=0;
void PS_GPIO_IRQ_Handler(void *CallBackRef, uint32_t Bank, uint32_t Status)
{
if(XGpioPs_IntrGetStatusPin(&GpioPs, PS_EMIO_KEY)) {
state=!state;
PS_GPIO_SetPort(PS_EMIO_LED,state);
XGpioPs_IntrClearPin(&GpioPs, PS_EMIO_KEY);
}
}
int main_ps_emio(void)
{
PS_GPIO_Init(); //初始化PS端MIO和EMIO
//设置PL_LED(EMIO0)为输出并且初始为低电平
PS_GPIO_SetMode(PS_EMIO_LED, OUTPUT, 0);
return 0;
}
int main_gpio_irq(void)
{
//GIC通用中断控制器初始化
ScuGic_Init();
{
//初始化PS端GPIO
PS_GPIO_Init();
//设置PS_KEY(MIO47)方向为输入
PS_GPIO_SetMode(PS_EMIO_KEY, INPUT, 0);
//设置按键PS_KEY的中断为边沿敏感
PS_GPIO_SetInt(PS_EMIO_KEY,XGPIOPS_IRQ_TYPE_EDGE_RISING);
//初始化PS GPIO中断
PS_GPIO_Int_Init(PS_GPIO_IRQ_Handler);
}
return 0;
}
int main()
{
init_platform();
// XTime t1,t2;
// XTime_GetTime(&t1);
// printf("hello world!\r\n");
// XTime_GetTime(&t2);
//
// int dt21 = (u32)(t2-t1) * (1000000.0/ COUNTS_PER_SECOND);
// xil_printf("dt21=%d\r\n", dt21);
main_ps_emio();
// main_gpio_irq();
ScuF2P_Int_Init(XPS_FPGA0_INT_ID);
// ScuTimer_Int_Init(2);
while(1){
}
cleanup_platform();
return 0;
}