CLOCK
CLOCK->clk_ctrl |= CLK_CTRL_READ;
tod.tod_year = BCD_TO_BYTE(CLOCK->clk_year) + YRBASE;
tod.tod_month = BCD_TO_BYTE(CLOCK->clk_month & 0x1f);
tod.tod_day = BCD_TO_BYTE(CLOCK->clk_day & 0x3f);
tod.tod_dow = BCD_TO_BYTE(CLOCK->clk_weekday & 0x7);
tod.tod_hour = BCD_TO_BYTE(CLOCK->clk_hour & 0x3f);
tod.tod_min = BCD_TO_BYTE(CLOCK->clk_min & 0x7f);
tod.tod_sec = BCD_TO_BYTE(CLOCK->clk_sec & 0x7f);
CLOCK->clk_ctrl &= ~CLK_CTRL_READ;
CLOCK->clk_watchdog = watchdog_bits;
CLOCK->clk_ctrl |= CLK_CTRL_WRITE; /* allow writes */
CLOCK->clk_year = BYTE_TO_BCD(tod.tod_year - YRBASE);
CLOCK->clk_month = BYTE_TO_BCD(tod.tod_month);
CLOCK->clk_day = BYTE_TO_BCD(tod.tod_day);
CLOCK->clk_weekday = BYTE_TO_BCD(tod.tod_dow);
CLOCK->clk_hour = BYTE_TO_BCD(tod.tod_hour);
CLOCK->clk_min = BYTE_TO_BCD(tod.tod_min);
CLOCK->clk_sec = BYTE_TO_BCD(tod.tod_sec);
CLOCK->clk_ctrl &= ~CLK_CTRL_WRITE; /* load values */
CLOCK->clk_watchdog = 0;
c = CLOCK->clk_flags; /* clear alarm intr flag by reading the reg */
CLOCK->clk_flags = c;
CLOCK->clk_interrupts &= ~CLK_ALARM_ENABLE; /* disable alarm intr */
CLOCK->clk_day &= ~CLK_FREQT; /* keep Freqency Test bit cleared */
CLOCK->clk_alm_day = BYTE_TO_BCD(tod.tod_day);
CLOCK->clk_alm_hours = BYTE_TO_BCD(tod.tod_hour);
CLOCK->clk_alm_mins = BYTE_TO_BCD(tod.tod_min);
CLOCK->clk_alm_secs = BYTE_TO_BCD(tod.tod_sec);
CLOCK->clk_interrupts |= CLK_ALARM_ENABLE; /* enable alarm intr */
c = CLOCK->clk_flags; /* clear alarm intr flag by reading the reg */
CLOCK->clk_flags = c;
CLOCK->clk_interrupts &= ~CLK_ALARM_ENABLE; /* disable alarm intr */