📄 dviic.lst
字号:
C51 COMPILER V7.50 DVIIC 01/17/2007 12:46:54 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DVIIC
OBJECT MODULE PLACED IN .\output\dvIIC.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\code\dvIIC.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\dvIIC.lst) OBJECT(.
-\output\dvIIC.obj)
line level source
1
2 #include "mtv415.h"
3 #include "dvIIC.h"
4 #include "extData.h"
5 #include "intrins.h"
6 // ---------------------------------------------------------------------------
7 // G L O B A L D E F I N I T I O N S
8 // ---------------------------------------------------------------------------
9 // ---------------------------------------------------------------------------
10 // L O C A L S Y M B O L D E C L A R A T I O N S
11 // ---------------------------------------------------------------------------
12
13 BOOL g_bIICError;
14
15 static BOOL m_bNoAck;
16 static BYTE m_cIICTimer;
17
18 #define SendBits(cData) MBUF = cData
19
20 #define SendIICStart() { \
21 IICCTR = 0x00;\
22 IICCTR = 0x01;\
23 }
24
25 #define SendIICStop() { \
26 IICCTR = 0x00;\
27 IICCTR = 0x02;\
28 INTFLG1 = 0x00;\
29 }
30
31
32 // ---------------------------------------------------------------------------
33 // L O C A L F U N C T I O N S P R O T O T Y P E S
34 // ---------------------------------------------------------------------------
35
36 static void IICAckWait(void);
37 void IICWrite(
38 BYTE cDeviceAddress,
39 WORD wRegisterAddress,
40 PBYTE pacBuffer,
41 WORD wBufferCount,
42 BOOL bFlag)
43
44 {
45 1 data WORD i;
46 1 data BYTE cCount = 0;
47 1 g_bIICError = FALSE;
48 1 do
49 1 {
50 2 cCount ++;
51 2 SendIICStop();
52 2 SendBits(cDeviceAddress);
53 2 SendIICStart();
54 2 IICAckWait();
C51 COMPILER V7.50 DVIIC 01/17/2007 12:46:54 PAGE 2
55 2
56 2 if (m_bNoAck)
57 2 continue;
58 2
59 2 if (bFlag)
60 2 {
61 3 SendBits((BYTE)((wRegisterAddress & 0xFF00) >> 8));
62 3 IICAckWait();
63 3 if (m_bNoAck)
64 3 continue;
65 3 }
66 2
67 2
68 2 SendBits((BYTE)(wRegisterAddress & 0x00FF));
69 2 IICAckWait();
70 2 if (m_bNoAck)
71 2 continue;
72 2
73 2 i = 0;
74 2
75 2
76 2 for(; i < wBufferCount; i++)
77 2 {
78 3 SendBits(pacBuffer[i]);
79 3 IICAckWait();
80 3 if (m_bNoAck)
81 3 break;
82 3
83 3 }
84 2 }while (IIC_PROCESS_MAX > cCount && m_bNoAck );
85 1 SendIICStop();
86 1 if (m_bNoAck)
87 1 g_bIICError = TRUE;
88 1 }
89
90 #if 0
void IICByteWrite(BYTE cDeviceAddress,
BYTE cRegisterAddress,
BYTE cBuffer)
{
data BYTE cCount = 0;
g_bIICError = FALSE;
do
{
cCount ++;
SendIICStop();
SendBits(cDeviceAddress);
SendIICStart();
IICAckWait();
if (m_bNoAck)
continue;
SendBits(cRegisterAddress );
IICAckWait();
if (m_bNoAck)
continue;
SendBits(cBuffer);
IICAckWait();
if (m_bNoAck)
continue;
C51 COMPILER V7.50 DVIIC 01/17/2007 12:46:54 PAGE 3
}while (IIC_PROCESS_MAX > cCount && m_bNoAck );
SendIICStop();
if(m_bNoAck)
g_bIICError = TRUE;
}
#endif
125
126 BOOL IICRead(BYTE cDeviceAddress,
127 WORD wRegisterAddress,
128 BYTE* pacBuffer,
129 BYTE cBufferCount,
130 BOOL bFlag)
131
132 {
133 1
134 1 data BYTE i;
135 1 data BYTE cCount =0;
136 1 g_bIICError = FALSE;
137 1 do
138 1 {
139 2 cCount ++;
140 2 SendIICStop();
141 2 SendBits(cDeviceAddress);
142 2 SendIICStart();
143 2 IICAckWait();
144 2 if (m_bNoAck)
145 2 continue;
146 2
147 2 if (bFlag)
148 2 {
149 3 SendBits((BYTE)((wRegisterAddress & 0xFF00) >> 8));
150 3 IICAckWait();
151 3 if (m_bNoAck)
152 3 continue;
153 3 }
154 2 SendBits((BYTE)(wRegisterAddress & 0x00FF));
155 2 IICAckWait();
156 2 if (m_bNoAck)
157 2 continue;
158 2
159 2 SendIICStop();
160 2 cDeviceAddress = cDeviceAddress | 0x01;
161 2 SendBits(cDeviceAddress);
162 2 SendIICStart();
163 2 IICAckWait();
164 2 if (m_bNoAck)
165 2 continue;
166 2
167 2 pacBuffer[0]= MBUF;
168 2
169 2 for(i = 0; i < cBufferCount - 1; i++)
170 2 {
171 3
172 3 IICAckWait();
173 3 if (m_bNoAck)
174 3 break;
175 3 pacBuffer[i]= MBUF;
176 3 }
177 2
178 2 if (m_bNoAck)
C51 COMPILER V7.50 DVIIC 01/17/2007 12:46:54 PAGE 4
179 2 continue;
180 2
181 2 IICCTR = 0x05;
182 2 IICAckWait();
183 2 if (m_bNoAck)
184 2 continue;
185 2
186 2 pacBuffer[i]= MBUF;
187 2
188 2 }while (IIC_PROCESS_MAX > cCount && m_bNoAck );
189 1 SendIICStop();
190 1
191 1 if(m_bNoAck)
192 1 g_bIICError = TRUE;
193 1 return g_bIICError;
194 1 }
195
196
197 static void IICAckWait(void)
198 {
199 1 _nop_ ();
200 1 _nop_ ();
201 1 _nop_ ();
202 1 _nop_ ();
203 1
204 1 m_cIICTimer = IIC_WAIT_ACK_TIME;
205 1 while((m_cIICTimer > 0) && ((INTFLG1 & 0x1) == 0));
206 1
207 1 if (( IICSTUS1 & 0x01 ) == 0)
208 1 m_bNoAck = 0;
209 1 else
210 1 m_bNoAck = 1;
211 1
212 1 INTFLG1 = 0;
213 1 }
214
215 void IICTimerProcess(void)
216 {
217 1 if (m_cIICTimer)
218 1 m_cIICTimer --;
219 1 }
220
221 //HM added,06/07/14
222 // ---------------------------------------------------------------------------
223 //Write register value
224 //
225 // Params:
226 // cSlaveAddr: Slave Address
227 // cRegAddr: Register addr
228 // cRegValue: Register value
229 //
230 // Return:
231 // None
232 // ---------------------------------------------------------------------------
233 void dvRegisterWrite(BYTE cSlaveAddr,BYTE cRegAddr,BYTE cRegValue)
234 {
235 1 IICWrite(cSlaveAddr,cRegAddr,&cRegValue,1,0);
236 1 }
237 #ifdef IIC
// ---------------------------------------------------------------------------
//Read register value
//
C51 COMPILER V7.50 DVIIC 01/17/2007 12:46:54 PAGE 5
// Params:
// cSlaveAddr: Slave Address
// cRegAddr: Register addr
// pcRegValue: Register value
//
// Return:
// None
// ---------------------------------------------------------------------------
void dvRegisterRead(BYTE cSlaveAddr,BYTE cRegAddr,BYTE *pcRegValue)
{
IICRead(cSlaveAddr,cRegAddr,pcRegValue,1,0);
}
#endif
255 // ---------------------------------------------------------------------------
256 // Write some bits of the register
257 //
258 // Params:
259 // cSlaveAddr : Slave Address
260 // cRegAddr: Register addr
261 // cMaskValue:Mask value
262 // cRegValue: Value for mask bits
263 //
264 // Return:
265 // None
266 // ---------------------------------------------------------------------------
267 void dvRegisterMaskWrite (BYTE cSlaveAddr,BYTE cRegAddr, BYTE cMaskValue,BYTE cRegValue)
268 {
269 1 BYTE cValue,cMask;
270 1 cMask = cMaskValue;
271 1 IICRead(cSlaveAddr,cRegAddr,&cValue,1,0);
272 1 cValue &=(~cMaskValue);
273 1 while(!(cMask&0x01))
274 1 {
275 2 cMask = cMask>>1;
276 2 cRegValue = cRegValue<<1;
277 2 }
278 1 cValue |= (cRegValue&cMaskValue);
279 1 IICWrite(cSlaveAddr,cRegAddr,&cValue,1,0);
280 1
281 1 }
282 #if 0
// ---------------------------------------------------------------------------
// Read some bits of the register
//
// Params:
// cSlaveAddr : Slave Address
// cRegAddr: Register addr
// cMaskValue:Mask value
// pcRegValue: Value for mask bits
//
// Return:
// None
// ---------------------------------------------------------------------------
void dvRegisterMaskRead (BYTE cSlaveAddr,BYTE cRegAddr, BYTE cMaskValue,BYTE *pcRegValue)
{
BYTE cValue,cMask;
IICRead(cSlaveAddr,cRegAddr,&cValue,1,0);
cMask = cMaskValue;
cValue = cValue&cMaskValue;
while(!(cMask&0x01))
C51 COMPILER V7.50 DVIIC 01/17/2007 12:46:54 PAGE 6
{
cMask = cMask>>1;
cValue = cValue>>1;
}
*pcRegValue = cValue;
}
#endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 643 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 1 22
PDATA SIZE = ---- ----
DATA SIZE = ---- 5
IDATA SIZE = ---- ----
BIT SIZE = 2 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -