123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /*
- * Get time according to system (RTC or whatever we have...)
- * This is similar to localtime() in the standard C library, except
- * only the current time is supported and some of the derived fields
- * are not produced.
- */
- #ifndef SYSTIME_H
- #define SYSTIME_H
- #include <stdint.h>
- struct tms_tick_reg {
- union {
- uint16_t ticks;
- struct {
- unsigned int tm_tick : 15;
- unsigned int tm_1sec : 1;
- };
- };
- } __attribute__((aligned(2)));
- struct tms {
- union {
- uint32_t words[2];
- struct {
- unsigned int tm_2sec : 5;
- unsigned int tm_min : 6;
- unsigned int tm_hour : 5;
- unsigned int tm_mday : 5;
- unsigned int tm_mon : 4;
- unsigned int tm_year : 7;
- struct tms_tick_reg hold;
- struct tms_tick_reg now;
- };
- };
- } __attribute__((aligned(4)));
- static inline struct tms get_systime(void)
- {
- struct tms tms;
- tms.words[0] = SYSCLOCK_DATETIME;
- tms.words[1] = SYSCLOCK_TICK;
- return tms;
- }
- static inline void set_systime(struct tms tms)
- {
- SYSCLOCK_TICK_HOLD = tms.hold.ticks;
- SYSCLOCK_DATETIME = tms.words[0];
- }
- static inline unsigned int tms_sec(struct tms tms)
- {
- return (tms.tm_2sec << 1) | tms.hold.tm_1sec;
- }
- #endif /* SYSTIME_H */
|