| 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_1sec : 1;	    unsigned int tm_tick : 15;	};    };} __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 */
 |