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

📄 fesc_5554_daemon.c

📁 MPC5554处理器的初始化例程
💻 C
字号:

/*====================================================================*/
/*   @  */
/*       ################################
         ##                            ##
         ##        ESCIA               ##
         ##                            ##
         ################################        */
void send_c_ESCIA_dpb(uint8_t schar)
{
    push_dpb_data(&ESCIA_DP_BUF,schar);
}

void ESCIA_out_daemon(void)
{ uint8_t schar;
  if((ESCIA_DP_BUF.n > 0)&&(ESCI_A.SR.B.TDRE ==1))
  { pop_dpb_data(&ESCIA_DP_BUF,&schar);
    ESCI_A.SR.R = 0x80000000;
    ESCI_A.DR.B.D = (uint8_t) schar;
  }
}

/*====================================================================*/
/*   @  */
/*       ################################
         ##                            ##
         ##       FPGA  SPI            ##
         ##                            ##
         ################################        */
 //spi0-5  FPGA SPI, all in Master Mode    
void FPGA_SPI_master_daemon(void)  
{
    uint8_t  i;

	  for(i=0;i<6;i++)
	  {   //------------------
	  	  if(SXC.CH[i].SXC_SR.B.RDF == 1)
	      {  SBP_Buf[i].cRx = SXC.CH[i].SPI_HOST_DATA_REG.B.DATA;
	      	 SXC.CH[i].SXC_CR.B.RDFC = 1;
	      	 ////
	      	 if((SBP_debug_info[i]&SBP_DETAIL_INFO_MASK)!=0) 
	      	   printp(send_c_ESCIA_dpb,"%d t:%02X r:%02X\n\r",i,SBP_Buf[i].cTx,SBP_Buf[i].cRx);
	      	 ////
	      	 SBP_Buf[i].cTx = SBP_Master_Parser(i,SBP_Buf[i].cRx);
	         SPI_LED_Refresh[i]  = 1;
	      }
	      if((SXC.CH[i].SXC_SR.B.BUSY==0)&&(SBP_Buf[i].isFinished == 0))
	      {  SXC.CH[i].SPI_HOST_DATA_REG.B.DATA = SBP_Buf[i].cTx;
	         SXC.CH[i].SXC_CR.B.TCFC = 1;
           SXC.CH[i].SXC_CR.B.SEND = 1;
	      }
	  }
}





/*====================================================================*/
/*   @  */
/*       ################################
         ##                            ##
         ##          SSP LOOP          ##
         ##                            ##
         ################################        */
void SYS_TICK_Daemon(void)
{ 
	if(sys_tick) sys_tick--;
	if(temp_tick) temp_tick--;
}


/*
--------------------+                                     +--------------------
       本系         |                                     |       对系
                    |                                     |
 |Self_CB|   =MT====|=>=================================>=|====MF=  |Mate_CB|
                    |                                     |
 |Mate_CB|   =MF====|=<=================================<=|====MT=  |Self_CB| 
                    |                                     |
--------------------+                                     +--------------------
*/
/*====================================================================*/
/*   @  */
/*       ################################
         ##                            ##
         ##       Master To            ##
         ##                            ##
         ################################        */
void MT_SPI_master_daemon(void)
{        
        if(SXC.CH[6].SXC_SR.B.RDF == 1)
	      {  SBP_Buf[6].cRx = SXC.CH[6].SPI_HOST_DATA_REG.B.DATA;
	      	 SXC.CH[6].SXC_CR.B.RDFC = 1;
	      	 ////
	      	 if((SBP_debug_info[6]&SBP_DETAIL_INFO_MASK)!=0) 
	      	   printp(send_c_ESCIA_dpb,"%d t:%02X r:%02X\n\r",6,SBP_Buf[6].cTx,SBP_Buf[6].cRx);
	      	 ////
	      	 SBP_Buf[6].cTx = SBP_Master_Parser(6,SBP_Buf[6].cRx);
	         SPI_LED_Refresh[6]  = 1;
	      }
	      if((SXC.CH[6].SXC_SR.B.BUSY==0)&&(SBP_Buf[6].isFinished == 0))
	      {  SXC.CH[6].SPI_HOST_DATA_REG.B.DATA = SBP_Buf[6].cTx;
	         SXC.CH[6].SXC_CR.B.TCFC = 1;
           SXC.CH[6].SXC_CR.B.SEND = 1;
	      }
}

/*====================================================================*/
/*   @  */
/*       ################################
         ##                            ##
         ##       Master From          ##
         ##                            ##
         ################################        */
void MF_SPI_slave_daemon(void)
{       uint8_t i;
        
	      if(SBP_Buf[7].isFinished == 1)
        { SBP_Buf[7].isFinished = 0;
        	printp(send_c_ESCIA_dpb,"ERROR: new MF data before last packet is processed\n\r");
        }
	      //--------通信协议处理------
        if(SXC.CH[7].SXC_SR.B.RDF == 1)
	      {  SBP_Buf[7].cRx = SXC.CH[7].SPI_HOST_DATA_REG.B.DATA;
	      	 SXC.CH[7].SXC_CR.B.RDFC = 1;
	      	 ////
	      	 if((SBP_debug_info[7]&SBP_DETAIL_INFO_MASK)!=0) 
	      	   printp(send_c_ESCIA_dpb,"%d t:%02X r:%02X\n\r",7,SBP_Buf[7].cTx,SBP_Buf[7].cRx);
	      	 ////
	      	 SBP_Buf[7].cTx = SBP_Slave_Parser(&SBP_Buf[7],SBP_Buf[7].cRx);
	         SPI_LED_Refresh[7]  = 1;
	      }
	      ///////if((SXC.CH[7].SXC_SR.B.BUSY==0)&&(SBP_Buf[7].isFinished == 0))
	      {  SXC.CH[7].SPI_HOST_DATA_REG.B.DATA = SBP_Buf[7].cTx;
	         SXC.CH[7].SXC_CR.B.TCFC = 1;
           SXC.CH[7].SXC_CR.B.SEND = 1;
	      } 
	      
	      
	      //---------通信内容处理-----
	      if(SBP_Buf[7].returnStat == SBP_RTSTUS_INSTRC_RX_OK)
        {
           SBP_Buf[7].returnStat = SBP_RTSTUS_UNKNOWN;
           if(SBP_Buf[7].InstrBuffer[1] == 'w') 
           {
           	  SBP_Buf[7].amIWriteData = 0;
           	  SBP_Buf[7].ssSPIStat  = spistRxReady;
           }
           else  //对于现在的场合,对系不需要通过这个SPI通道来读取内容
           	     //对系只会往这个通道里写入内容,写入的内容用于刷新Mate_CB结构体
           {  printp(send_c_ESCIA_dpb,"ERROR: not suppose to read from MF channel\n\r");
           	  SBP_Buf[7].amIWriteData = 1; 
           	  SBP_Buf[7].ssSPIStat  = spistTxReady;
           	  ////读取数据
           	  for(i=0;i<sizeof(MBCtrlBlock_tag);i++)
                 SBP_Buf[7].TxBuffer[i] = *(((uint8_t*)(&Self_CB))+i);
           	  SBP_Buf[7].iTxBufferLen = sizeof(MBCtrlBlock_tag);
           }
        }
        //-------------------------
        if(SBP_Buf[7].isFinished == 1)
        { SXC.CH[7].SXC_CR.B.self_packet_done = 1;
       	}
}

void MF_SPI_ALL_DONE_daemon(void)
{         uint8_t i;
        	if(SXC.CH[7].SXC_SR.B.both_packet_done == 1)
        	{
        		  if((SBP_debug_info[7]&SXC_ENABLE_MASK) != 0 ) 
        		  {
	        		  if(  SXC.CH[7].SXC_SR.B.slave_fail_first
			            || SXC.CH[7].SXC_SR.B.master_fail_first
			            ||(SXC.CH[7].SELF_WCR.B.CNT != SXC.CH[7].MATE_WCR.B.CNT)
			            ||(SXC.CH[7].SELF_PCR.B.CNT != SXC.CH[7].MATE_PCR.B.CNT)
			             ) 
			           {  SBP_Buf[7].returnStat += SBP_RTSTUS_SXC_Veto;
			           	  Mate_CB.alive = 1;  //even the transmition wrong, mate is still alive
		                dump_SXC_CH_info(7);
		             }
		          }
		          if((SBP_debug_info[7]&SBP_GENERAL_INFO_MASK)!=0) 
		              dump_SBP_lastPack(7);  
		    	
		        	if( (SBP_Buf[7].returnStat  == SBP_RTSTUS_OK)
		        		&&(SBP_Buf[7].iRxBufferLen==sizeof(MBCtrlBlock_tag))
		        		)
		        	{  //对系发送数据成功
                 for(i=0;i<sizeof(MBCtrlBlock_tag);i++)
                 *(((uint8_t*)(&Mate_CB))+i) = SBP_Buf[7].RxBuffer[i];
		        	}
		          init_SBP_Buf(7);
	            SBP_Buf[7].iRxBufferLen   = 0;
              SBP_Buf[7].isFinished     = 0;    //acctivate
		          SXC.CH[7].SXC_CR.B.PACKET_START   = 1;
          }
}          
          




⌨️ 快捷键说明

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