初级会员 
  
	- 积分
 - 77
 
        - 金钱
 - 77 
 
       - 注册时间
 - 2016-2-4
 
      - 在线时间
 - 49 小时
 
 
 
 | 
 
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(); 
} 
 
 
 
 |   
 
 
 
 
 
 |