100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Zynq-Linux移植学习笔记之52-国产ZYNQ standalone PL-PS中断调试

Zynq-Linux移植学习笔记之52-国产ZYNQ standalone PL-PS中断调试

时间:2020-04-05 09:11:10

相关推荐

Zynq-Linux移植学习笔记之52-国产ZYNQ standalone PL-PS中断调试

1、背景介绍

目前采用国产ZYNQ替代进口xilinx ZYNQ,在调试PL-PS的中断时,和进口Xilinx ZYNQ有区别,记录如下。

2、vivado工程

直接引入一个GPIO输入ZYNQ PL-PS

ZYNQ中配置PL-PS中断

此时vivado工程配置完毕

3、procise工程

由于国产ZYNQ与进口ZYNQ还是存在区别,PL-PS的中断号和进口的不一样,需要在procise中查看实际的中断号。

Procise从vivado中导入文件,产生国产ZYNQ的硬件连接关系,导入后点击ZYNQ能看到PL-PS的中断序号已经改变了

国产的前8个中断号是从57-64,而进口的是从61-68.

4、SDK代码

从procise中导出工程到IAR中,代码如下,中断方式为上升沿触发。

/** helloworld.c: simple test application** This application configures UART 16550 to baud rate 9600.* PS7 UART (JFM_QL_PS) is not initialized by this application, since* bootrom/bsp configures it to baud rate 115200** ------------------------------------------------* | UART TYPE BAUD RATE |* ------------------------------------------------* uartns550 9600* uartlite Configurable only in HW design* ps7_uart 115200 (configured by bsp)*/#include <stdio.h>#include "platform.h"#include "fmsh_common.h"#include "ps_init.h"#include "fmsh_print.h"#include "fmsh_gic.h"#include "fmsh_gpio_public.h"#define INTC_DEVICE_IDGIC_DEVICE_ID//0FGicPs_Config *GicConfig; /* The configuration parameters of the controller */int pl_irq_cnt = 0;void GPIO_InterruptHandler(void *InstancePtr){pl_irq_cnt++;printf("in inc handle!!!!\r\n\r\n"); }//PS端中断初始化函数int axi_irq_request(void *InstancePtr) {u32 Status;Status = FGicPs_SetupInterruptSystem(InstancePtr);if(Status!=GIC_SUCCESS){return GIC_FAILURE ;}Status = FGicPs_Connect(InstancePtr, PL0_INT_ID, (FMSH_InterruptHandler)GPIO_InterruptHandler, InstancePtr );if(Status != GIC_SUCCESS) {return GIC_FAILURE;} FGicPs_SetPriorityTriggerType(InstancePtr, PL0_INT_ID, 0xA0, 0x3);//设置触发方式FMSH_ExceptionRegisterHandler(FMSH_EXCEPTION_ID_IRQ_INT,(FMSH_ExceptionHandler)FGicPs_InterruptHandler_IRQ,InstancePtr); // FMSH_ExceptionEnable(); FGicPs_Enable(InstancePtr, PL0_INT_ID); //注意中断号是57return GIC_SUCCESS;}int main(){init_platform();FMSH_WriteReg(FPS_SLCR_BASEADDR, 0x008, 0xDF0D767BU); //unlockFMSH_WriteReg(FPS_SLCR_BASEADDR, 0x838, 0xf); //Open USER_LVL_SHFTR_EN_A and USER_LVL_SHFTR_EN_5FMSH_WriteReg(FPS_SLCR_BASEADDR, 0x004, 0xDF0D767BU); //lockprintf("hello world\n\r");axi_irq_request(&IntcInstance); //PS中断控制器初始化while(1){delay_ms(1000);printf("pl_irq_cnt:%d\n\r", pl_irq_cnt);}cleanup_platform();return 0;}

注意中断号从57开始

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。