00001
00030 #ifndef OWI_H
00031 #define OWI_H
00032
00033 #include <ioavr.h>
00034
00035
00036
00037
00038
00039 #define OWI_CRC_OK 0x00
00040 #define OWI_CRC_ERROR 0x01
00041
00042
00043
00044
00045
00052 #define CPU_FREQUENCY 8.000
00053
00054
00061
00062
00063
00064
00065
00066 #define OWI_PORT PORTA
00067 #define OWI_PIN PINA
00068 #define OWI_DDR DDRA
00069
00070
00071
00072
00073
00074 #define OWI_PIN_0 0x01
00075 #define OWI_PIN_1 0x02
00076 #define OWI_PIN_2 0x04
00077 #define OWI_PIN_3 0x08
00078 #define OWI_PIN_4 0x10
00079 #define OWI_PIN_5 0x20
00080 #define OWI_PIN_6 0x40
00081 #define OWI_PIN_7 0x80
00082
00083
00084
00085
00086
00088 #define OWI_DELAY_OFFSET_CYCLES 13
00089
00090
00091 #define OWI_DELAY_A_STD_MODE (unsigned long)((6 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
00092 #define OWI_DELAY_B_STD_MODE (unsigned long)((64 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
00093 #define OWI_DELAY_C_STD_MODE (unsigned long)((60 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
00094 #define OWI_DELAY_D_STD_MODE (unsigned long)((10 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
00095 #define OWI_DELAY_E_STD_MODE (unsigned long)((9 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
00096 #define OWI_DELAY_F_STD_MODE (unsigned long)((55 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
00097
00098 #define OWI_DELAY_H_STD_MODE (unsigned long)((480 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
00099 #define OWI_DELAY_I_STD_MODE (unsigned long)((70 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
00100 #define OWI_DELAY_J_STD_MODE (unsigned long)((410 * CPU_FREQUENCY) - OWI_DELAY_OFFSET_CYCLES)
00101
00102
00103
00104
00105
00106 #define OWI_ROM_READ 0x33
00107 #define OWI_ROM_SKIP 0xcc
00108 #define OWI_ROM_MATCH 0x55
00109 #define OWI_ROM_SEARCH 0xf0
00110
00111
00112
00113
00114
00115 #define OWI_ROM_SEARCH_FINISHED 0x00
00116 #define OWI_ROM_SEARCH_FAILED 0xff
00117
00118
00119
00120
00121
00129 #define OWI_PULL_BUS_LOW(bitMask) \
00130 OWI_DDR |= (bitMask); \
00131 OWI_PORT &= ~(bitMask)
00132
00133
00143 #ifdef OWI_USE_INTERNAL_PULLUP
00144
00145 #define OWI_RELEASE_BUS(bitMask) \
00146 OWI_DDR &= ~(bitMask); \
00147 OWI_PORT |= (bitMask)
00148
00149 #else
00150
00151 #define OWI_RELEASE_BUS(bitMask) \
00152 OWI_DDR &= ~(bitMask); \
00153 OWI_PORT &= ~(bitMask)
00154
00155 #endif
00156
00157
00158
00159
00160
00161 void OWI_SendByte(unsigned char data, unsigned char pins);
00162 unsigned char OWI_ReceiveByte(unsigned char pin);
00163 void OWI_SkipRom(unsigned char pins);
00164 void OWI_ReadRom(unsigned char * romValue, unsigned char pin);
00165 void OWI_MatchRom(unsigned char * romValue, unsigned char pins);
00166 unsigned char OWI_SearchRom(unsigned char * bitPattern,
00167 unsigned char lastDeviation, unsigned char pin);
00168 void OWI_Init(unsigned char pins);
00169 void OWI_WriteBit1(unsigned char pins);
00170 void OWI_WriteBit0(unsigned char pins);
00171 unsigned char OWI_ReadBit(unsigned char pins);
00172 unsigned char OWI_DetectPresence(unsigned char pins);
00173
00174 unsigned char OWI_ComputeCRC8(unsigned char inData, unsigned char seed);
00175 unsigned int OWI_ComputeCRC16(unsigned char inData, unsigned int seed);
00176 unsigned char OWI_CheckRomCRC(unsigned char *romValue);
00177
00178 #endif // OWI_H
00179