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

📄 ifctrl.c

📁 日本IRON os 在汽车电子中的应用 高度机密
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************************************************************************/
/*!
  @file		ifctrl.c
  @brief	儂僗僩捠怣張棟
  @version	$Revision: 2.00 $
  @date		2007/XX/XX
  @author	Matsushita Electronics Co.,Ltd.
*/
/********************************************************************************/
#include	<stdio.h>
#include	<stdlib.h>

#include	<itron.h>
#include	<kernel.h>
#include	<kernel_id.h>

#include	"..\gerda_dd\include\gerda_dd.h"
#include	"..\gerda_dd\include\gerda_reg.h"
#include	"..\texture\texdata.h"
#include	"..\gerda_dd\include\am32.h"

#include	"systype.h"
#include	"sr103se60pub.h"
#include	"option.h"
#include	"if_cmd.h"
#include	"if_mxr.h"
#include	"if_txtid.h"
#include	"parameter.h"
#include	"dd_param.h"
#include	"dspctrl.h"

/********************************************************************/
/*	儅僋儘掕媊														*/
/********************************************************************/
#define	touch(x)		((x) = 0)	/* WARNING 懳嶔 				*/
#define	PACK_SIZE_MAX	   (100)		/* 憲庴怣僶僢僼傽 僶僀僩悢		*/

/********************************************************************/
/*	娭悢愰尵														*/
/********************************************************************/
void	vHST_StatusOutMode( void );
void	vHST_HeaderWaitMode( void );

/********************************************************************/
/*	奜晹娭悢愰尵													*/
/********************************************************************/
extern	void begin_critical(void);	
extern	void end_critical(void);	

extern	void vSet_Sc0Init(void);	
extern	void vSet_Dma0PreSetWait(void);
extern	void vSet_Dma0Init(void);	
extern	void vSet_Dma1Init(void);	

/********************************************************************/
/*	曄悢愰尵														*/
/********************************************************************/
/*!   @name HOST I/F 捠怣惂屼梡RAM   */
/*@{*/
#pragma _section B=DMA_TXBUF
UCHAR	QQucHST_d_com_buf[1];	/* 憲怣僶僢僼傽乕*/
#pragma _section B
#pragma _section B=DMA_RXBUF
UCHAR	QQucHST_d_sts_buf[10];	/* 庴怣僶僢僼傽乕			*/
#pragma _section B
UCHAR	ucHST_d_com_buf[PACK_SIZE_MAX];	/* 憲怣僶僢僼傽乕*/
UCHAR	ucHST_d_sts_buf[10];	/* 庴怣僶僢僼傽乕			*/
UCHAR	ucHST_m_com_mode;				/*!< HOST I/F 捠怣儌乕僪			*/
UCHAR	ucHST_t_com_emg;				/*!< 捠怣娔帇僞僀儅(5ms僇僂儞僩)	*/
UCHAR	ucHST_d_com_ack;				/*!< HOST I/F 僗僥乕僞僗 NACK/ACK	*/
UCHAR	ucHST_d_dsp_sts;				/*!< HOST I/F 僗僥乕僞僗 DISP忬懺	*/

#if (PCCOM == SERIAL)
UCHAR	ucHST_c_snd_cnt;				/*!< SIF CH0 憲怣僶僀僩僇僂儞僞		*/
UCHAR	ucHST_c_rcv_cnt;				/*!< SIF CH0 庴怣僶僀僩僇僂儞僞		*/
UCHAR	ucHST_CHR_LONG=0;	
UCHAR	ucHST_CTEP=0;	
#endif /* (PCCOM == SERIAL) */

T_MSG_DATA	rcv_cmd;					/* DSP CTRL傊偺儊僢僙乕僕僶僢僼傽	*/
/*@}*/

/********************************************************************/
/*	儅僋儘掕悢愰尵													*/
/********************************************************************/

/********************************************************************/
/*	掕悢愰尵														*/
/********************************************************************/
/*!   @name HOST I/F 僷僢僋僿僢僟乕掕媊   */
/*@{*/
#define	ucHST_CHEADER_ID		(0xA3)			/* 僿僢僟乕 ID 				*/
#define	ucHST_SHEADER_ID		(0x3C)			/* 僿僢僟乕 ID 				*/
/*@}*/

/*!   @name HOST I/F 捠怣僼儗乕儉 儘働乕僔儑儞掕媊   */
/*@{*/
#define	ucPACK_HEADER			(0)					/*!< PACK 僿僢僟乕埵抲	*/
#define	ucPACK_PACKID			(ucPACK_HEADER + 1)	/*!< PACK ID埵抲  		*/
#define	ucPACK_MS3DATA			(ucPACK_HEADER + 2)	/*!< 僨乕僞奐巒埵抲  	*/
#define	ucPACK_MS9DATA			(ucPACK_HEADER + 8)	/*!< 僨乕僞廔椆埵抲		*/
#define	ucPACK_CHKSUM			(ucPACK_HEADER + 9)	/*!< 僠僃僢僋僒儉埵抲	*/
/*@}*/

/*!   @name HOST I/F 捠怣儌乕僪忬懺掕媊   */
/*@{*/
#define	ucHST_M_MODE_OFF		(0x00)		/*!< UART 枹愝掕忬懺			*/
#define	ucHST_M_HEADER_WAIT		(0x01)		/*!< 僿僢僟乕擖椡懸偪儌乕僪		*/
#define	ucHST_M_GET_CMD			(0x02)		/*!< 僐儅儞僪擖椡懸偪儌乕僪		*/
#define	ucHST_M_GET_DATA		(0x03)		/*!< 僨乕僞擖椡懸偪儌乕僪		*/
#define	ucHST_M_ANALYSIS_CMD	(0x04)		/*!< 僐儅儞僪夝愅儌乕僪			*/
#define	ucHST_M_STATUS_OUT		(0x05)		/*!< 僗僥乕僞僗弌椡儌乕僪		*/
#define	ucHST_M_STATUS_OUTEND	(0x06)		/*!< 僗僥乕僞僗弌椡懸偪儌乕僪	*/
/*@}*/

/*!   @name HOST I/F 捠怣 僞僀儉娔帇梡僞僀儅僇僂儞僞掕媊   */
/*@{*/
#define	ucHST_T_20MS			(4  + 1)	/*!< 20ms						*/
#define	ucHST_T_50MS			(10 + 1)	/*!< 50ms						*/
/*@}*/

/*!   @name HOST I/F 捠怣 ACK/NACK掕媊   */
/*@{*/
#define	ucHST_NACK				(0x00)		/*!< HOST I/F 僗僥乕僞僗 NACK	*/
#define	ucHST_ACK				(0x01)		/*!< HOST I/F 僗僥乕僞僗 ACK	*/
/*@}*/

/*!   @name HOST I/F 捠怣 忬懺僗僥乕僞僗掕媊   */
/*@{*/
#define	ucHST_RECIEVE_WAIT		(0x00)		/*!< 僨乕僞懸偪忬懺				*/
#define	ucHST_RECIEVE_NG		(0x01)		/*!< 昞帵張棟拞					*/
#define	ucHST_RECIEVE_ERR		(0x02)		/*!< 僄儔乕忬懺					*/
/*@}*/

/*!
 *	@name	DMA 0 惂屼娭楢 儗僕僗僞愝掕
 *	@brief	DMA 0 傪惂屼偡傞儗僕僗僞愝掕儅僋儘娭悢
 */
/*@{*/
/*! DMA0 揮憲 僀僱乕僽儖 愝掕 */
#define	mHST_SREG_SET_DMA0_ENABLE()			( bCPU_DM0TEN = 1 )				/* DMA0 僀僱乕僽儖		*/

/*! DMA0 揮憲 僨傿僙乕僽儖 愝掕 */
#define	mHST_SREG_SET_DMA0_DISABLE()		( bCPU_DM0TEN = 0 )				/* DMA0 僨傿僙乕僽儖	*/

/*! DMA0 揮憲廔椆 妱崬傒嫋壜愝掕 */
#define	mHST_SREG_SET_DMA0IRQ_ENABLE()	(	( bCPU_DM0ID = 1 ),				/* 専弌僼儔僌僙僢僩		*/\
											( bCPU_DM0IR = 0 ),				/* 梫媮僼儔僌弶婜壔		*/\
											( bCPU_DM0IE = 1 )		)		/* 嫋壜僼儔僌弶婜壔		*/

/*! DMA0 揮憲廔椆 妱崬傒嬛巭愝掕 */
#define	mHST_SREG_SET_DMA0IRQ_DISABLE()	(	( bCPU_DM0ID = 1 ),				/* 専弌僼儔僌僙僢僩		*/\
											( bCPU_DM0IR = 0 ),				/* 梫媮僼儔僌弶婜壔		*/\
											( bCPU_DM0IE = 0 )		)		/* 嫋壜僼儔僌弶婜壔		*/
/*@}*/

/*!
 *	@name	DMA 1 惂屼娭楢 儗僕僗僞愝掕
 *	@brief	DMA 1 傪惂屼偡傞儗僕僗僞愝掕儅僋儘娭悢
 */
/*@{*/
/*! DMA1 揮憲 僀僱乕僽儖 愝掕 */
#define	mHST_SREG_SET_DMA1_ENABLE()			( bCPU_DM1TEN = 1 )				/* DMA1 僀僱乕僽儖		*/

/*! DMA1 揮憲 僨傿僙乕僽儖 愝掕 */
#define	mHST_SREG_SET_DMA1_DISABLE()		( bCPU_DM1TEN = 0 )				/* DMA1 僨傿僙乕僽儖	*/


#if 1
/*! DMA1 揮憲廔椆屻梫媮 妱崬傒嫋壜愝掕 */
#define	mHST_SREG_SET_DMA1IRQ_ENABLE()	(	( bCPU_DMR1ID = 1 ),			/* 専弌僼儔僌僙僢僩		*/\
											( bCPU_DMR1IR = 0 ),			/* 梫媮僼儔僌弶婜壔		*/\
											( bCPU_DMR1IE = 1 )		)		/* 嫋壜僼儔僌弶婜壔		*/

/*! DMA1 揮憲廔椆屻梫媮 妱崬傒嬛巭愝掕 */
#define	mHST_SREG_SET_DMA1IRQ_DISABLE()	(	( bCPU_DMR1ID = 1 ),			/* 専弌僼儔僌僙僢僩		*/\
											( bCPU_DMR1IR = 0 ),			/* 梫媮僼儔僌弶婜壔		*/\
											( bCPU_DMR1IE = 0 )		)		/* 嫋壜僼儔僌弶婜壔		*/
#else
/*! DMA1 揮憲廔椆 妱崬傒嫋壜愝掕 */
#define	mHST_SREG_SET_DMA1IRQ_ENABLE()	(	( bCPU_DM1ID = 1 ),				/* 専弌僼儔僌僙僢僩		*/\
											( bCPU_DM1IR = 0 ),				/* 梫媮僼儔僌弶婜壔		*/\
											( bCPU_DM1IE = 1 )		)		/* 嫋壜僼儔僌弶婜壔		*/

/*! DMA1 揮憲廔椆 妱崬傒嬛巭愝掕 */
#define	mHST_SREG_SET_DMA1IRQ_DISABLE()	(	( bCPU_DM1ID = 1 ),				/* 専弌僼儔僌僙僢僩		*/\
											( bCPU_DM1IR = 0 ),				/* 梫媮僼儔僌弶婜壔		*/\
											( bCPU_DM1IE = 0 )		)		/* 嫋壜僼儔僌弶婜壔		*/
#endif

/*@}*/

/*!
 *	@name	僔儕傾儖 0 惂屼娭楢 儗僕僗僞愝掕
 *	@brief	僔儕傾儖 0 傪惂屼偡傞儗僕僗僞愝掕儅僋儘娭悢
 */
/*@{*/
/*! 僔儕傾儖0 憲怣姰椆妱崬傒 嫋壜愝掕 */
#define	mHST_SREG_SET_SIF0TIRQ_ENABLE()	(	( bCPU_SC0TID = 1 ),			/* 専弌僼儔僌僙僢僩		*/\
											( bCPU_SC0TIR = 0 ),			/* 梫媮僼儔僌弶婜壔		*/\
											( bCPU_SC0TIE = 1 )		)	 	/* 嫋壜僼儔僌弶婜壔		*/

/*! 僔儕傾儖0 憲怣姰椆妱崬傒 嬛巭愝掕 */
#define	mHST_SREG_SET_SIF0TIRQ_DISABLE() (	( bCPU_SC0TID = 1 ),			/* 専弌僼儔僌僙僢僩		*/\
											( bCPU_SC0TIR = 0 ),			/* 梫媮僼儔僌弶婜壔		*/\
											( bCPU_SC0TIE = 0 )		)		/* 嫋壜僼儔僌弶婜壔		*/

/*! 僔儕傾儖0 庴怣姰椆妱崬傒 嫋壜愝掕 */
#define	mHST_SREG_SET_SIF0RIRQ_ENABLE()	(	( bCPU_SC0RID = 1 ),			/* 専弌僼儔僌僙僢僩		*/\
											( bCPU_SC0RIR = 0 ),			/* 梫媮僼儔僌弶婜壔		*/\
											( bCPU_SC0RIE = 1 )		)	 	/* 嫋壜僼儔僌弶婜壔		*/

/*! 僔儕傾儖0 庴怣姰椆妱崬傒 嬛巭愝掕 */
#define	mHST_SREG_SET_SIF0RIRQ_DISABLE() (	( bCPU_SC0RID = 1 ),			/* 専弌僼儔僌僙僢僩		*/\
											( bCPU_SC0RIR = 0 ),			/* 梫媮僼儔僌弶婜壔		*/\
											( bCPU_SC0RIE = 0 )		)		/* 嫋壜僼儔僌弶婜壔		*/

/*! 僔儕傾儖0 憲庴怣掆巭 愝掕 */
#define	mHST_SREG_SET_SIF0_STOP()		(	( bCPU_TM0CNE = 0 ),			/* 僞僀儅0 摦嶌掆巭		*/\
											( bCPU_SC0TEN = 0 ),			/* 憲怣僨傿僙乕僽儖		*/\
											( bCPU_SC0REN = 0 ),			/* 庴怣僨傿僙乕僽儖		*/\
											( bCPU_TM0LDE = 1 ),			/* 僞僀儅0 弶婜壔		*/\
											( bCPU_TM0LDE = 0 ),			/* 捠忢摦嶌埨掕壔		*/\
											( bCPU_TM0CNE = 1 )		)		/* 僞僀儅0 摦嶌嫋壜		*/

/*! 僔儕傾儖0 憲庴怣奐巒 愝掕 */
#define	mHST_SREG_SET_SIF0_START()		(	( bCPU_SC0TEN = 1 ),			/* 庴怣僀僱乕僽儖		*/\
											( bCPU_SC0REN = 1 )		)		/* 庴怣僀僱乕僽儖		*/
/*@}*/

/*!
 *	@name	DMA儗僕僗僞愝掕
 *	@brief	儅僋儘娭悢偵愝掕偝傟偨棙梡僠儍儞僱儖偵傛傝
 *			DMA0/DMA1偺愝掕傪摦揑偵愗傝懼偊傞
 */
/*@{*/
/*! DMA 0/1 僶僗價僕乕庢摼 */
#define mHST_SREG_GET_DMA_BUSY(CHANNEL)							\
		( ((CHANNEL)==0) ? (bCPU_DM0RQF) : (bCPU_DM1RQF) )
/*@}*/



/************************************************************************/
/*!
  @fn			void SetInitHST( void )
  @brief		HOST I/F 張棟 曄悢弶婜壔 (弶婜壔張棟偵偰屇傃弌偟)
  @param		側偟
  @return		側偟
  @date			2007/xx/xx
*/
/************************************************************************/
void SetInitHST( void )
{
	UCHAR	i;

	/****************************/
	/* 		曄悢弶婜愝掕		*/
	/****************************/
	for (i=0;i<100;i++){		/* 憲庴怣僶僢僼傽弶婜壔			*/
		ucHST_d_com_buf[i] = 0x0F;
		//ucHST_d_sts_buf[i] = 0x0F;
	}

	/****************************/
	/* 		僔儕傾儖庴怣愝掕	*/
	/****************************/
	vHST_HeaderWaitMode();				/* 僨乕僞庴怣壜擻忬懺傊			*/
}


/************************************************************************/
/*!
  @fn			UCHAR ucHST_ComCheckSumCalc(void)
  @brief		僐儅儞僪偺僠僃僢僋僒儉嶼弌張棟(M3乣M9偺榓)
  @param		側偟
  @retval		僠僃僢僋僒儉抣
  @date			2007/xx/xx
*/
/************************************************************************/
UCHAR ucHST_CmdCheckSumCalc(void)
{
	UCHAR i,sum,start,end;

	sum = 0;
	start = 2;//ucPACK_MS3DATA;
	end  =ucHST_d_com_buf[1]+1;//3// ucPACK_MS9DATA;
	for( i=start; i<=end; i++){
		sum += ucHST_d_com_buf[i];
	}
	sum = 0x100 -sum;
	ucHST_CTEP=sum;
	return	sum;
}


/************************************************************************/
/*!
  @fn			UCHAR ucHST_StsCheckSumCalc(void)
  @brief		僗僥乕僞僗偺僠僃僢僋僒儉嶼弌張棟(S3乣S9偺榓)
  @param		側偟
  @retval		僠僃僢僋僒儉抣
  @date			2007/xx/xx
*/
/************************************************************************/
UCHAR ucHST_StsCheckSumCalc(void)
{
	UCHAR i,sum,start,end;

	sum = 0;
	start = ucPACK_MS3DATA;
	end   = ucPACK_MS9DATA;
	for( i=start; i<=end; i++){
		sum += ucHST_d_sts_buf[i];
	}
	return	sum;
}


/***********************************************************************/
/*!
  @fn			void vSet_DmaPreSetWait( UCHAR ch )
  @brief		DMA0/1婡擻 儗僕僗僞愝掕慜 BUSY 僠僃僢僋張棟
  @param[in]	DMA 僠儍僱儖斣崋
  @return		側偟
  @date			2007/xx/xx
*/
/***********************************************************************/
void vSet_DmaPreSetWait( UCHAR ch )
{
	USHORT	i;
	
	i = 0xFFFF;
	while(1){
		if ( !mHST_SREG_GET_DMA_BUSY( ch ) ){	/* 揮憲姰椆忬懺偺応崌	*/
			break;
		}
		i --;									/* FALE SAFE			*/
		if ( i == 0 ){							/* 僞僀儉傾僂僩			*/
			break;
		}
	}
}


/************************************************************************/
/*!
  @fn			void vHST_SetMessage( void )
  @brief		DSP 僞僗僋傊偺 儊僢僙乕僕愝掕
  @param		側偟
  @return		側偟
  @date			2007/xx/xx
*/
/************************************************************************/
void vHST_SetMessage(void)
{

	UCHAR	i;
	ER		ercd;

	ucHST_d_com_ack = ucHST_ACK;				/* Default : ACK愝掕		*/
	rcv_cmd.cmdID_mbx = ucHST_d_com_buf[2];		/* 僐儅儞僪ID愝掕 			*/
	for ( i=0; i<= ucHST_d_com_buf[1]; i++){						/* 僷儔儊乕僞愝掕			*/
		rcv_cmd.cmd_mbx[i] = ucHST_d_com_buf[i+1];
	}
	ercd = isnd_mbx( MBX1,(T_MSG *)&rcv_cmd );	/* 儊僢僙乕僕憲怣			*/
	if ( ercd != E_OK ){						/* 僄儔乕偁傝				*/
		ucHST_d_com_ack = ucHST_NACK;			/* NACK愝掕					*/
		return;
	}

}


/************************************************************************/
/*!
  @fn			void vHST_StatusOutMode( void )
  @brief		僗僥乕僞僗嶌惉張棟(S3乣S7)
  @param		側偟
  @return		側偟
  @date			2007/xx/xx
*/
/************************************************************************/
void vHST_StatusSet( void )
{
	UCHAR	i,cmd;

	/* 僗僥乕僞僗僨乕僞愝掕 */
	cmd = ucHST_d_sts_buf[1]&0x7F;
#if (SSPFMODE == SSPF_V1)
	if ( cmd == COM_V1_DISP_STS ){			/* 夋幙忣曬庢摼				*/
		begin_critical();					/* 慡妱崬傒嬛巭				*/
		for (i=0; i<5; i++){				/* 夋幙忣曬僐僺乕			*/
			ucHST_d_sts_buf[i+2] = ucDSP_setting[i];
		}
		end_critical();						/* 慡妱崬傒嫋壜				*/
	}
	else if ( cmd == COM_V1_DEVICE ){		/* 僨僶僀僗忣曬庢摼			*/

⌨️ 快捷键说明

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