📄 ifctrl.c
字号:
/********************************************************************************/
/*!
@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 + -