コード例 #1
0
ファイル: RTCCInitClock.c プロジェクト: ahmedjafri/EE478
 /*********************************************************************
 Function:        void RtccInitClock(void)

 PreCondition:    None
                  
 Input:           None
 
 Output:          None
 
 Side Effects:    Enables the secondary oscillator from Timer1
 
 Overview:        The function initializes the RTCC device. It starts the RTCC clock,
                  sets the RTCC Off and disables RTCC write. Disables the OE.
                   
 Note:            None
 ********************************************************************/
void RtccInitClock(void)
{
   // enable the Secondary Oscillator
#if defined (RTCC_SFR_V1)
	T1CONbits.SOSCEN = 1;
#else   
   T1CONbits.T1OSCEN = 1;
#endif

#if defined (RTCC_V1)
	RTCCFG = 0x0;
#else
    RTCCON1=0x0;
#endif
 	
   RTCCAL = 0x00;
   if(mRtccIsOn())
   {
      if(!mRtccIsWrEn())
      {
          RtccWrOn();
      }
       mRtccOff();
   }
   
   mRtccWrOff();
}
コード例 #2
0
ファイル: RtccWriteTime.c プロジェクト: Vanganesha/oufffteam
/*********************************************************************
 * Function:        BOOL RtccWriteTime(const rtccTime* pTm, BOOL di)
 *
 * PreCondition:    pTm pointing to a valid rtccTime structure having proper values:
 *                      - sec:  BCD codification, 00-59
 *                      - min:  BCD codification, 00-59
 *                      - hour: BCD codification, 00-24
 * Input:           pTm - pointer to a constant rtccTime union
 *                  di  - if interrupts need to be disabled
 * Output:          TRUE '1' : If all the values are within range
 *                  FALSE '0' : If any value is out of above mentioned range.
 * Side Effects:    None
 * Overview:        The function sets the current time of the RTCC device.
 * Note:            - The write is successful only if Wr Enable is set.
 *                  The function will enable the write itself, if needed.
 *                  Also, the Alarm will be temporarily disabled and the
 *                  device will be stopped (On set to 0) in order
 *                  to safely perform the update of the RTC time register.
 *                  However, the device status will be restored.
 *                  - Usually the disabling of the interrupts is desired, if the user has to have more
 *                  precise control over the actual moment of the time setting.
 ********************************************************************/
BOOL RtccWriteTime(const rtccTime* pTm , BOOL di)
{
    WORD_VAL tempHourWDay ;
    WORD_VAL tempMinSec ;
    UINT8  CPU_IPL;

    BOOL        wasWrEn;
    BOOL        wasOn;
    BOOL        wasAlrm=FALSE;

    if((MAX_MIN < pTm->f.min )|| (MAX_SEC < pTm->f.sec) || (MAX_HOUR < pTm->f.hour))
    {
        return(FALSE);
    }

    tempMinSec.byte.HB = pTm->f.min;
    tempMinSec.byte.LB =pTm->f.sec;        // update the desired fields

    if(di)
    {
        /* Disable Global Interrupt */
        mSET_AND_SAVE_CPU_IP(CPU_IPL,7);
    }

    if(!(wasWrEn= mRtccIsWrEn()))
    {
        RtccWrOn();            // have to allow the WRTEN in order to write the new value
    }
    if((wasOn=mRtccIsOn()))
    {
        wasAlrm= mRtccIsAlrmEnabled();
        mRtccOff();         // turn module off before updating the time
    }

    mRtccClearRtcPtr();
    mRtccSetRtcPtr(RTCCPTR_MASK_HRSWEEK);

    tempHourWDay.Val = RTCVAL;
    tempHourWDay.byte.LB = pTm->f.hour;


    mRtccClearRtcPtr();
    mRtccSetRtcPtr(RTCCPTR_MASK_HRSWEEK);

    RTCVAL = tempHourWDay.Val; // update device value
    RTCVAL = tempMinSec.Val;

    if(wasOn)
    {
        mRtccOn();
        if(wasAlrm)
        {
            mRtccAlrmEnable();
        }

        if(wasWrEn)
        {
            RtccWrOn();
        }
    }
    else
    {
        if(!wasWrEn)
        {
            mRtccWrOff();
        }
    }

    if(di)
    {
        /* Enable Global Interrupt */
        mRESTORE_CPU_IP(CPU_IPL);
    }


    return(TRUE);
}