关于zynq7020的printf函数的执行时间,与中断延迟 - minichao9901/TangNano-20k-Zynq-7020 GitHub Wiki

printf执行时间

e97309027a0f392ed2785a30c0d883bf

兄弟们,关于那个printf执行时间的问题,破案了。 确实是coresight_uart速度慢的原因。 printf("hello world\r\n"),用ps_uart只需要13us,用coresight_uart需要25ms。

中断延迟

image image

中断延迟500ns-1us不等,最大中断工作频率可以到500kHz。

程序代码

image

需要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;
}
⚠️ **GitHub.com Fallback** ⚠️