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