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

📄 hpi.c

📁 单片机和DSP之间的hpi模块程序,实现单片机和dsp的数据传输,单片机是华邦单片机
💻 C
📖 第 1 页 / 共 4 页
字号:

void ZHomeGridRead()
{
 
    if(!bDSPStart)
      return;

    HPIWordWrite(HPIAAdr,ZHomeGrindAddress);
    HPIWordRead(HPIDAdr, &ParameterValue.unZHomeGrid);
}



/*************************************************************************
*   函数名称: RadiasRead()                                                             
*   输入参数:                                                                                                     *
*                         无                                                                                                 *
*   输出参数:                                                                                                     *  
*                         无                                                                                                 *
*                                                                                                                                *
**************************************************************************/

void RadiasRead()
{
 
    if(!bDSPStart)
      return;

   HPIBlockRead(RadiasFeedBackAddress, (uchar *)&lRadiasFeedback, 4);

}



/*************************************************************************
*   函数名称: ZeroOffsetRead()                                                                           *                         
*                                                      *
*   输入参数:                                                                                                     *
*                         无                                                                                                 *
*   输出参数:                                                                                                     *  
*                         无                                                                                                 *
*                                                                                                                                *
**************************************************************************/

void ZeroOffsetRead()
{
 
    if(!bDSPStart)
      return;

    if((ParameterValue.ucBitParameter3&0x01)!=0)
    {
       HPIWordWrite(HPIAAdr,YZeroOffsetAddress);
       HPIWordRead(HPIDAdr, &ParameterValue.unYZeroOffset);

	if((ParameterValue.unYZeroOffset<PARAMETERTABLE[26].lMin)||(ParameterValue.unYZeroOffset>PARAMETERTABLE[26].lMax))
	   ParameterValue.unYZeroOffset=2048;
    }
	
    if((ParameterValue.ucBitParameter3&0x02)!=0)	
    {   
       HPIWordWrite(HPIAAdr,ZZeroOffsetAddress);
       HPIWordRead(HPIDAdr, &ParameterValue.unZZeroOffset);
	if((ParameterValue.unZZeroOffset<PARAMETERTABLE[27].lMin)||(ParameterValue.unZZeroOffset>PARAMETERTABLE[27].lMax))
	   ParameterValue.unZZeroOffset=2048;

    }
}



/*************************************************************************
*   函数名称: PitchOffsetWrite()                                                                           *                         
*                                                *
*   输入参数:                                                                                                     *
*                         无                                                                                                 *
*   输出参数:                                                                                                     *  
*                         无                                                                                                 *
*                                                                                                                                *
**************************************************************************/
void  PitchOffsetWrite() 
{

    if(!bDSPStart)
      return;
	
    HPIBlockWrite(YPitchOffsetAddress, (uchar *)&nYPitchOffset,512);

    HPIBlockWrite(ZPitchOffsetAddress, (uchar *)&nZPitchOffset,512);   
}


/*************************************************************************
*   函数名称: PLCDiagnoseSignelRead()                                                              *                         
*                                     *
*   输入参数:                                                                                                   *
*                         无                                                                                               *
*   输出参数:                                                                                                   *  
*                         无                                                                                               *
*                                                                                                                              *
**************************************************************************/

void PLCDiagnoseSignelRead()    
{
   if(!bDSPStart)
      return;
   
   HPIBlockRead(PLCDiagnoseSignelAddress, (uchar *)&PLCDiagnoseSignel, 114);
   
}


/*************************************************************************
*   函数名称: PLCProgramWrite()                                                                        *                         
*                                                                    *
*   输入参数:                                                                                                     *
*                         无                                                                                                 *
*   输出参数:                                                                                                     *  
*                         送传结果                                                                                 *
*                                                                                                                                *
**************************************************************************/

uchar  PLCProgramWrite() 
{
    uint  idata unLength;		
    uint  idata unIndex;
    uint  idata unCounter;
    uchar idata ucError;
    uchar idata ucByteLow;

    if((eAlarm<ParameterError)||((!bDSPStart)))
      return(1);
	
    unLength=unPLCProgramCodeUsed*3;
    ucError=HPIWordWrite(HPIAAdr, (PLCProgramAddress-1));               //写入数据块的目标开始地址

    if(ucError==1)                                                               //出错处理
      return(1);

    EA = 0;                                   //关中断 
	
    for(unIndex=0;unIndex<unLength;unIndex++)                    //连续写数据,不用再写入地址
    {                                                    
	 ucByteLow=*((uchar *)PLC_Code+ unIndex);               //先取数,避免在HPI操作过程中读写外部数据
                                                                                           //高位恒为0x00
       bHPI_HCS= 0;
       
       unCounter=0;
   	 bHPI_RDY=1;
       while((!bHPI_RDY)&&(unCounter<1000))
         unCounter++;
       if(!bHPI_RDY)
         return(1);
         
       HPIOutputb(HPIIAdr1W)=0x00;                                //HPI的自增寄存器

       unCounter=0;
   	 bHPI_RDY=1;
       while((!bHPI_RDY)&&(unCounter<1000))
         unCounter++;
       if(!bHPI_RDY)
         return(1);

       HPIOutputb(HPIIAdr2W)=ucByteLow;

       bHPI_HCS= 1;

    }
      
   EA = 1;                                   //开中断   
   
   return(0);
}


/*************************************************************************
*   函数名称: HandShakeRead()                                                                          *                         
*                                                                 *
*   输入参数:                                                                                                     *
*                         无                                                                                                *
*   输出参数:                                                                                                     *  
*                         读取的状态字                                                                      *
*                                                                                                                                *
**************************************************************************/

uchar HandShakeRead()
{
   uchar idata ucByteTemp[8];
   uchar idata ucCounter;

   HPIBlockRead(HandShakeAddress, ucByteTemp, 8);

   ucCounter=0;
   while((ucCounter<8)&&(ucByteTemp[ucCounter++]==0x55));
   
   if(ucCounter==8)
      return(0x55);

   ucCounter=0;
   while((ucCounter<8)&&(ucByteTemp[ucCounter++]==0xAA));
  	
   if(ucCounter==8)
      return(0xAA);
   else
      return(0);
   
}


/*************************************************************************
*   函数名称: HandShakewrite()                                                                           *                         
*   函数用途: 送握手信号                                                     *
*   输入参数:                                                                                                         *
*                         ucByteHigh:  状态字高字节                                                      *
*                         ucByteLow :  状态字低字节                                                     *
*   输出参数:                                                                                                        *  
*                         无                                                                                                    *
*                                                                                                                                  *
**************************************************************************/

void  HandShakeWrite(uchar ucByteHigh,uchar ucByteLow)
{
   uchar idata ucByteTemp[8];
   uchar idata ucCounter;
   
   ucCounter=0; 
   while(ucCounter<8)
   {
       ucByteTemp[ucCounter++]=ucByteHigh;
	ucByteTemp[ucCounter++]=ucByteLow;
   }

   HPIBlockWrite(HandShakeAddress, ucByteTemp, 8);  

}

⌨️ 快捷键说明

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