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

📄 sci.c

📁 M3355的源代码
💻 C
字号:
/*====================================================================
 *
 *  Copyright (C) 1997 Acer Labs, Inc.  All Rights Reserved.
 *                  
 *  File:   sci.c  
 *                                           
 *  Contents: SCI bus services routines for M6311/M3325
 *           
 *  History:
 *   Date           By         Reason
 *  ===========    =========   ======
 *  19-May-1999    Charlemage  for timing/ack process
 *  23-Aug-2001    Dick Ma     Porting to M3325
 ********************************************************************/

#include <comsub.h>
#include <gpio.h>
#include <sci.h>
#include <platform.h>


/*----------------------------------------------------------------------
 * Function_Name: SciInit
 *
 * Description:	Initialize the SCI bus
 *
 * Arguments:
 *
 * Return Value: void
 *----------------------------------------------------------------------*/
void SciInit()
{
    /* SCI Controled by SW !!! Using GPIO */
    /* set SCI-CL/MC, SCI-DA/MD, SCI-VFD, ML0, ML1, ML2 to output high */
    /**************************	M3325C_PLATFORM **********************************/

    /**************************	M3351_PLATFORM **********************************/


#if (_TA==3) /* only mk  bowei  2002/10/28 */

    SET_GPIO_W(SCI_MC | SCI_MD  | SCI_ML1 );
    SET_GPIO_HI(SCI_MC | SCI_MD  | SCI_ML1 );
#else

    SET_GPIO_W(SCI_MC | SCI_MD | SCI_ML0 | SCI_ML1 | SCI_ML2);
    SET_GPIO_HI(SCI_MC | SCI_MD | SCI_ML0 | SCI_ML1 | SCI_ML2);
#endif



    /**************************	M6303_PLATFORM **********************************/
}

/*----------------------------------------------------------------------
 * Function_Name: SciDelay
 *
 * Description:	Make a short delay for SCI
 *
 * Arguments:
 *     WORD w : delay (M3325 at 108M)
 *
 * Return Value: void
 *----------------------------------------------------------------------*/
void SciDelay(WORD w)
{
    DWORD dw;
    DWORD dwCountSize;
    dwCountSize=w*COUNTS_PER_MICROSECOND;
    for(dw=0;dw<dwCountSize;dw++)
        ;
}

/*----------------------------------------------------------------------
 * Function_Name: SciSetByte
 *
 * Description:	Set one byte of data to SCI , LSB First
 *     Stream Format:
 *     MC   \_____/----\
 *     MD   ??DDDDDDDDDD  
 *     width | Ta | Ta |
 *           Ta>400ns
 *
 * Arguments:
 *     BYTE bData :DATA to set to SCI
 *
 * Return Value: void
 *----------------------------------------------------------------------*/
 
#if (_TRANSFER_ALI_BOARD_ == _TRANSFER_ALI_BOARD_ENABLE_)
void SciSetByte(BYTE bData)
{
    BYTE b;
    for(b=0;b<8;b++)
    {
        SET_GPIO_LOW(SCI_MC);/* pull SCI_MC low */
        SET_GPIO_W(SCI_MD);/* SCI_MD write mode */
        if(bData&0x01)
            SET_GPIO_HI(SCI_MD);/* pull SCI_MD high */
        else
            SET_GPIO_LOW(SCI_MD);/* pull SCI_MD low */
#if (_TA==3)

        SciDelay(10);/* delay 1us */ //bowei delay 10us
#else

        SciDelay(1);/* delay 1us */
#endif

        SET_GPIO_HI(SCI_MC);/*pull SCI_MC high*/
#if (_TA==3)

        SciDelay(10);/* delay 1us */ //bowei delay 10us
#else

        SciDelay(1);/* delay 1us */
#endif

        bData>>=1;

    }
}
#endif
/*----------------------------------------------------------------------
 * Function_Name: SciSetByteMF
 *
 * Description:	Set one byte of data to SCI, MSB FIRST
 *     Stream Format:
 *     MC   \_____/----\
 *     MD   ??DDDDDDDDDD  
 *     width | Ta | Ta |
 *           Ta>400ns
 *
 * Arguments:
 *     BYTE bData :DATA to set to SCI
 *
 * Return Value: void
 *----------------------------------------------------------------------*/
#if (_TRANSFER_ALI_BOARD_ == _TRANSFER_ALI_BOARD_ENABLE_)
void SciSetByteMF(BYTE bData)
{
    BYTE b;
    for(b=0;b<8;b++)
    {
        SET_GPIO_LOW(SCI_MC);/* pull SCI_MC low */
        SET_GPIO_W(SCI_MD);/* SCI_MD write mode */
        if(bData&0x80)
            SET_GPIO_HI(SCI_MD);/* pull SCI_MD high */
        else
            SET_GPIO_LOW(SCI_MD);/* pull SCI_MD low */
#if (_TA==3)

        SciDelay(10);/* delay 1us */ //bowei delay 10us
#else

        SciDelay(1);/* delay 1us */
#endif

        SET_GPIO_HI(SCI_MC);/* pull SCI_MC high */
#if (_TA==3)

        SciDelay(10);/* delay 1us */ //bowei delay 10us
#else

        SciDelay(1);/* delay 1us */
#endif

        bData<<=1;

    }
}
#endif 
/*----------------------------------------------------------------------
 * Function_Name: SciGetByte
 *
 * Description:	Get one byte of bData from SCI, LSB First
 *     Stream Format:
 *     MC   \_____/----\
 *     MD   ??DDDDDDDDDD  
 *     width | Ta | Ta |
 *           Ta>400ns
 *
 * Arguments:
 *
 * Return Value: void
 *     byte get from SCI bus
 *----------------------------------------------------------------------*/
#if (_TRANSFER_ALI_BOARD_ == _TRANSFER_ALI_BOARD_ENABLE_)
BYTE SciGetByte()
{
    BYTE ret;
    BYTE b;
    //	SET_GPIO_LOW(SCI_MC);/* pull SCI_MC low */
    //	SET_GPIO_W(SCI_MD);/* SCI_MD write mode */
    //	SET_GPIO_HI(SCI_MD);/* pull SCI_MD high */
    for(b=0;b<8;b++)
    {
        SET_GPIO_LOW(SCI_MC);/* pull SCI_MC low */
        SET_GPIO_R(SCI_MD);/* SCI_MD read mode */
        ret>>=1;
#if (_TA==3)

        SciDelay(30);/* delay 2us *///bowei delay 30us
#else

        SciDelay(2);/* delay 2us */
#endif

        SET_GPIO_HI(SCI_MC);/* pull SCI_MC high */
#if (_TA==3)

        SciDelay(20);/* delay 1us *///bowei delay 20us
#else

        SciDelay(1);/* delay 1us */
#endif

        if(GET_GPIO_DATA(SCI_MD))
            ret|=0x80;/* SCI_MD=1 */
        else
            ret&=0x7f;/* SCI_MD=0 */
#if (_TA==3)

        SciDelay(5);/* delay 1us *///bowei delay 5us
#else

        SciDelay(1);/* delay 1us */
#endif

    }
    return ret;
}
#endif
/*----------------------------------------------------------------------
 * Function_Name: SciGetByteMF
 *
 * Description:	Get one byte of bData from SCI, MSB first
 *     Stream Format:
 *     MC   \_____/----\
 *     MD   ??DDDDDDDDDD  
 *     width | Ta | Ta |
 *           Ta>400ns
 *
 * Arguments:
 *
 * Return Value: void
 *     byte get from SCI bus
 *----------------------------------------------------------------------*/
#if (_TRANSFER_ALI_BOARD_ == _TRANSFER_ALI_BOARD_ENABLE_)
BYTE SciGetByteMF()
{
    BYTE ret;
    BYTE b;
    //	SET_GPIO_LOW(SCI_MC);/* pull SCI_MC low */
    //	SET_GPIO_HI(SCI_MD);/* pull SCI_MD high */
    //	SET_GPIO_W(SCI_MD);/* SCI_MD write mode */
    for(b=0;b<8;b++)
    {
        SET_GPIO_LOW(SCI_MC);/* pull SCI_MC low */
        SET_GPIO_R(SCI_MD);/* SCI_MD read mode */
        ret<<=1;
#if (_TA==3)

        SciDelay(30);/* delay 2us *///bowei delay 30us
#else

        SciDelay(2);/* delay 2us */
#endif

        SET_GPIO_HI(SCI_MC);/* pull SCI_MC high */
#if (_TA==3)

        SciDelay(20);/* delay 1us *///bowei delay 20us
#else

        SciDelay(1);/* delay 1us */
#endif

        if(GET_GPIO_DATA(SCI_MD))
            ret|=0x01;/* SCI_MD=1 */
        else
            ret&=0xfe;/* SCI_MD=0 */
#if (_TA==3)

        SciDelay(5);/* delay 1us *///bowei delay 5us
#else

        SciDelay(1);/* delay 1us */
#endif

    }
    return ret;
}
 #endif
#if (_TA==3)
/**********************************************/
/********** only mk bowei 2002/10/28 **********/
/**********************************************/
void SciSet4Bits(BYTE data)
{
    BYTE i;
    for(i=0;i<4;i++)
    {
        SET_GPIO_LOW(SCI_MC);
        SET_GPIO_W(SCI_MD);//???xing
        if(data&0x01)
            SET_GPIO_HI(SCI_MD);
        else
            SET_GPIO_LOW(SCI_MD);
        SciDelay(10);
        SET_GPIO_HI(SCI_MC);
        SciDelay(10);
        data>>=1;
    }
    SET_GPIO_R(SCI_MD);//???xing
}
/*xing customer1 begin*/
/*----------------------------------------------------------------------
 * Function_Name: SciSet9Bits
 *
 * Description:	
 *
 * Arguments:
 *
 * Return Value: void
 *     byte get from SCI bus
 *----------------------------------------------------------------------*/
void SciSet9Bits(WORD data)
{
    BYTE i;
    for(i=0;i<9;i++)
    {
        SET_GPIO_LOW(SCI_MC);
        SET_GPIO_W(SCI_MD);//???xing
        if(data&0x01)
            SET_GPIO_HI(SCI_MD);
        else
            SET_GPIO_LOW(SCI_MD);
        SciDelay(10);
        SET_GPIO_HI(SCI_MC);
        SciDelay(10);
        data>>=1;
    }
    SET_GPIO_R(SCI_MD);//???xing
}


void SciSet9BitsMSF(WORD data)
{
    BYTE i;
    data<<=7;
    for(i=0;i<9;i++)
    {
        SET_GPIO_LOW(SCI_MC);
        SET_GPIO_W(SCI_MD);//???xing
        if(data&0x8000)
            SET_GPIO_HI(SCI_MD);
        else
            SET_GPIO_LOW(SCI_MD);
        SciDelay(10);
        SET_GPIO_HI(SCI_MC);
        SciDelay(10);
        data<<=1;
    }
    SET_GPIO_R(SCI_MD);//???xing
}
/*----------------------------------------------------------------------
 * Function_Name: SciSet12Bits
 *
 * Description:	
 *
 * Arguments:
 *
 * Return Value: void
 *     byte get from SCI bus
 *----------------------------------------------------------------------*/
void SciSet12Bits(WORD data)
{
    BYTE i;
    for(i=0;i<12;i++)
    {
        SET_GPIO_LOW(SCI_MC);/* pull SCI_MC low */
        SET_GPIO_W(SCI_MD);//???xing
        if(data&0x01)
            SET_GPIO_HI(SCI_MD);
        else
            SET_GPIO_LOW(SCI_MD);
        SciDelay(10);
        SET_GPIO_HI(SCI_MC);
        SciDelay(10);
        data>>=1;
    }
    SET_GPIO_R(SCI_MD);//???xing
}
/*----------------------------------------------------------------------
 * Function_Name: SciSetCls
 *
 * Description:	
 *
 * Arguments:
 *
 * Return Value: void
 *----------------------------------------------------------------------*/
void SciSetCls(WORD data)
{
    BYTE i;
    for(i=0;i<9;i++)
    {
        SET_GPIO_LOW(SCI_MC);/* pull SCI_MC low */
        SET_GPIO_W(SCI_MD);//???xing
        if(data&0x01)
            SET_GPIO_HI(SCI_MD);
        else
            SET_GPIO_LOW(SCI_MD);
        SciDelay(10);
        SET_GPIO_HI(SCI_MC);
        SciDelay(10);
        data>>=1;
    }
    for(i=1;i<=128;i++)
    {
        SET_GPIO_LOW(SCI_MC);/* pull SCI_MC low */
        SET_GPIO_W(SCI_MD);//???xing
        if(0x0)
            SET_GPIO_HI(SCI_MD);
        else
            SET_GPIO_LOW(SCI_MD);
        SciDelay(10);
        SET_GPIO_HI(SCI_MC);
        SciDelay(10);
    }
    SET_GPIO_R(SCI_MD);//???xing
}
/*--------------------------------------------------
char SciHold();
	Hold the SCI Bus.
	Arguments:	
		NONE
	Return value:
		TRUE for OK
			by Charlemagne Yue
---------------------------------------------------*/
BOOL SciHold()
{	//WaitSem(SCI_semid);
    return TRUE;
}

/*--------------------------------------------------
char SciRelease();
	Hold the SCI Bus.
	Arguments:	
		NONE
	Return value:
		TRUE for OK
			by Charlemagne Yue
---------------------------------------------------*/
BOOL SciRelease()
{	//SigSem(SCI_semid);
    return TRUE;
}
#endif

⌨️ 快捷键说明

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