Mercurial > ~darius > hgwebdir.cgi > avr-lib
annotate ds1307.h @ 8:119688bb743f
Don't spin forever waiting for the TWI hardware to do something.
I _think_ this will help the case where I find the micro is hanging but I
haven't seen an error from it yet.
author | darius@dons.net.au |
---|---|
date | Fri, 01 May 2009 15:21:31 +0930 |
parents | 3879f487b661 |
children | b5e4591b6570 |
rev | line source |
---|---|
0 | 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 | |
8
119688bb743f
Don't spin forever waiting for the TWI hardware to do something.
darius@dons.net.au
parents:
0
diff
changeset
|
33 #define IIC_NORESP -5 |
0 | 34 #define IIC_UNKNOWN -99 |
35 | |
36 #define DS1307_ADR 0xd0 // DS1307's TWI address | |
37 | |
38 typedef struct { | |
39 uint8_t year; | |
40 uint8_t month; | |
41 uint8_t day; | |
42 uint8_t hour; | |
43 uint8_t min; | |
44 uint8_t sec; | |
45 | |
46 uint8_t ctrl; | |
47 uint8_t ram[56]; | |
48 } ds1307_t; | |
49 | |
50 typedef union { | |
51 uint8_t raw[8]; | |
52 struct { | |
53 uint8_t sec : 4; | |
54 uint8_t sec10 : 3; // Seconds (0-59) | |
55 uint8_t ch : 1; // Clock enable (1 = off) | |
56 | |
57 uint8_t min : 4; | |
58 uint8_t min10 : 3; // Minutes (0-59) | |
59 uint8_t pad0 : 1; | |
60 | |
61 uint8_t hour : 4; | |
62 uint8_t hour10 : 1; // Hours | |
63 uint8_t pmam : 1; // AM/PM => 1 = PM or extra bit for hour10 | |
64 uint8_t s1224 : 1; // 1 = 12 hour mode | |
65 uint8_t pad1 : 1; | |
66 | |
67 uint8_t dow : 3; // Day of the week (1-7) | |
68 uint8_t pad2 : 5; | |
69 | |
70 uint8_t day : 4; | |
71 uint8_t day10 : 2; // Day of the month (1-31) | |
72 uint8_t pad3 : 2; | |
73 | |
74 uint8_t month : 4; | |
75 uint8_t month10 : 1; | |
76 uint8_t pad4 : 3; // Month (1-12) | |
77 | |
78 uint8_t year : 4; | |
79 uint8_t year10 : 4; // Year (0-99) | |
80 | |
81 uint8_t rs : 2; // Rate select | |
82 uint8_t pad6 : 2; | |
83 uint8_t sqwe : 1; // Square wave enable | |
84 uint8_t pad5 : 2; | |
85 uint8_t out : 1; // Output control enable | |
86 } split; | |
87 } ds1307raw_t; | |
88 | |
89 int ds1307_init(void); | |
90 int8_t iic_read(uint8_t *data, uint8_t len, uint8_t adr, uint8_t sla); | |
91 int8_t iic_write(uint8_t *data, uint8_t len, uint8_t adr, uint8_t sla); | |
92 int8_t ds1307_gettod(ds1307raw_t *time); | |
93 int8_t ds1307_settod(char *date); | |
94 void ds1307_printtime(char *leader, char *trailer); |