Exemple #1
0
_ATTR_DRIVER_CODE_
BOOL TimerPeriodSet( UINT32 usTick, uint32 nsTick)
{
    UINT32 count,Pclk;
    BOOL   Retval = TRUE;
    
    TimerusTickBak = usTick;
    TimernsTickBak = nsTick;
    
    Pclk  = GetPclkFreq();
    count =  (Pclk * usTick + Pclk * nsTick / 1000)/1000;
    if(count > 0x00ffffff) 
	{
        count = 0x00ffffff;
        Retval = FALSE; 
	}

   /* Disable the timer ,usermode,mask*/
    TimerDisable();

    Timer->ControlReg |= TIMR_USER_MODE;
    
    Timer->LoadCountRegister = count;   

   /* free mode and enable the timer  £¬not mask*/
    TimerEnable();
   
    return Retval;
}
Exemple #2
0
/*
--------------------------------------------------------------------------------
  Function name : I2CSetSpeed(UINT16 speed)
  Author        : yangwenjie
  Description   :

  Input         : speed -- unit is k,for example 400 is mean 400k

  Return        :TRUE -- success
                 FALSE -- failure

  History:     <author>         <time>         <version>
             yangwenjie     2009-1-14         Ver1.0
  desc:         ORG
--------------------------------------------------------------------------------
*/
BOOL I2CSetSpeed(eI2C_CHANNEL i2cPort,UINT16 speed)
{
    UINT32 exp;
    UINT32 rem;
    UINT32 scalespeed;
    UINT32 freqbase;

    I2CReg_t *  pReg;

    pReg = I2CPORT(i2cPort);

    pReg->I2C_OPR &= ~( I2C_OPR_ENABLE);


	freqbase   = (GetPclkFreq()*1000) / 5;//by YWJ 04.19

    scalespeed = speed << 3;      // speed以K为单位   (rem+1)<=8 ,先以8来确定exp

    for (exp = 0;exp < 7;exp++)
    {
        scalespeed = scalespeed << 1;
        if (scalespeed > freqbase)
        {
            break;
        }
    }

    rem = (freqbase) / speed / (1 << (exp + 1))/* - 1*/;

    pReg->I2C_OPR &= ~(I2C_OPR_DIV_SPEED_MASK);
    pReg->I2C_OPR |= ((rem << 3) | exp);

    pReg->I2C_OPR |= I2C_OPR_ENABLE;

    return TRUE;
}