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

📄 ifctrl.c

📁 日本IRON os 在汽车电子中的应用 高度机密
💻 C
📖 第 1 页 / 共 2 页
字号:
		ucHST_d_sts_buf[2] = ucDSP_romver;	/* ROM Version 愝掕			*/
		ucHST_d_sts_buf[3] = ucDSP_lsiver;	/* LSI Version 愝掕			*/
	}
	/* 忋婰埲奜偼 0 愝掕 */
#endif	/*	SSPFMODE==SSPF_V1	*/
}


/************************************************************************/
/*!
  @fn			void vUART_HeaderWaitMode( void )
  @brief		UART憲庴怣 僿僢僟乕懸偪儌乕僪張棟
  @brief		弶婜壔張棟丄DMA0/1妱崬傒張棟丄1,5ms廃婜僴儞僪儔張棟偱婲摦
  @param		側偟
  @return		側偟
  @date			2007/xx/xx
*/
/************************************************************************/
void vHST_HeaderWaitMode( void )
{
	ucHST_m_com_mode = ucHST_M_HEADER_WAIT;	/* 僿僢僟乕懸偪儌乕僪愝掕		*/
	ucHST_t_com_emg  = ucHST_T_20MS;		/* 捠怣娔帇僞僀儅 弶婜愝掕		*/

	/********************************/
	/* 僔儕傾儖0丄DMA0,1 掆巭愝掕 	*/
	/********************************/
#if (PCCOM == DMA)
	mHST_SREG_SET_DMA0_DISABLE();		/* DMA0 揮憲僨傿僙乕僽儖			*/
	mHST_SREG_SET_DMA1_DISABLE();		/* DMA1 揮憲僨傿僙乕僽儖			*/
#endif

	begin_critical();					/* 慡妱崬傒嬛巭						*/
#if (PCCOM == DMA)
	mHST_SREG_SET_DMA0IRQ_DISABLE();	/* DMA0 揮憲廔椆妱崬傒嬛巭愝掕		*/
	mHST_SREG_SET_DMA1IRQ_DISABLE();	/* DMA1 揮憲廔椆妱崬傒嬛巭愝掕		*/
#elif (PCCOM == SERIAL)
	mHST_SREG_SET_SIF0RIRQ_DISABLE();	/* SIF CH0庴怣妱崬傒嬛巭愝掕		*/
	mHST_SREG_SET_SIF0TIRQ_DISABLE();	/* SIF CH0憲怣妱崬傒嬛巭愝掕		*/
#endif
	end_critical();						/* 慡妱崬傒嫋壜						*/

	mHST_SREG_SET_SIF0_STOP();			/* 僔儕傾儖掆巭愝掕					*/

	/********************************/
	/* 捠怣娭楢儗僕僗僞弶婜壔		*/
	/********************************/
	vSet_Sc0Init();						/* 僔儕傾儖婡擻弶婜壔				*/
#if (PCCOM == DMA)
	vSet_Dma0Init();					/* DMA0 婡擻弶婜壔					*/
	vSet_Dma1Init();					/* DMA1 婡擻弶婜壔					*/
#endif /* (PCCOM == DMA) */

#if (PCCOM == DMA)

	/********************************************/
	/* 僔儕傾儖ON / DMA0揮憲 / 妱崬傒 嫋壜愝掕	*/
	/********************************************/
	mHST_SREG_SET_SIF0_START();			/* UART CH0 憲庴怣僀僱乕僽儖		*/
	mHST_SREG_SET_DMA0_ENABLE();		/* DMA0 揮憲 僀僱乕僽儖				*/

	begin_critical();					/* 慡妱崬傒嬛巭						*/
	mHST_SREG_SET_DMA0IRQ_ENABLE();		/* DMA0 揮憲廔椆妱崬傒嫋壜			*/
	end_critical();						/* 慡妱崬傒嫋壜						*/

#else

	/********************************************/
	/* 僔儕傾儖ON / 庴怣妱崬傒 嫋壜愝掕			*/
	/********************************************/
	mHST_SREG_SET_SIF0_START();			/* UART CH0 憲庴怣僀僱乕僽儖		*/

	begin_critical();					/* 慡妱崬傒嬛巭						*/
	mHST_SREG_SET_SIF0RIRQ_ENABLE();	/* SIF CH0 庴怣妱崬傒嫋壜			*/
	end_critical();						/* 慡妱崬傒嫋壜						*/

#endif /* (PCCOM == DMA) */

}


/************************************************************************/
/*!
  @fn			void vHST_GetCmdMode( void )
  @brief		UART憲庴怣 僐儅儞僪庢摼懸偪儌乕僪張棟
  @brief		DMA0 妱崬傒偱婲摦
  @param		側偟
  @return		側偟
  @date			2007/xx/xx
*/
/************************************************************************/
void vHST_GetCmdMode( void )
{
	ucHST_m_com_mode = ucHST_M_GET_CMD;	/* 僐儅儞僪庢摼儌乕僪愝掕		*/

	/****************************/
	/* DMA0 揮憲 DISABLE愝掕	*/
	/****************************/
	mHST_SREG_SET_DMA0_DISABLE();		/* DMA0 揮憲僨傿僙乕僽儖		*/
	if ( bCPU_DM0RQF ){					/* 揮憲姰椆忬懺偺応崌			*/
		vSet_DmaPreSetWait(0);			/* DMA0 揮憲姰椆懸偪			*/
	}

	/****************************/
	/* DMA0 婡擻 嵞愝掕			*/
	/****************************/
	ui32_CPU_DM0DST = (ULONG)((UCHAR*)&ucHST_d_com_buf + 1);
										/* 傾僪儗僗嵞愝掕				*/
	ui16_CPU_DM0CNT	= 1;				/* DMA揮憲岅悢儗僕僗僞丗1byte	*/

	/****************************/
	/* DMA0 揮憲 ENABLE愝掕		*/
	/****************************/
	mHST_SREG_SET_DMA0_ENABLE();		/* DMA0 揮憲 僀僱乕僽儖			*/

}


/************************************************************************/
/*!
  @fn			void vHST_GetDataMode( void )
  @brief		UART憲庴怣 僨乕僞庢摼懸偪儌乕僪張棟
  @param		側偟
  @return		側偟
  @date			2007/xx/xx
*/
/************************************************************************/
void vHST_GetDataMode( void )
{
	ucHST_m_com_mode = ucHST_M_GET_DATA;

	/****************************/
	/* DMA0 揮憲 DISABLE愝掕	*/
	/****************************/
	mHST_SREG_SET_DMA0_DISABLE();		/* DMA0 揮憲僨傿僙乕僽儖		*/
	if ( bCPU_DM0RQF ){					/* 揮憲姰椆忬懺偺応崌			*/
		vSet_DmaPreSetWait(0);			/* DMA0 揮憲姰椆懸偪			*/
	}

	/****************************/
	/* DMA0 婡擻 嵞愝掕			*/
	/****************************/
	ui32_CPU_DM0DST = (ULONG)((UCHAR*)&ucHST_d_com_buf + 2);
										/* 奿擺僶僢僼傽愭摢傾僪儗僗		*/
	ui16_CPU_DM0CNT	= ucHST_d_com_buf[1]+1;				/* DMA揮憲岅悢儗僕僗僞丗8byte	*/

	/****************************/
	/* DMA0 揮憲 ENABLE愝掕		*/
	/****************************/
	mHST_SREG_SET_DMA0_ENABLE();		/* DMA0 揮憲 僀僱乕僽儖			*/

}


/************************************************************************/
/*!
  @fn			void vHST_AnalysisCmdMode( void )
  @brief		UART憲庴怣 僐儅儞僪夝愅儌乕僪張棟
  @param		側偟
  @return		側偟
  @date			2007/xx/xx
*/
/************************************************************************/
void vHST_AnalysisCmdMode( void )
{
	UCHAR	sum;

	ucHST_m_com_mode = ucHST_M_ANALYSIS_CMD;		/* 僐儅儞僪夝愅儌乕僪愝掕		*/

	mHST_SREG_SET_DMA0_DISABLE();					/* DMA0 揮憲僨傿僙乕僽儖		*/

	/* 僨乕僞妋擣 */
	sum = ucHST_CmdCheckSumCalc();					/* CHECK SUM 嶼弌				*/
	if ( ucHST_d_com_buf[ucHST_d_com_buf[1]+2] == sum ){	/* CHECK SUM 堦抳				*/
		vHST_SetMessage();							/* 昞帵僐儞僩儘乕儔傊梫媮 		*/
		vHST_HeaderWaitMode();	//vHST_StatusOutMode();						/* 僗僥乕僞僗憲怣				*/
	}
	else {
		vHST_HeaderWaitMode();						/* 僿僢僟乕懸偪偵慗堏			*/
	}
}


/************************************************************************/
/*!
  @fn			void vHST_StatusOutMode( void )
  @brief		UART憲庴怣 僗僥乕僞僗嶌惉
  @param		側偟
  @return		側偟
  @date			2007/xx/xx
*/
/************************************************************************/
void vHST_StatusOutMode( void )
{
	UCHAR	i,sum;

	ucHST_m_com_mode = ucHST_M_STATUS_OUT;		/* 僗僥乕僞僗嶌惉儌乕僪愝掕		*/
	for (i=0;i<PACK_SIZE_MAX;i++){				/* 憲怣僶僢僼傽弶婜壔			*/
		ucHST_d_sts_buf[i] = 0;
	}
	ucHST_d_sts_buf[0] = ucHST_SHEADER_ID;			/* 僗僥乕僞僗僿僢僟乕愝掕	*/
	ucHST_d_sts_buf[1] = ucHST_d_com_buf[1] | 0x80;	/* 庴怣僐儅儞僪ID愝掕		*/
	vHST_StatusSet();								/* 僗僥乕僞僗嶌惉張棟		*/
	ucHST_d_sts_buf[8] = ucHST_d_com_ack;			/* ACK/NACK 愝掕			*/

	sum = ucHST_StsCheckSumCalc();				/* CHECK SUM 嶼弌				*/
	ucHST_d_sts_buf[ucPACK_CHKSUM] = sum;		/* 僠僃僢僋僒儉愝掕				*/

#if (PCCOM == DMA)
	/* DMA1婡擻弶婜壔 */
	vSet_Dma1Init();							/* DMA1 婡擻弶婜壔				*/

	/* DMA巊梡偺偨傔丄PC懁偑僨乕僞傪惓忢庴怣偱偒側偄壜擻惈偁傝	*/
	/* 僗僩僢僾價僢僩2 偲偡傞偙偲偱巄掕懳墳 					*/
	bCPU_SC0SB = 1;								/* 僗僩僢僾價僢僩 2bit			*/

	/* DMA1 揮憲/妱崬傒嫋壜 愝掕 */
	begin_critical();							/* 慡妱崬傒嬛巭					*/
	mHST_SREG_SET_DMA1IRQ_ENABLE();				/* DMA1妱崬傒 嫋壜愝掕			*/
	end_critical();								/* 慡妱崬傒嫋壜					*/
	mHST_SREG_SET_DMA1_ENABLE();				/* DMA1 揮憲僀僱乕僽儖			*/

#else	/* (PCCOM == DMA) */

	/* CH0 憲怣妱崬傒嫋壜 */
	begin_critical();							/* 慡妱崬傒嬛巭					*/
	mHST_SREG_SET_SIF0TIRQ_ENABLE();			/* SIF CH0 憲怣妱崬傒嫋壜愝掕	*/
	end_critical();								/* 慡妱崬傒嫋壜					*/

	ucHST_c_snd_cnt = 1;						/* 1byte 揮憲 弨旛OK			*/

#endif	/* (PCCOM == DMA) */

	/* 10byte僨乕僞揮憲奐巒	*/
	ui8_CPU_SC0TB = ucHST_d_sts_buf[0];			/* 揮憲奐巒						*/

	ucHST_m_com_mode = ucHST_M_STATUS_OUTEND;	/* 揮憲姰椆懸偪儌乕僪愝掕		*/
	ucHST_t_com_emg  = ucHST_T_20MS;			/* 捠怣娔帇僞僀儅 弶婜愝掕		*/

}


#if (PCCOM == DMA)
/************************************************************************/
/*!
  @fn			void vIRQ_DMA0( void )
  @brief		DMA0 妱崬傒張棟 ( 妱崬傒僴儞僪儔乕張棟傛傝屇傃弌偟 )
  @param		側偟
  @return		側偟
  @date			2007/xx/xx
*/
/************************************************************************/
void vIRQ_DMA0( void )
{SetInitHST();
	switch( ucHST_m_com_mode ){
		case ucHST_M_HEADER_WAIT:				/* 僿僢僟乕懸偪忬懺					*/
			if( ucHST_d_com_buf[0] == ucHST_CHEADER_ID ){	/* 僿僢僟乕堦抳			*/
				vHST_GetCmdMode();				/* 僐儅儞僪庢摼懸偪偵慗堏			*/
			}
			else{								/* 僿僢僟乕晄堦抳偺応崌				*/
				vHST_HeaderWaitMode();			/* 僿僢僟乕懸偪偵慗堏				*/
			}
		break;

		case ucHST_M_GET_CMD:					/* 僐儅儞僪庢摼懸偪忬懺				*/
			vHST_GetDataMode();					/* 僐儅儞僪庢摼丄僨乕僞庢摼張棟婲摦	*/
		break;

		case ucHST_M_GET_DATA:					/* 僨乕僞庢摼懸偪忬懺				*/
			vHST_AnalysisCmdMode();				/* 僨乕僞庢摼丄僐儅儞僪夝愅婲摦		*/
		break;
	}
}


/************************************************************************/
/*!
  @fn			void vIRQ_DMA1( void )
  @brief		DMA1 妱崬傒張棟 ( 妱崬傒僴儞僪儔乕張棟傛傝屇傃弌偟 )
  @param		側偟
  @return		側偟
  @date			2007/xx/xx
*/
/************************************************************************/
void vIRQ_DMA1( void )
{
	mHST_SREG_SET_DMA1_ENABLE();		/* DMA1 揮憲僨傿僙乕僽儖		*/
	vHST_HeaderWaitMode();				/* 僿僢僟乕懸偪偵慗堏			*/
}


#elif (PCCOM == SERIAL)


/************************************************************************/
/*!
  @fn			void vIRQ_Serial0Snd(void)
  @brief		UART CH0 僔儕傾儖0憲怣  妱崬傒張棟
  @param		側偟
  @return		側偟
  @date			2007/xx/xx
*/
/************************************************************************/
void vIRQ_Serial0Snd(void)
{
	if ( PACK_SIZE_MAX <= ucHST_c_snd_cnt ){			/* 10byte憲怣姰椆			*/
		ucHST_c_snd_cnt = 0;							/* 憲怣僇僂儞僞弶婜壔		*/
		vHST_HeaderWaitMode();							/* 僿僢僟乕懸偪忬懺傊 		*/
	}
	else {												/* 10byte憲怣拞				*/
		{
			volatile UCHAR	i;
			i=200;
			while (1){
				i--;
				if (i==0){
					break;
				}
			}
		}
		ui8_CPU_SC0TB = ucHST_d_sts_buf[ucHST_c_snd_cnt];	/* 僨乕僞揮憲			*/
		ucHST_c_snd_cnt++;								/* 憲怣僇僂儞僞僀儞僋儕		*/
	}
}


/************************************************************************/
/*!
  @fn			void vIRQ_Serial0Rcv(void)
  @brief		UART CH0 僔儕傾儖0庴怣  妱崬傒張棟
  @param		側偟
  @return		側偟
  @date			2007/xx/xx
*/
/************************************************************************/

void vIRQ_Serial0Rcv(void)
{
	ucHST_d_com_buf[ucHST_c_rcv_cnt] = ui8_CPU_SC0RB;	/* 僨乕僞庴怣 				*/
	if ( ucHST_c_rcv_cnt == 0 ){						/* 1byte栚庴怣				*/
		ucHST_m_com_mode = ucHST_M_GET_DATA;			/* 僨乕僞庢摼儌乕僪			*/
		if ( ucHST_d_com_buf[0] != ucHST_CHEADER_ID ){	/* ID 堦抳妋擣				*/
			ucHST_d_com_buf[0] = 0x0F;					/* 僨乕僞庴怣 				*/
			ucHST_c_rcv_cnt = 0;						/* 晄堦抳帪偼嵞庢摼			*/
			return;
		}
		else
		    {
                   ucHST_c_rcv_cnt = 1;	
		     return;
		    }
		
	}
	
	if(ucHST_c_rcv_cnt==1)
	   ucHST_CHR_LONG=ucHST_d_com_buf[1];

	
          ucHST_c_rcv_cnt++;	
	
	
	if ( (ucHST_CHR_LONG +3)<= ucHST_c_rcv_cnt ){			/* ID 堦抳帪偼10僶僀僩庢摼	*/
		ucHST_c_rcv_cnt = 0;							/* 10僶僀僩庢摼帪丄CMD夝愅	*/
		vHST_AnalysisCmdMode();							/* 僐儅儞僪夝愅忬懺傊 		*/
	}
}


#endif	/* (PCCOM == DMA) */


/************************************************************************/
/*!
  @fn			void vHST_SioStatusChk( void )
  @brief		UART 捠怣忬懺娔帇乮 張棟5ms 廃婜僴儞僪儔傛傝屇傃弌偟 乯
  @param		側偟
  @return		側偟
  @date			2007/xx/xx
*/
/************************************************************************/
void vHST_SioStatusChk( void )
{
	/* HOST I/F 張棟 捠怣娔帇 */
	if ( ucHST_m_com_mode != ucHST_M_HEADER_WAIT ){	/* 僿僢僟乕懸偪忬懺偱側偄応崌	*/
		if ( ucHST_t_com_emg != 0 ){				/* HOST IF 捠怣娔帇僞僀儅婲摦拞	*/
			ucHST_t_com_emg --;						/* 5ms 僞僀儅僇僂儞僞			*/
			if ( ucHST_t_com_emg == 0 ){			/* 僞僀儉傾僂僩					*/
				vHST_HeaderWaitMode();				/* 僿僢僟乕懸偪偵慗堏			*/
				/* 懡廳妱崬傒嬛巭忬懺偱幚峴偝傟傞偨傔丄娭悢傪捈偵屇傃弌偟 */
			}
		}
	}
	else {
		ucHST_t_com_emg  = ucHST_T_20MS;			/* 娔帇僞僀儅峏怴				*/
	}
}

⌨️ 快捷键说明

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