- Main Page
- Modules
- Data Structures
- Files

- File List
- Globals

csl_rtc.h
Go to the documentation of this file.

    00001 /*  ============================================================================
    00002  *   Copyright (c) Texas Instruments Inc 2002, 2003, 2004, 2005, 2008
    00003  *
    00004  *   Use of this software is controlled by the terms and conditions found in the
    00005  *   license agreement under which this software has been supplied.
    00006  *  ============================================================================
    00007  */
    00008
    00016 /* ============================================================================
    00017  * Revision History
    00018  * ================
    00019  * 25-Sep-2008 Created
    00020  * 04-May-2009 Added RTC_setCompensation API for C5505 PG1.4
    00021  * 25-May-2009 Modified based on the review comments
    00022  * ============================================================================
    00023  */
    00024
    00048 #ifndef _CSL_RTC_H_
    00049 #define _CSL_RTC_H_
    00050
    00051 #ifdef __cplusplus
    00052 extern "C" {
    00053 #endif
    00054
    00055 #include "cslr.h"
    00056 #include "csl_error.h"
    00057 #include "csl_types.h"
    00058 #include "soc.h"
    00059 #include "csl_general.h"
    00060
    00086 /*****************************************************************************\
    00087           RTC global macro declarations
    00088 \*****************************************************************************/
    00089
    00093 #define CSL_RTC_BIT_SET                 (1u)
    00094
    00095 #define CSL_RTC_BIT_RESET               (0)
    00096
    00097 #define CSL_RTC_WAIT_CYCLE              (50u)
    00098
    00099 #define CSL_RTC_SCRATCH1_MASK           (0x8000u)
    00100
    00101 #define CSL_RTC_STATUS_MASK             (0x803Fu)
    00102
    00103 #define CSL_RTC_DISPATCH_TABLE_SIZE     (0x07u)
    00104
    00105 #define CSL_RTC_COMPENSATION_MAX        (1024u)
    00106
    00107 #define CSL_RTC_TIME_OUT                (0x1FFu)
    00108
    00112 /**************************************************************************\
    00113 * RTC global typedef declarations                                         *
    00114 \**************************************************************************/
    00115
    00125 typedef enum
    00126 {
    00127     CSL_RTC_DAY_PERIODIC_INTERRUPT,   /* day periodic Interrupt enable */
    00128     CSL_RTC_HR_PERIODIC_INTERRUPT,    /* hour periodic Interrupt enable */
    00129     CSL_RTC_MINS_PERIODIC_INTERRUPT,  /* minute periodic Interrupt enable */
    00130     CSL_RTC_SEC_PERIODIC_INTERRUPT,   /* second periodic Interrupt enable */
    00131     CSL_RTC_MS_PERIODIC_INTERRUPT  /* milli second periodic Interrupt enable*/
    00132 } CSL_RTCPeriodicInterruptType;
    00133
    00140 typedef enum
    00141 {
    00142     CSL_RTC_MSEVENT_INTERRUPT,     /* milli second int enable      */
    00143     CSL_RTC_SECEVENT_INTERRUPT,    /* second event int enable      */
    00144     CSL_RTC_MINSEVENT_INTERRUPT,   /* minute event int enable      */
    00145     CSL_RTC_HREVENT_INTERRUPT,     /* hour event int enable        */
    00146     CSL_RTC_DAYEVENT_INTERRUPT,    /* day event int enable         */
    00147     CSL_RTC_EXTEVENT_INTERRUPT,    /* external event int enable    */
    00148     CSL_RTC_ALARM_INTERRUPT,       /* alarm int enable             */
    00149     CSL_RTC_INTERRUPT_NONE         /*  No interrupt enable         */
    00150 } CSL_RTCEventType;
    00151
    00156 typedef enum
    00157 {
    00158     CSL_RTC_COMPENSATION_NEGATIVE = 0,   /* Negative drift in the msec value */
    00159     CSL_RTC_COMPENSATION_POSITIVE,       /* Positive drift in the msec value */
    00160     CSL_RTC_COMPENSATION_INVALID         /* Invalid value for error checking */
    00161 } CSL_RTCCompType;
    00162
    00174 typedef struct {
    00175     Uint16 rtcmSec;
    00176     Uint16 rtcsec;
    00177     Uint16 rtcmin;
    00178     Uint16 rtchour;
    00179     Uint16 rtcday;
    00180     Uint16 rtcmonth;
    00181     Uint16 rtcyear;
    00182     Uint16 rtcmSeca;
    00183     Uint16 rtcseca;
    00184     Uint16 rtcmina;
    00185     Uint16 rtchoura;
    00186     Uint16 rtcdaya;
    00187     Uint16 rtcmontha;
    00188     Uint16 rtcyeara;
    00189     Uint16 rtcintcr;
    00190 } CSL_RtcConfig;
    00191
    00196 typedef struct
    00197 {
    00198     Uint16 year;
    00199     Uint16 month;
    00200     Uint16 day;
    00201 } CSL_RtcDate;
    00202
    00207 typedef struct {
    00208     Uint16 hours;
    00209     Uint16 mins;
    00210     Uint16 secs;
    00211     Uint16 mSecs;
    00212 } CSL_RtcTime;
    00213
    00218 typedef struct {
    00219     Uint16 year;
    00220     Uint16 month;
    00221     Uint16 day;
    00222     Uint16 hours;
    00223     Uint16 mins;
    00224     Uint16 secs;
    00225     Uint16 mSecs;
    00226 } CSL_RtcAlarm;
    00227
    00231 typedef struct
    00232 {
    00233     void (*MilEvtAddr)(void);
    00234     void (*SecEvtAddr)(void);
    00235     void (*MinEvtAddr)(void);
    00236     void (*HourEvtAddr)(void);
    00237     void (*DayEvtAddr)(void);
    00238     void (*ExtEvtAddr)(void);
    00239     void (*AlarmEvtAddr)(void);
    00240 } CSL_RtcIsrAddr;
    00241
    00246 typedef void (* CSL_RTCCallBackPtr)(void);
    00247
    00252 typedef struct {
    00254    CSL_RTCCallBackPtr isr[CSL_RTC_DISPATCH_TABLE_SIZE];
    00255 } CSL_RtcIsrDispatchTable;
    00256
    00260 /******************************************************************************
    00261  * CSL RTC Inline function
    00262  *****************************************************************************/
    00292 static inline
    00293 Uint16 rtcDivFun(
    00294           Uint16 dividend,
    00295           Uint16 divisor  )
    00296 {
    00297     Uint16 quoitient;
    00298
    00299     quoitient = 0;
    00300     while (dividend >= divisor)
    00301     {
    00302         quoitient++;
    00303         dividend = dividend - divisor;
    00304     }
    00305     return quoitient;
    00306 }
    00307
    00334 static inline
    00335 Uint16 rtcModuloDivFun(
    00336           Uint16 dividend,
    00337           Uint16 divisor  )
    00338 {
    00339     while (dividend >= divisor)
    00340     {
    00341         dividend = dividend - divisor;
    00342     }
    00343     return dividend;
    00344 }
    00378 static inline
    00379 Uint16 rtc_pow(
    00380            Uint16  var,
    00381            Uint16  pow )
    00382 {
    00383     Uint16 result;
    00384     Uint16 looper;
    00385
    00386     result = 1;
    00387     for (looper = 0 ; looper < pow; looper++)
    00388     {
    00389         result  = result * var;
    00390     }
    00391     return result;
    00392 }
    00393
    00397 /******************************************************************************
    00398  * RTC function declarations
    00399  *****************************************************************************/
    00432 void RTC_reset(void);
    00433
    00463 void RTC_start(void);
    00464
    00494 void RTC_stop(void);
    00495
    00550 CSL_Status RTC_config (
    00551                CSL_RtcConfig    *pConfig);
    00552
    00589 CSL_Status RTC_getConfig (
    00590                CSL_RtcConfig    *pGetConfig);
    00591
    00634 CSL_Status RTC_setTime (
    00635                CSL_RtcTime    *pRtcTime);
    00636
    00673 CSL_Status RTC_getTime (
    00674                   CSL_RtcTime     *pGetRtcTime);
    00675
    00717 CSL_Status RTC_setDate (
    00718                CSL_RtcDate    *pRtcDate);
    00719
    00756 CSL_Status RTC_getDate (
    00757                   CSL_RtcDate     *pGetRtcDate);
    00758
    00803 CSL_Status RTC_setAlarm (
    00804                CSL_RtcAlarm    *pRtcAlarm);
    00805
    00844 CSL_Status RTC_setPeriodicInterval (
    00845                CSL_RTCPeriodicInterruptType    periodicInterruptType);
    00846
    00885 CSL_Status RTC_eventEnable (
    00886                CSL_RTCEventType    rtcEvent);
    00887
    00926 CSL_Status RTC_eventDisable (
    00927                CSL_RTCEventType    rtcEvent);
    00928
    00960 CSL_RTCEventType RTC_getEventId(void);
    00961
    00998 Uint16 RTC_decToBcd (
    00999                Uint16    decVal);
    01000
    01038 Uint16 RTC_bcdToDec (
    01039                Uint16    hexVal);
    01040
    01076 CSL_Status RTC_setCallback(
    01077                CSL_RtcIsrDispatchTable      *rtcDispatchTable,
    01078                CSL_RtcIsrAddr                *isrAddr           );
    01079
    01129 CSL_Status RTC_setCompensation(CSL_RTCCompType    compType,
    01130                                Uint16             compVal);
    01131
    01132
    01137 #ifdef __cplusplus
    01138 }
    01139 #endif
    01140 #endif /* _CSL_RTC_H_ */
    01141