1 // This file has been prepared for Doxygen automatic documentation generation.
\r
2 /*! \file ********************************************************************
\r
5 * Header file for OWI.c
\r
7 * Contains definitions used in the polled 1-Wire(R) driver.
\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
13 * \par Documentation:
\r
14 * For comprehensive code documentation, supported compilers, compiler
\r
15 * settings and supported devices see readme.html
\r
18 * Atmel Corporation: http://www.atmel.com \n
\r
19 * Support email: avr@atmel.com \n
\r
20 * Original author: \n
\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
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
42 //******************************************************************************
\r
43 // Defines for OWI-functions
\r
44 //******************************************************************************
\r
45 /*! \brief CPU clock frequency.
\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
51 #define CPU_FREQUENCY 8.000
\r
54 /*! \brief Use internal pull-up resistor on 1-Wire buses.
\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
60 //#define OWI_USE_INTERNAL_PULLUP
\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
70 //******************************************************************************
\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
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
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
102 //******************************************************************************
\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
111 //******************************************************************************
\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
118 //******************************************************************************
\r
120 //******************************************************************************
\r
121 /*! \brief Pull 1-Wire bus low.
\r
123 * This macro sets the direction of the 1-Wire pin(s) to output and
\r
124 * pull the line(s) low.
\r
126 * \param bitMask A bitmask of the buses to pull low.
\r
128 #define OWI_PULL_BUS_LOW(bitMask) \
\r
129 OWI_DDR |= (bitMask); \
\r
130 OWI_PORT &= ~(bitMask)
\r
133 /*! \def OWI_RELEASE_BUS(bitMask)
\r
135 * \brief Release the bus.
\r
137 * This macro releases the bus and enables the internal pull-up if
\r
140 * \param bitMask A bitmask of the buses to release.
\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
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
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
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