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