⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cp0.c

📁 32cpu的代码
💻 C
📖 第 1 页 / 共 5 页
字号:
			           	                CPR[14]=pc_address_wp - 4;
			           	       /*    if((Status&(0x00000004)) == 0){
			           	         	  //ERL == 0
			           	                EPC=pc_address_wp - 4;
			           	                CPR[14]=pc_address_wp - 4;
			           	            }else{
			           	                 //ERL == 1
			           	                ErrorEPC=pc_address_wp - 4;
			           	                CPR[30]=pc_address_wp - 4;
			           	            }*/

			                    }else{
			           	                EPC=pc_address_wp;
			           	                CPR[14]=pc_address_wp;
			           	           /*if((Status&(0x00000004)) == 0){
			           	         	    //ERL == 0
			           	                EPC=pc_address_wp;
			           	                CPR[14]=pc_address_wp;
			           	            }else{
			           	                   //ERL == 1
			           	                ErrorEPC=pc_address_wp;
			           	                CPR[30]=pc_address_wp;
			           	            }*/
			                  }
                   	             }

			             Status=Status|(0x00000002);
			             CPR[12]=Status;
			            Cause=(Cause&(0xffffff03))|(0x00000020);   //Exc Code  in Cause is 8
			            CPR[13]=Cause;
                   	            instruction_dp=instruction_ip; 
                   	            instruction_ip=icache(pc_address_ip,0);
                   	            pc_ip=(pc_address_ip&(0x0000ffff))/4; 
                   	           break;
                   	  case 16 :  //BP   general exception
                   	            exception_flag=0;
                   	            exception_invalid_instr_flag=5;
                   	            if(((Status>>22)&(0x00000001)) == 1){
                   	            	//BEV in Status is one
                   	            	  pc_address_ip=0xbfc00380;
                   	             }else{
                   	               //BEV in Status is zero
                   	                  pc_address_ip=0x80000180;
                   	             }
                   	             if((Status&(0x00000002)) == 0){
			                   if(branch_flag_wp == 1){
			           	                EPC=pc_address_wp - 4;
			           	                CPR[14]=pc_address_wp - 4;
			           	        /*   if((Status&(0x00000004)) == 0){
			           	         	  //ERL == 0
			           	                EPC=pc_address_wp - 4;
			           	                CPR[14]=pc_address_wp - 4;
			           	            }else{
			           	                 //ERL == 1
			           	                ErrorEPC=pc_address_wp - 4;
			           	                CPR[30]=pc_address_wp - 4;
			           	            }*/

			                    }else{
			           	                EPC=pc_address_wp;
			           	                CPR[14]=pc_address_wp;
			           	     /*      if((Status&(0x00000004)) == 0){
			           	         	    //ERL == 0
			           	                EPC=pc_address_wp;
			           	                CPR[14]=pc_address_wp;
			           	            }else{
			           	                   //ERL == 1
			           	                ErrorEPC=pc_address_wp;
			           	                CPR[30]=pc_address_wp;
			           	            }*/
			                  }
                   	             }

			             Status=Status|(0x00000002);
			             CPR[12]=Status;
			            Cause=(Cause&(0xffffff03))|(0x00000024);   //Exc Code  in Cause is 9
			            CPR[13]=Cause;
                   	            instruction_dp=instruction_ip; 
                   	            instruction_ip=icache(pc_address_ip,0);
                   	            pc_ip=(pc_address_ip&(0x0000ffff))/4; 
                   	           break;
                   	  case 17 :  //CPU   general exception
                   	            exception_flag=0;
                   	            exception_invalid_instr_flag=5;
                   	            if(((Status>>22)&(0x00000001)) == 1){
                   	            	//BEV in Status is one
                   	            	  pc_address_ip=0xbfc00380;
                   	             }else{
                   	               //BEV in Status is zero
                   	                  pc_address_ip=0x80000180;
                   	             }
                   	             if((Status&(0x00000002)) == 0){
			                   if(branch_flag_wp == 1){
			           	                EPC=pc_address_wp - 4;
			           	                CPR[14]=pc_address_wp - 4;
			           	          /* if((Status&(0x00000004)) == 0){
			           	         	  //ERL == 0
			           	                EPC=pc_address_wp - 4;
			           	                CPR[14]=pc_address_wp - 4;
			           	            }else{
			           	                 //ERL == 1
			           	                ErrorEPC=pc_address_wp - 4;
			           	                CPR[30]=pc_address_wp - 4;
			           	            }*/

			                    }else{
			           	                EPC=pc_address_wp;
			           	                CPR[14]=pc_address_wp;
			           	          /* if((Status&(0x00000004)) == 0){
			           	         	    //ERL == 0
			           	                EPC=pc_address_wp;
			           	                CPR[14]=pc_address_wp;
			           	            }else{
			           	                   //ERL == 1
			           	                ErrorEPC=pc_address_wp;
			           	                CPR[30]=pc_address_wp;
			           	            }*/
			                  }
                   	             }

			             Status=Status|(0x00000002);
			             CPR[12]=Status;
			            Cause=(Cause&(0xffffff03))|(0x0000002c);   //Exc Code  in Cause is 11
			            CPR[13]=Cause;
                   	            instruction_dp=instruction_ip; 
                   	            instruction_ip=icache(pc_address_ip,0);
                   	            pc_ip=(pc_address_ip&(0x0000ffff))/4; 
                   	           break;
                   	  case 18 :  //RI   general exception
                   	            exception_flag=0;
                   	            exception_invalid_instr_flag=5;
                   	            if(((Status>>22)&(0x00000001)) == 1){
                   	            	//BEV in Status is one
                   	            	  pc_address_ip=0xbfc00380;
                   	             }else{
                   	               //BEV in Status is zero
                   	                  pc_address_ip=0x80000180;
                   	             }
                   	             if((Status&(0x00000002)) == 0){
			                   if(branch_flag_wp == 1){
			           	                EPC=pc_address_wp - 4;
			           	                CPR[14]=pc_address_wp - 4;
			           	         /*  if((Status&(0x00000004)) == 0){
			           	         	  //ERL == 0
			           	                EPC=pc_address_wp - 4;
			           	                CPR[14]=pc_address_wp - 4;
			           	            }else{
			           	                 //ERL == 1
			           	                ErrorEPC=pc_address_wp - 4;
			           	                CPR[30]=pc_address_wp - 4;
			           	            }*/

			                    }else{
			           	                EPC=pc_address_wp;
			           	                CPR[14]=pc_address_wp;
			           	         /*  if((Status&(0x00000004)) == 0){
			           	         	    //ERL == 0
			           	                EPC=pc_address_wp;
			           	                CPR[14]=pc_address_wp;
			           	            }else{
			           	                   //ERL == 1
			           	                ErrorEPC=pc_address_wp;
			           	                CPR[30]=pc_address_wp;
			           	            }*/
			                  }
                   	             }

			             Status=Status|(0x00000002);
			             CPR[12]=Status;
			            Cause=(Cause&(0xffffff03))|(0x00000028);   //Exc Code  in Cause is 10
			            CPR[13]=Cause;
                   	            instruction_dp=instruction_ip; 
                   	            instruction_ip=icache(pc_address_ip,0);
                   	            pc_ip=(pc_address_ip&(0x0000ffff))/4; 
                   	           break;
                   	  case 19 :  //OV   general exception
                   	            exception_flag=0;
                   	            exception_invalid_instr_flag=5;
                   	            if(((Status>>22)&(0x00000001)) == 1){
                   	            	//BEV in Status is one
                   	            	  pc_address_ip=0xbfc00380;
                   	             }else{
                   	               //BEV in Status is zero
                   	                  pc_address_ip=0x80000180;
                   	             }
                   	             if((Status&(0x00000002)) == 0){
			                   if(branch_flag_wp == 1){
			           	                EPC=pc_address_wp - 4;
			           	                CPR[14]=pc_address_wp - 4;
			           	        /*   if((Status&(0x00000004)) == 0){
			           	         	  //ERL == 0
			           	                EPC=pc_address_wp - 4;
			           	                CPR[14]=pc_address_wp - 4;
			           	            }else{
			           	                 //ERL == 1
			           	                ErrorEPC=pc_address_wp - 4;
			           	                CPR[30]=pc_address_wp - 4;
			           	            }*/

			                    }else{
			           	                EPC=pc_address_wp;
			           	                CPR[14]=pc_address_wp;
			           	        /*   if((Status&(0x00000004)) == 0){
			           	         	    //ERL == 0
			           	                EPC=pc_address_wp;
			           	                CPR[14]=pc_address_wp;
			           	            }else{
			           	                   //ERL == 1
			           	                ErrorEPC=pc_address_wp;
			           	                CPR[30]=pc_address_wp;
			           	            }*/
			                  }
                   	             }

			             Status=Status|(0x00000002);
			             CPR[12]=Status;
			            Cause=(Cause&(0xffffff03))|(0x00000030);   //Exc Code  in Cause is 12
			            CPR[13]=Cause;
                   	            instruction_dp=instruction_ip; 
                   	            instruction_ip=icache(pc_address_ip,0);
                   	            pc_ip=(pc_address_ip&(0x0000ffff))/4;  
                   	           break;
                   	  case 20 :  //TR   general exception
                   	            exception_flag=0;
                   	            exception_invalid_instr_flag=5;
                   	            if(((Status>>22)&(0x00000001)) == 1){
                   	            	//BEV in Status is one
                   	            	  pc_address_ip=0xbfc00380;
                   	             }else{
                   	               //BEV in Status is zero
                   	                  pc_address_ip=0x80000180;
                   	             }
                   	             if((Status&(0x00000002)) == 0){
			                   if(branch_flag_wp == 1){
			           	                EPC=pc_address_wp - 4;
			           	                CPR[14]=pc_address_wp - 4;
			           	          /* if((Status&(0x00000004)) == 0){
			           	         	  //ERL == 0
			           	                EPC=pc_address_wp - 4;
			           	                CPR[14]=pc_address_wp - 4;
			           	            }else{
			           	                 //ERL == 1
			           	                ErrorEPC=pc_address_wp - 4;
			           	                CPR[30]=pc_address_wp - 4;
			           	            }*/

			                    }else{
			           	                EPC=pc_address_wp;
			           	                CPR[14]=pc_address_wp;
			           	     /*      if((Status&(0x00000004)) == 0){
			           	         	    //ERL == 0
			           	                EPC=pc_address_wp;
			           	                CPR[14]=pc_address_wp;
			           	            }else{
			           	                   //ERL == 1
			           	                ErrorEPC=pc_address_wp;
			           	                CPR[30]=pc_address_wp;
			           	            }*/
			                  }
                   	             }
                                      printf("\nStatus=%08x\n",Status);
			             Status=Status|(0x00000002);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -