📄 i2c.lst
字号:
C51 COMPILER V7.50 I2C 04/01/2008 15:02:09 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN .\Output\I2c.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2c.c COMPACT OPTIMIZE(9,SIZE) BROWSE MODDP2 INCDIR(.\Include\) DEFINE(INTE
-RNAL_MCU) DEBUG OBJECTEXTEND PRINT(.\Source\I2c.lst) OBJECT(.\Output\I2c.obj)
line level source
1 //-------------------------------------------------------------
2 // This is changed for sdcc compiler 2.2.0a LJY000721
3 // ver0.11 2/20/2001 Support Z86129 Line 21 decoder.
4 //-------------------------------------------------------------
5 /*#include <io51.h>*/
6 //#include <pk-51.h> LJY000721
7
8 #include "Config.h"
9
10 #include "reg.h"
11 #include "typedefs.h"
12 #include "cpu.h"
13 #include "I2C.h"
14 #include "main.h"
15 #include "printf.h"
16 #include "osdbasic.h"
17 #include "CPU.h"
18
19
20 #define ID_ADDR 0xc5
21 #define ID_DATA 0xc6
22
23 extern BYTE DebugLevel;
24 #ifdef INTERNAL_MCU
25 extern BYTE xdata * data regTW88;
26 #endif
27
28
29 /*****************************************************************************/
30 /* */
31 /*****************************************************************************/
32
33 #define I2C_FAST
34
35 #ifdef I2C_FAST
36 #define I2Cdelay()
37 #else
void I2Cdelay(void)
{
BYTE i;
for(i=0; i<1; i++){
}
}
#endif
45
46 #if (defined QVGA) || (defined WQVGA)
47 void I2C_delay(void)
48 {
49 1 BYTE i;
50 1 for(i=0; i<255; i++){
51 2 i=i;
52 2 }
53 1 for(i=0; i<128; i++){
54 2 i=i;
C51 COMPILER V7.50 I2C 04/01/2008 15:02:09 PAGE 2
55 2 }
56 1 }
57 #else
#define I2C_delay()
#endif
60
61 BYTE I2CWriteData_Wait(BYTE value);
62
63 #if defined( SUPPORT_PC ) || defined( SUPPORT_DTV )
64 void WriteADC_TW88(BYTE index, BYTE dat)
65 {
66 1 BYTE page;
67 1
68 1 page = ReadTW88( 0xff ); // save page
69 1 WriteTW88( 0xff, 0x01 ); // change page1
70 1 WriteTW88(index, dat);
71 1 WriteTW88( 0xff, page ); // restore page
72 1
73 1 }
74
75 BYTE ReadADC_TW88(BYTE index)
76 {
77 1 BYTE page, val;
78 1
79 1 page = ReadTW88( 0xff ); // save page
80 1 WriteTW88( 0xff, 0x01 ); // change page1
81 1 val = ReadTW88( index );
82 1 WriteTW88( 0xff, page ); // restore page
83 1
84 1 return val;
85 1 }
86
87
88 #endif // SUPPORT_PC
89
90 void WriteEEP(WORD index, BYTE dat)
91 {
92 1 BYTE addr;
93 1
94 1 addr = (EEPROMI2CAddress | (index>>7)) & 0xfe;
95 1
96 1 I2CStart();
97 1 I2CWriteData(addr);
98 1 I2CWriteData((BYTE)index);
99 1 I2CWriteData(dat);
100 1 I2CStop();
101 1
102 1 #ifdef DEBUG_OSD
dPrintf("Write %02xh to [Adrs(%02xh)Index(%02xh)\r\n", (WORD)dat, (WORD)addr, (WORD)index );
#endif
105 1
106 1 delay(2);
107 1 }
108
109 BYTE ReadEEP(WORD index)
110 {
111 1 BYTE val;
112 1 BYTE addr;
113 1
114 1 addr = (EEPROMI2CAddress | (index>>7)) & 0xfe;
115 1
116 1 val = ReadI2C(addr,(BYTE)index);
C51 COMPILER V7.50 I2C 04/01/2008 15:02:09 PAGE 3
117 1
118 1 #ifdef DEBUG_OSD
dPrintf("Read [Adrs:%02xh,Index:%02xh] %02xh\r\n", (WORD)addr, (WORD)index, (WORD)val);
#endif
121 1
122 1 return val;
123 1 }
124
125 BYTE ReadI2C(BYTE addr, BYTE index)
126 {
127 1 BYTE val;
128 1
129 1 #ifdef INTERNAL_MCU
130 1 if ( addr == TW88I2CAddress ) {
131 2 return (ReadTW88(index));
132 2 }
133 1 #endif
134 1 I2CStart();
135 1 I2CWriteData(addr);
136 1 I2CWriteData(index);
137 1 I2CStart();
138 1 I2CWriteData(addr | 0x01);
139 1 val = I2CReadData();
140 1 I2CStop();
141 1
142 1 return val;
143 1 }
144
145
146 void WriteI2C(BYTE addr, BYTE index, BYTE val)
147 {
148 1 #ifdef INTERNAL_MCU
149 1 if ( addr == TW88I2CAddress ) {
150 2 WriteTW88(index, val);
151 2 return;
152 2 }
153 1 #endif
154 1 I2CStart();
155 1 I2CWriteData(addr);
156 1 I2CWriteData(index);
157 1 I2CWriteData(val);
158 1 I2CStop();
159 1 }
160
161 void WriteI2CnD(BYTE addr, BYTE index, BYTE val, BYTE cnt)
162 {
163 1 BYTE i;
164 1
165 1 #ifdef INTERNAL_MCU
166 1 if ( addr == TW88I2CAddress ) {
167 2 for ( i=0; i<cnt; i++)
168 2 WriteTW88(index, val);
169 2 return;
170 2 }
171 1 #endif // otherwise same to below 09/18/2007
172 1 I2CStart();
173 1 I2CWriteData(addr);
174 1 I2CWriteData(index);
175 1
176 1 for(i=0; i<cnt; i++){
177 2 I2CWriteData(val); //LJY050101
178 2 I2C_delay();
C51 COMPILER V7.50 I2C 04/01/2008 15:02:09 PAGE 4
179 2 }
180 1
181 1 I2CStop();
182 1 }
183
184 void WriteI2Cn(BYTE addr, BYTE index, BYTE *val, BYTE cnt)
185 {
186 1 BYTE i;
187 1
188 1 #ifdef INTERNAL_MCU
189 1 if ( addr == TW88I2CAddress ) {
190 2 for ( i=0; i<cnt; i++)
191 2 WriteTW88(index, *val++);
192 2 return;
193 2 }
194 1 #endif // otherwise same to below 09/18/2007
195 1
196 1 I2CStart();
197 1 I2CWriteData(addr);
198 1 I2CWriteData(index);
199 1
200 1 for(i=0; i<cnt; i++){
201 2 I2CWriteData(*(val+i));
202 2 I2C_delay();
203 2 }
204 1 I2CStop();
205 1 }
206
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -