Mercurial > ~darius > hgwebdir.cgi > tempctrl
comparison ds1307.h @ 60:50fca9562310
Add support for reading/writing to a DS1307 over TWI/IIC.
Note that iic_read() appears to have a bug where it stops 1 byte earlier than
expected, work around it for now by adding 1 in the gettod() function.
tempctrl.c now prints the TOD as read from the RTC for each line.
author | darius@Inchoate |
---|---|
date | Thu, 30 Oct 2008 11:53:32 +1030 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
59:c72cf25881fe | 60:50fca9562310 |
---|---|
1 /* | |
2 * DS1307 headers | |
3 * | |
4 * Copyright (c) 2008 | |
5 * Daniel O'Connor <darius@dons.net.au>. All rights reserved. | |
6 * | |
7 * Redistribution and use in source and binary forms, with or without | |
8 * modification, are permitted provided that the following conditions | |
9 * are met: | |
10 * 1. Redistributions of source code must retain the above copyright | |
11 * notice, this list of conditions and the following disclaimer. | |
12 * 2. Redistributions in binary form must reproduce the above copyright | |
13 * notice, this list of conditions and the following disclaimer in the | |
14 * documentation and/or other materials provided with the distribution. | |
15 * | |
16 * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND | |
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
19 * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE | |
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
26 * SUCH DAMAGE. | |
27 */ | |
28 | |
29 #define IIC_STFAIL -1 | |
30 #define IIC_FAILARB -2 | |
31 #define IIC_SLNAK -3 | |
32 #define IIC_NOREPLY -4 | |
33 #define IIC_UNKNOWN -99 | |
34 | |
35 #define DS1307_ADR 0xd0 // DS1307's TWI address | |
36 | |
37 typedef struct { | |
38 uint8_t year; | |
39 uint8_t month; | |
40 uint8_t day; | |
41 uint8_t hour; | |
42 uint8_t min; | |
43 uint8_t sec; | |
44 | |
45 uint8_t ctrl; | |
46 uint8_t ram[56]; | |
47 } ds1307_t; | |
48 | |
49 typedef union { | |
50 uint8_t raw[8]; | |
51 struct { | |
52 uint8_t sec : 4; | |
53 uint8_t sec10 : 3; // Seconds (0-59) | |
54 uint8_t ch : 1; // Clock enable (1 = off) | |
55 | |
56 uint8_t min : 4; | |
57 uint8_t min10 : 3; // Minutes (0-59) | |
58 uint8_t pad0 : 1; | |
59 | |
60 uint8_t hour : 4; | |
61 uint8_t hour10 : 1; // Hours | |
62 uint8_t pmam : 1; // AM/PM => 1 = PM or extra bit for hour10 | |
63 uint8_t s1224 : 1; // 1 = 12 hour mode | |
64 uint8_t pad1 : 1; | |
65 | |
66 uint8_t dow : 3; // Day of the week (1-7) | |
67 uint8_t pad2 : 5; | |
68 | |
69 uint8_t day : 4; | |
70 uint8_t day10 : 2; // Day of the month (1-31) | |
71 uint8_t pad3 : 2; | |
72 | |
73 uint8_t month : 4; | |
74 uint8_t month10 : 1; | |
75 uint8_t pad4 : 3; // Month (1-12) | |
76 | |
77 uint8_t year : 4; | |
78 uint8_t year10 : 4; // Year (0-99) | |
79 | |
80 uint8_t rs : 2; // Rate select | |
81 uint8_t pad6 : 2; | |
82 uint8_t sqwe : 1; // Square wave enable | |
83 uint8_t pad5 : 2; | |
84 uint8_t out : 1; // Output control enable | |
85 } split; | |
86 } ds1307raw_t; | |
87 | |
88 int ds1307_init(void); | |
89 int iic_read(uint8_t *data, uint8_t len, uint8_t adr, uint8_t sla); | |
90 int iic_write(uint8_t *data, uint8_t len, uint8_t adr, uint8_t sla); | |
91 int ds1307_gettod(ds1307raw_t *time); | |
92 int ds1307_settod(char *date); | |
93 void ds1307_printtime(char *leader, char *trailer); |