📄 ram.lst
字号:
C51 COMPILER V7.50 RAM 07/03/2006 14:17:07 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE RAM
OBJECT MODULE PLACED IN ..\..\OUTPUT\NTSC_SOUTH\Ram.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ..\..\KERNEL\Ram.c OPTIMIZE(9,SIZE) BROWSE ORDER INCDIR(..\..\INC\;..\..\UI
-\NTSC_SOUTH\) DEFINE(PABLO,MCU_MTV412M,OLGA) DEBUG OBJECTEXTEND PRINT(..\..\OUTPUT\NTSC_SOUTH\Ram.lst) OBJECT(..\..\OUTP
-UT\NTSC_SOUTH\Ram.obj)
line level source
1 /******************************************************************************
2 Copyright (c) 2003 MStar Semiconductor, Inc.
3 All rights reserved.
4
5 [Module Name]: Ram.c
6 [Date]: 16-Dec-2003
7 [Comment]:
8 EEPROM access subroutines.
9 [Reversion History]:
10 *******************************************************************************/
11
12 #define _RAM_C_
13
14 // System
15
16 // Common
17 #include "define.h"
18 #include "mcu.h"
19 #include "userdef.h"
20 // External
21 #include "board.h"
22 #include "i2c.h"
23 #include "common.h"
24 #include "global.h"
25
26 // Internal
27 #include "ram.h"
28
29 ///////////////////////////////////////////////////////////////////////////////
30 // <Function>: rmReadByte
31 //
32 // <Description>: Read byte from EEPROM.
33 //
34 // <Returns> : Read byte.
35 //
36 // <Parameter>: - <Flow> - <Description>
37 // wIndex - In - index
38 //-----------------------------------------------------------------------------
39 //
40 ///////////////////////////////////////////////////////////////////////////////
41 BYTE rmReadByte(WORD wIndex)
42 {
43 1 if (RM_EEPROM_TYPE == RM_TYPE_24C16)
44 1 {
45 2 return i2cReadByte(rmCalDeviceAdr(wIndex), LOBYTE(wIndex));
46 2 }
47 1 else if (RM_EEPROM_TYPE == RM_TYPE_24C32)
48 1 {
49 2 BYTE ucBuf; // byte buffer
50 2
51 2 rmBurstReadBytes(wIndex, &ucBuf, sizeof(ucBuf));
52 2 return ucBuf;
53 2 }
C51 COMPILER V7.50 RAM 07/03/2006 14:17:07 PAGE 2
54 1 }
55
56 ///////////////////////////////////////////////////////////////////////////////
57 // <Function>: rmWriteByte
58 //
59 // <Description>: Write byte to EEPROM.
60 //
61 // <Returns> : None
62 //
63 // <Parameter>: - <Flow> - <Description>
64 // wIndex - In - index
65 // ucVal - In - data
66 //-----------------------------------------------------------------------------
67 //
68 ///////////////////////////////////////////////////////////////////////////////
69 void rmWriteByte(WORD wIndex, BYTE ucVal)
70 {
71 1 if (RM_EEPROM_TYPE == RM_TYPE_24C16)
72 1 i2cWriteByte(rmCalDeviceAdr(wIndex), LOBYTE(wIndex), ucVal);
73 1 #if(RM_EEPROM_TYPE == RM_TYPE_24C32)
else if(RM_EEPROM_TYPE == RM_TYPE_24C32)
rmPageWrite(wIndex, &ucVal, sizeof(ucVal));
#endif
77 1 }
78
79 ///////////////////////////////////////////////////////////////////////////////
80 // <Function>: rmBurstReadBytes
81 //
82 // <Description>: EEPROM burst read bytes
83 //
84 // <Parameter>: - <Flow> - <Description>
85 // wIndex - In - index
86 // pBuf - Out - buffer pointer
87 // ucBufLen - In - buffer length
88 //-----------------------------------------------------------------------------
89 //
90 ///////////////////////////////////////////////////////////////////////////////
91 void rmBurstReadBytes(WORD wIndex, BYTE* pBuf, BYTE ucBufLen)
92 {
93 1 if (RM_EEPROM_TYPE == RM_TYPE_24C16)
94 1 {
95 2 i2cBurstReadBytes(rmCalDeviceAdr(wIndex), LOBYTE(wIndex), pBuf, ucBufLen);
96 2 }
97 1 else if (RM_EEPROM_TYPE == RM_TYPE_24C32)
98 1 {
99 2 BYTE ucDummy; // loop dummy
100 2
101 2 ucDummy = I2C_ACCESS_DUMMY_TIME;
102 2 while (ucDummy--)
103 2 {
104 3 if (i2c_AccessStart(RM_DEVICE_ADR, I2C_TRANS_WRITE) == FALSE)
105 3 continue;
106 3
107 3 if (i2c_SendByte(HIBYTE(wIndex)) == I2C_NON_ACKNOWLEDGE) // check non-acknowledge
108 3 continue;
109 3
110 3 if (i2c_SendByte(LOBYTE(wIndex)) == I2C_NON_ACKNOWLEDGE) // check non-acknowledge
111 3 continue;
112 3
113 3 if (i2c_AccessStart(RM_DEVICE_ADR, I2C_TRANS_READ) == FALSE)
114 3 continue;
115 3
C51 COMPILER V7.50 RAM 07/03/2006 14:17:07 PAGE 3
116 3 while (ucBufLen--) // loop to burst read
117 3 {
118 4 *pBuf = i2c_ReceiveByte(ucBufLen); // receive byte
119 4
120 4 pBuf++; // next byte pointer
121 4 } // while
122 3
123 3 break;
124 3 } // while
125 2
126 2 i2c_Stop();
127 2 Delay1ms(8);
128 2 }
129 1 }
130
131 ///////////////////////////////////////////////////////////////////////////////
132 // <Function>: rmPageWrite
133 //
134 // <Description>: EEPROM page write for 24C32 only!!
135
136 // <Parameter>: - <Flow> - <Description>
137 // wIndex - In - index
138 // pBuf - Out - buffer pointer
139 // ucBufLen - In - buffer length
140 //-----------------------------------------------------------------------------
141 //
142 ///////////////////////////////////////////////////////////////////////////////
143
144 void rmPageWrite(WORD wIndex, BYTE* pBuf, BYTE ucBufLen)
145 {
146 1 BYTE ucDummy; // loop dummy
147 1
148 1 ucDummy = I2C_ACCESS_DUMMY_TIME;
149 1 while (ucDummy--)
150 1 {
151 2 if (i2c_AccessStart(RM_DEVICE_ADR, I2C_TRANS_WRITE) == FALSE)
152 2 continue;
153 2
154 2 if (i2c_SendByte(HIBYTE(wIndex)) == I2C_NON_ACKNOWLEDGE) // check non-acknowledge
155 2 continue;
156 2
157 2 if (i2c_SendByte(LOBYTE(wIndex)) == I2C_NON_ACKNOWLEDGE) // check non-acknowledge
158 2 continue;
159 2
160 2 while (ucBufLen--) // loop of writting data
161 2 {
162 3 i2c_SendByte(*pBuf); // send byte
163 3
164 3 pBuf++; // next byte pointer
165 3 } // while
166 2
167 2 break;
168 2 } // while
169 1
170 1 i2c_Stop();
171 1 }
172
173 ///////////////////////////////////////////////////////////////////////////////
174 // <Function>: rmBurstWriteBytes
175 //
176 // <Description>: EEPROM burst write bytes
177 //
C51 COMPILER V7.50 RAM 07/03/2006 14:17:07 PAGE 4
178 // <Parameter>: - <Flow> - <Description>
179 // wIndex - In - index
180 // pBuf - Out - buffer pointer
181 // ucBufLen - In - buffer length
182 //-----------------------------------------------------------------------------
183 //
184 ///////////////////////////////////////////////////////////////////////////////
185 void rmBurstWriteBytes(WORD wIndex, BYTE* pBuf, BYTE ucBufLen)
186 {
187 1 BYTE ucWriteCount; // write counter
188 1 BYTE ucRemainLen; // i2c word address
189 1
190 1 while (1)
191 1 {
192 2 // check page write roll over
193 2 if (ucBufLen > RM_PAGE_WRITE_LEN)
194 2 ucWriteCount = RM_PAGE_WRITE_LEN;
195 2 else
196 2 ucWriteCount = ucBufLen;
197 2
198 2 // check word address higher than page write bits
199 2 ucRemainLen = LOBYTE(wIndex) % RM_PAGE_WRITE_LEN;
200 2 if (ucRemainLen) // check ramain
201 2 {
202 3 ucRemainLen = RM_PAGE_WRITE_LEN - ucRemainLen;
203 3 if (ucWriteCount > ucRemainLen) // check not roll over
204 3 ucWriteCount = ucRemainLen;
205 3 }
206 2
207 2 // EEPROM page write
208 2 if (RM_EEPROM_TYPE == RM_TYPE_24C16)
209 2 {
210 3 i2cBurstWriteBytes(rmCalDeviceAdr(wIndex), LOBYTE(wIndex), pBuf, ucWriteCount);
211 3 }
212 2 else if (RM_EEPROM_TYPE == RM_TYPE_24C32)
213 2 {
214 3 rmPageWrite(wIndex, pBuf, ucWriteCount);
215 3 }
216 2
217 2 // check end of buffer
218 2 ucBufLen -= ucWriteCount;
219 2 if (ucBufLen == 0)
220 2 break;
221 2
222 2 wIndex += ucWriteCount; // next word address
223 2 pBuf += ucWriteCount; // next buffer pointer
224 2
225 2 Delay1ms(8);
226 2 } // while
227 1 }
228
229
230
231
232
233
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 245 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
C51 COMPILER V7.50 RAM 07/03/2006 14:17:07 PAGE 5
PDATA SIZE = ---- ----
DATA SIZE = ---- 22
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -