Commit the AM1805 library

Committer:
marcusC
Date:
Thu Dec 24 05:25:32 2015 +0000
Revision:
0:5e0616a05642
Commit the AM1805 library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marcusC 0:5e0616a05642 1 /* AM1805.h , AM1805 Sample code: external RTC module is used by host MCU */
marcusC 0:5e0616a05642 2
marcusC 0:5e0616a05642 3 typedef struct
marcusC 0:5e0616a05642 4 {
marcusC 0:5e0616a05642 5 uint8_t hundredth;
marcusC 0:5e0616a05642 6 uint8_t second;
marcusC 0:5e0616a05642 7 uint8_t minute;
marcusC 0:5e0616a05642 8 uint8_t hour;
marcusC 0:5e0616a05642 9 uint8_t date;
marcusC 0:5e0616a05642 10 uint8_t weekday;
marcusC 0:5e0616a05642 11 uint8_t month;
marcusC 0:5e0616a05642 12 uint8_t year;
marcusC 0:5e0616a05642 13 uint8_t century;
marcusC 0:5e0616a05642 14 uint8_t mode;
marcusC 0:5e0616a05642 15 } time_reg_struct_t;
marcusC 0:5e0616a05642 16
marcusC 0:5e0616a05642 17 typedef enum
marcusC 0:5e0616a05642 18 {
marcusC 0:5e0616a05642 19 XT1_INTERRUPT = 0x01, /**< WDI input pin will generate XT1 interrupt */
marcusC 0:5e0616a05642 20 XT2_INTERRUPT = 0x02 /**< EXTI input pin will generate XT2 interrupt */
marcusC 0:5e0616a05642 21 } input_interrupt_t;
marcusC 0:5e0616a05642 22
marcusC 0:5e0616a05642 23 typedef enum
marcusC 0:5e0616a05642 24 {
marcusC 0:5e0616a05642 25 DISABLE_ALARM = 0, /**< disable alarm */
marcusC 0:5e0616a05642 26 ONCE_PER_YEAR = 1, /**< once per year */
marcusC 0:5e0616a05642 27 ONCE_PER_MONTH = 2, /**< once per month */
marcusC 0:5e0616a05642 28 ONCE_PER_WEEK = 3, /**< once per week */
marcusC 0:5e0616a05642 29 ONCE_PER_DAY = 4, /**< once per day */
marcusC 0:5e0616a05642 30 ONCE_PER_HOUR = 5, /**< once per hour */
marcusC 0:5e0616a05642 31 ONCE_PER_MINUTE = 6, /**< once per minute */
marcusC 0:5e0616a05642 32 ONCE_PER_SECOND = 7, /**< once per second */
marcusC 0:5e0616a05642 33 ONCE_PER_10TH_SEC = 8, /**< once per 10th of a second */
marcusC 0:5e0616a05642 34 ONCE_PER_100TH_SEC = 9 /**< once per 100th of a second */
marcusC 0:5e0616a05642 35 } alarm_repeat_t;
marcusC 0:5e0616a05642 36
marcusC 0:5e0616a05642 37 typedef enum
marcusC 0:5e0616a05642 38 {
marcusC 0:5e0616a05642 39 PERIOD_US = 0, /**< period in us */
marcusC 0:5e0616a05642 40 PERIOD_SEC = 1 /**< period in seconds */
marcusC 0:5e0616a05642 41 } count_down_range_t;
marcusC 0:5e0616a05642 42
marcusC 0:5e0616a05642 43 typedef enum
marcusC 0:5e0616a05642 44 {
marcusC 0:5e0616a05642 45 SINGLE_LEVEL_INTERRUPT = 0, /**< single level interrupt */
marcusC 0:5e0616a05642 46 REPEAT_PULSE_1_4096_SEC = 1, /**< a repeated pulsed interrupt, 1/4096 s (XT mode), 1/128 s (RC mode) (range must be 0) */
marcusC 0:5e0616a05642 47 SINGLE_PULSE_1_4096_SEC = 2, /**< a single pulsed interrupt, 1/4096 s (XT mode), 1/128 s (RC mode) (range must be 0) */
marcusC 0:5e0616a05642 48 REPEAT_PLUSE_1_128_SEC = 3, /**< a repeated pulsed interrupt, 1/128 s (range must be 0) */
marcusC 0:5e0616a05642 49 SINGLE_PLUSE_1_128_SEC = 4, /**< a single pulsed interrupt, 1/128 s (range must be 0) */
marcusC 0:5e0616a05642 50 REPEAT_PLUSE_1_64_SEC = 5, /**< a repeated pulsed interrupt, 1/64 s (range must be 1) */
marcusC 0:5e0616a05642 51 SINGLE_PLUSE_1_64_SEC = 6 /**< a single pulsed interrupt, 1/64 s (range must be 1) */
marcusC 0:5e0616a05642 52 } count_down_repeat_t;
marcusC 0:5e0616a05642 53
marcusC 0:5e0616a05642 54 typedef enum
marcusC 0:5e0616a05642 55 {
marcusC 0:5e0616a05642 56 LEVEL_INTERRUPT = 0x00, /**< level interrupt */
marcusC 0:5e0616a05642 57 PULSE_1_8192_SEC = 0x01, /**< pulse of 1/8192s (XT) or 1/128 s (RC) */
marcusC 0:5e0616a05642 58 PULSE_1_64_SEC = 0x10, /**< pulse of 1/64 s */
marcusC 0:5e0616a05642 59 PULSE_1_4_SEC = 0x11 /**< pulse of 1/4 s */
marcusC 0:5e0616a05642 60 } interrupt_mode_t;
marcusC 0:5e0616a05642 61
marcusC 0:5e0616a05642 62 typedef enum
marcusC 0:5e0616a05642 63 {
marcusC 0:5e0616a05642 64 INTERNAL_FLAG = 0, /**< internal flag only */
marcusC 0:5e0616a05642 65 PIN_FOUT_nIRQ = 1, /**< generate the interrupt on FOUT/nIRQ */
marcusC 0:5e0616a05642 66 PIN_PSW_nIRQ2 = 2, /**< generate the interrupt on PSW/nIRQ2 */
marcusC 0:5e0616a05642 67 PIN_nTIRQ = 3 /**< generate the interrupt on nTIRQ (not apply to ALARM) */
marcusC 0:5e0616a05642 68 } interrupt_pin_t;
marcusC 0:5e0616a05642 69
marcusC 0:5e0616a05642 70 bool am1805_init(void);
marcusC 0:5e0616a05642 71
marcusC 0:5e0616a05642 72 void am1805_register_read(char register_address, char *destination, uint8_t number_of_bytes);
marcusC 0:5e0616a05642 73
marcusC 0:5e0616a05642 74 void am1805_register_write(char register_address, uint8_t value);
marcusC 0:5e0616a05642 75
marcusC 0:5e0616a05642 76 void am1805_burst_write(uint8_t *value, uint8_t number_of_bytes);
marcusC 0:5e0616a05642 77
marcusC 0:5e0616a05642 78 uint8_t am1805_read_ram(uint8_t address);
marcusC 0:5e0616a05642 79
marcusC 0:5e0616a05642 80 void am1805_write_ram(uint8_t address, uint8_t data);
marcusC 0:5e0616a05642 81
marcusC 0:5e0616a05642 82 void am1805_config_input_interrupt(input_interrupt_t index_Interrupt);
marcusC 0:5e0616a05642 83
marcusC 0:5e0616a05642 84 void am1805_set_time(time_reg_struct_t time_regs);
marcusC 0:5e0616a05642 85
marcusC 0:5e0616a05642 86 void am1805_get_time(time_reg_struct_t *time_regs);
marcusC 0:5e0616a05642 87
marcusC 0:5e0616a05642 88 void am1805_config_alarm(time_reg_struct_t time_regs, alarm_repeat_t repeat, interrupt_mode_t intmode, interrupt_pin_t pin);
marcusC 0:5e0616a05642 89
marcusC 0:5e0616a05642 90 void am1805_config_countdown_timer(count_down_range_t range, int32_t period, count_down_repeat_t repeat, interrupt_pin_t pin);
marcusC 0:5e0616a05642 91
marcusC 0:5e0616a05642 92 void am1805_set_sleep(uint8_t timeout, uint8_t mode);