OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3811|回复: 1

[XILINX] zynq领航者amp实验无法触发软中断

[复制链接]

10

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-2-4
在线时间
47 小时
发表于 2022-7-14 21:32:55 | 显示全部楼层 |阅读模式
40金钱
开发环境是vivado 2019,新建工程实现了呼吸灯,新建vitis工程,将原子的代码拷贝到C程序中,并且设置了所有的参数。现象是:根据打印信息,CPU0和CPU1都启动运行程序了,但是CPU0向CPU1发送软中断,CPU1没有进入中断;更改程序CPU1向CPU0发送中断信号,CPU0也没有进入中断;更改程序CPU0向自身发送软中断,也没有进入中断。
问题:怎么判断CPU0和CPU1的中断是否打开?是否是配置错误?以下是代码,请大神赐教
int main()
{
        //S=b1 TEX=b100 AP=b11, Domain=b1111, C=b0, B=b0
        Xil_SetTlbAttributes(SHARE_BASE,0x14de2);    //禁用OCM的Cache属性

        //S=b1 TEX=b100 AP=b11, Domain=b1111, C=b0, B=b0
        Xil_SetTlbAttributes(CPU1_COPY_ADDR,0x14de2);//禁用0xfffffff0的Cache属性

        //启动CPU1
        start_cpu1();
        //CPU0中断初始化
        cpu0_intr_init(&Intc);
        while(1){
                if(rec_freq_flag == 0){
                        xil_printf("This is CPU0,Please input the numbers 1~5 to change "
                                        "breath led frequency\r\n");
                        scanf("%d",&freq_gear);
                        if(freq_gear >= 1 && freq_gear <=5){
                                xil_printf("You input number is %d\r\n",freq_gear);
                                //向共享的地址中写入输入的数据
                                Xil_Out8(SHARE_BASE,freq_gear);
                                //给CPU1触发中断
                                //XScuGic_SoftwareIntr(&Intc,SOFT_INTR_ID_TO_CPU1,CPU1_ID);
                                rec_freq_flag = 1;
                                xil_printf("CPU0 has send interrupt signal\r\n");
                        }
                        else{
                                xil_printf("Error,The number range is 1~5\r\n");
                                xil_printf("\r\n");
                        }
                }
                XScuGic_SoftwareIntr(&Intc,SOFT_INTR_ID_TO_CPU0,CPU0_ID);
                sleep(5);
        }
        return 0 ;
}


void cpu0_intr_init(XScuGic *intc_ptr)
{
        //初始化中断控制器
        XScuGic_Config *intc_cfg_ptr;


    //设置并打开中断异常处理功能
    Xil_ExceptionInit();

    intc_cfg_ptr = XScuGic_LookupConfig(INTC_DEVICE_ID);
    XScuGic_CfgInitialize(intc_ptr, intc_cfg_ptr,intc_cfg_ptr->CpuBaseAddress);

    Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,(Xil_ExceptionHandler)XScuGic_InterruptHandler, intc_ptr);

    XScuGic_Connect(intc_ptr, SOFT_INTR_ID_TO_CPU0,(Xil_ExceptionHandler)soft_intr_handler, (void *)intc_ptr);

    XScuGic_Enable(intc_ptr, SOFT_INTR_ID_TO_CPU0); //CPU0软件中断

    Xil_ExceptionEnable();
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

101

帖子

0

精华

高级会员

Rank: 4

积分
640
金钱
640
注册时间
2021-8-3
在线时间
151 小时
发表于 2022-7-16 11:05:33 | 显示全部楼层
本帖最后由 helloqds 于 2022-7-16 13:15 编辑

教程是用sdk做的,vitis和sdk里面的设置不一样的。可以先换成sdk,看看有没有问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-4 02:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表