Initial import
[avr_bc100.git] / BaseTinyFirmware / GCC / OWI.h
1 // This file has been prepared for Doxygen automatic documentation generation.\r
2 /*! \file ********************************************************************\r
3  *\r
4  * \brief\r
5  *      Header file for OWI.c\r
6  *\r
7  *      Contains definitions used in the polled 1-Wire(R) driver.\r
8  *\r
9  * \par Application Note:\r
10  *      AVR458: Charging Li-Ion Batteries with BC100\n\r
11  *      One-wire protocol based on AVR318 - Dallas 1-Wire(R) master.\r
12  *\r
13  * \par Documentation:\r
14  *      For comprehensive code documentation, supported compilers, compiler\r
15  *      settings and supported devices see readme.html\r
16  *\r
17  * \author\r
18  *      Atmel Corporation: http://www.atmel.com \n\r
19  *      Support email: avr@atmel.com \n\r
20  *      Original author: \n\r
21  *\r
22  * $Name$\r
23  * $Revision: 2261 $\r
24  * $RCSfile$\r
25  * $URL: http://svn.norway.atmel.com/AppsAVR8/avr458_Charging_Li-Ion_Batteries_with_BC100/tag/20070904_release_1.0/code/IAR/OWI.h $\r
26  * $Date: 2007-08-10 09:28:35 +0200 (fr, 10 aug 2007) $\n\r
27 ****************************************************************************/\r
28 \r
29 #ifndef OWI_H\r
30 #define OWI_H\r
31 \r
32 #include <avr/io.h>\r
33 \r
34 \r
35 //******************************************************************************\r
36 // Defines for CRC-functions\r
37 //******************************************************************************\r
38 #define     OWI_CRC_OK      0x00    //!< CRC check succeded\r
39 #define     OWI_CRC_ERROR   0x01    //!< CRC check failed\r
40 \r
41 \r
42 //******************************************************************************\r
43 // Defines for OWI-functions\r
44 //******************************************************************************\r
45 /*! \brief  CPU clock frequency. \r
46  *  \r
47  *  This define is used to calculate delays when the software only driver\r
48  *  is used. The CPU frequency must be at least 2.170 MHz to be able to\r
49  *  generate the shortest delays.\r
50  */\r
51 #define     CPU_FREQUENCY   8.000\r
52 \r
53 \r
54 /*! \brief  Use internal pull-up resistor on 1-Wire buses.\r
55  *\r
56  *  If this symbol is defined, the internal pull-up resister on the GPIO pins \r
57  *  of the AVR will be used to generate the necessary pull-up on the bus. If \r
58  *  an external pull-up resistor is used, uncomment this define.\r
59  */\r
60 //#define     OWI_USE_INTERNAL_PULLUP\r
61 \r
62 \r
63 // Port configuration registers for 1-Wire buses.\r
64 // Make sure that all three registers belong to the same port.\r
65 #define     OWI_PORT        PORTA   //!< 1-Wire PORT Data register.\r
66 #define     OWI_PIN         PINA    //!< 1-Wire Input pin register.\r
67 #define     OWI_DDR         DDRA    //!< 1-Wire Data direction register.\r
68 \r
69 \r
70 //******************************************************************************\r
71 // Pin bitmasks\r
72 //******************************************************************************\r
73 #define     OWI_PIN_0       0x01\r
74 #define     OWI_PIN_1       0x02\r
75 #define     OWI_PIN_2       0x04\r
76 #define     OWI_PIN_3       0x08\r
77 #define     OWI_PIN_4       0x10\r
78 #define     OWI_PIN_5       0x20\r
79 #define     OWI_PIN_6       0x40\r
80 #define     OWI_PIN_7       0x80\r
81 \r
82 \r
83 //******************************************************************************\r
84 // Timing parameters\r
85 //******************************************************************************\r
86 //! Timing delay when pulling bus low and releasing bus.\r
87 #define     OWI_DELAY_OFFSET_CYCLES    13   \r
88 \r
89 // Bit timing delays in clock cycles (= us*clock freq in MHz).\r
90 #define     OWI_DELAY_A_STD_MODE    (unsigned long)((6   * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)\r
91 #define     OWI_DELAY_B_STD_MODE    (unsigned long)((64  * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)\r
92 #define     OWI_DELAY_C_STD_MODE    (unsigned long)((60  * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)\r
93 #define     OWI_DELAY_D_STD_MODE    (unsigned long)((10  * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)\r
94 #define     OWI_DELAY_E_STD_MODE    (unsigned long)((9   * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)\r
95 #define     OWI_DELAY_F_STD_MODE    (unsigned long)((55  * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)\r
96 //#define     OWI_DELAY_G_STD_MODE  (unsigned long)((0   * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)\r
97 #define     OWI_DELAY_H_STD_MODE    (unsigned long)((480 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)\r
98 #define     OWI_DELAY_I_STD_MODE    (unsigned long)((70  * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)\r
99 #define     OWI_DELAY_J_STD_MODE    (unsigned long)((410 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)\r
100 \r
101 \r
102 //******************************************************************************\r
103 // ROM commands\r
104 //******************************************************************************\r
105 #define     OWI_ROM_READ    0x33    //!< READ ROM command code.\r
106 #define     OWI_ROM_SKIP    0xcc    //!< SKIP ROM command code.\r
107 #define     OWI_ROM_MATCH   0x55    //!< MATCH ROM command code.\r
108 #define     OWI_ROM_SEARCH  0xf0    //!< SEARCH ROM command code.\r
109 \r
110 \r
111 //******************************************************************************\r
112 // Return codes\r
113 //******************************************************************************\r
114 #define     OWI_ROM_SEARCH_FINISHED     0x00   //!< Search finished return code.\r
115 #define     OWI_ROM_SEARCH_FAILED       0xff   //!< Search failed return code.\r
116 \r
117 \r
118 //******************************************************************************\r
119 // Macros\r
120 //******************************************************************************\r
121 /*! \brief Pull 1-Wire bus low.\r
122  *\r
123  *  This macro sets the direction of the 1-Wire pin(s) to output and \r
124  *  pull the line(s) low.\r
125  *  \r
126  *  \param bitMask  A bitmask of the buses to pull low.\r
127  */\r
128 #define OWI_PULL_BUS_LOW(bitMask) \\r
129                         OWI_DDR |= (bitMask); \\r
130                         OWI_PORT &= ~(bitMask)\r
131 \r
132 \r
133 /*! \def OWI_RELEASE_BUS(bitMask)\r
134  *\r
135  * \brief  Release the bus. \r
136  *\r
137  * This macro releases the bus and enables the internal pull-up if\r
138  * it is used.\r
139  *\r
140  * \param  bitMask A bitmask of the buses to release.\r
141  */\r
142 #ifdef OWI_USE_INTERNAL_PULLUP            \r
143         // Set 1-Wire pin(s) to input and enable internal pull-up resistor.\r
144 #define OWI_RELEASE_BUS(bitMask) \\r
145                         OWI_DDR &= ~(bitMask); \\r
146                         OWI_PORT |= (bitMask)\r
147 \r
148 #else\r
149         // Set 1-Wire pin(s) to input mode. No internal pull-up enabled.\r
150 #define OWI_RELEASE_BUS(bitMask) \\r
151                         OWI_DDR &= ~(bitMask); \\r
152                         OWI_PORT &= ~(bitMask)\r
153 \r
154 #endif\r
155 \r
156 \r
157 //******************************************************************************\r
158 // Function prototypes\r
159 //******************************************************************************\r
160 void OWI_SendByte(unsigned char data, unsigned char pins);\r
161 unsigned char OWI_ReceiveByte(unsigned char pin);\r
162 void OWI_SkipRom(unsigned char pins);\r
163 void OWI_ReadRom(unsigned char * romValue, unsigned char pin);\r
164 void OWI_MatchRom(unsigned char * romValue, unsigned char pins);\r
165 unsigned char OWI_SearchRom(unsigned char * bitPattern,\r
166                                                                          unsigned char lastDeviation, unsigned char pin);\r
167 void OWI_Init(unsigned char pins);\r
168 void OWI_WriteBit1(unsigned char pins);\r
169 void OWI_WriteBit0(unsigned char pins);\r
170 unsigned char OWI_ReadBit(unsigned char pins);\r
171 unsigned char OWI_DetectPresence(unsigned char pins);\r
172 \r
173 unsigned char OWI_ComputeCRC8(unsigned char inData, unsigned char seed);\r
174 unsigned int OWI_ComputeCRC16(unsigned char inData, unsigned int seed);\r
175 unsigned char OWI_CheckRomCRC(unsigned char *romValue);\r
176 \r
177 #endif // OWI_H\r
178 \r