📄 nvram.lst
字号:
C51 COMPILER V8.01 NVRAM 11/28/2006 08:08:10 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE NVRAM
OBJECT MODULE PLACED IN ..\..\1out\NVRam.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\..\msFunc\NVRam.c BROWSE INCDIR(..\..\inc;..\..\mslib;..\..\Device;..\..
-\kernal;..\..\msFunc;..\..\pc;..\..\tv) DEBUG OBJECTEXTEND PRINT(..\..\1out\NVRam.lst) OBJECT(..\..\1out\NVRam.obj)
line level source
1 #define _NVRAM_C_
2
3 #include "types.h"
4 #include "i2c.h"
5 #include "board.h"
6 #include "misc.h"
7 #include "global.h"
8 #include "Reg52.h"
9 #include "debug.h"
10
11 #define NVRAM_DEVICE 0xA0
12
13 #define rmCalDeviceAdr(wIndex) NVRAM_DEVICE|((HIBYTE(wIndex)&0x07)<<1)
14 #define HIBYTE(value) ((BYTE)((value) / 0x100))
15 #define LOBYTE(value) ((BYTE)(value))
16
17 #if RM_EEPROM_TYPE<RM_TYPE_SST512
18
19 #if (RM_EEPROM_TYPE == RM_TYPE_24C16)
20 #define RM_PAGE_WRITE_LEN 16
21 #elif (RM_EEPROM_TYPE == RM_TYPE_24C32)
#define RM_PAGE_WRITE_LEN 32
#endif
24
25 ///////////////////////////////////////////////////////////////////////////////
26 // <Function>: rmBurstReadBytes
27 //
28 // <Description>: EEPROM burst read bytes
29 //
30 // <Parameter>: - <Flow> - <Description>
31 // wIndex - In - index
32 // pBuf - Out - buffer pointer
33 // ucBufLen - In - buffer length
34 //-----------------------------------------------------------------------------
35 //
36 ///////////////////////////////////////////////////////////////////////////////
37 void rmBurstReadBytes(WORD wIndex, BYTE *pBuf, WORD ucBufLen)
38 {
39 1 #if (RM_EEPROM_TYPE == RM_TYPE_24C16)
40 1 i2cBurstReadBytes(rmCalDeviceAdr(wIndex), LOBYTE(wIndex), pBuf, ucBufLen);
41 1 #elif (RM_EEPROM_TYPE == RM_TYPE_24C32)
BYTE ucDummy; // loop dummy
ucDummy = I2C_ACCESS_DUMMY_TIME;
while(ucDummy--)
{
if (i2c_AccessStart(NVRAM_DEVICE, I2C_WRITE) == FALSE)
continue;
if (i2c_SendByte(HIBYTE(wIndex)) == I2C_NON_ACKNOWLEDGE) // check non-acknowledge
continue;
if (i2c_SendByte(LOBYTE(wIndex)) == I2C_NON_ACKNOWLEDGE) // check non-acknowledge
continue;
C51 COMPILER V8.01 NVRAM 11/28/2006 08:08:10 PAGE 2
if (i2c_AccessStart(NVRAM_DEVICE, I2C_READ) == FALSE)
continue;
while(ucBufLen--) // loop to burst read
{
*pBuf = i2c_ReceiveByte(ucBufLen); // receive byte
pBuf++; // next byte pointer
} // while
break;
} // while
i2c_Stop();
#endif
71 1 }
72 ///////////////////////////////////////////////////////////////////////////////
73 // <Function>: rmPageWrite
74 //
75 // <Description>: EEPROM page write
76
77 // <Parameter>: - <Flow> - <Description>
78 // wIndex - In - index
79 // pBuf - Out - buffer pointer
80 // ucBufLen - In - buffer length
81 //-----------------------------------------------------------------------------
82 //
83 ///////////////////////////////////////////////////////////////////////////////
84 #if (RM_EEPROM_TYPE == RM_TYPE_24C32)
void rmPageWrite(WORD wIndex, BYTE *pBuf, BYTE ucBufLen)
{
BYTE ucDummy; // loop dummy
ucDummy = I2C_ACCESS_DUMMY_TIME;
while(ucDummy--)
{
if (i2c_AccessStart(NVRAM_DEVICE, I2C_WRITE) == FALSE)
continue;
if (i2c_SendByte(HIBYTE(wIndex)) == I2C_NON_ACKNOWLEDGE) // check non-acknowledge
continue;
if (i2c_SendByte(LOBYTE(wIndex)) == I2C_NON_ACKNOWLEDGE) // check non-acknowledge
continue;
while(ucBufLen--) // loop of writting data
{
i2c_SendByte(*pBuf); // send byte
pBuf++; // next byte pointer
} // while
break;
} // while
i2c_Stop();
}
#endif
114 ///////////////////////////////////////////////////////////////////////////////
115 // <Function>: rmBurstWriteBytes
116 //
C51 COMPILER V8.01 NVRAM 11/28/2006 08:08:10 PAGE 3
117 // <Description>: EEPROM burst write bytes
118 //
119 // <Parameter>: - <Flow> - <Description>
120 // wIndex - In - index
121 // pBuf - Out - buffer pointer
122 // ucBufLen - In - buffer length
123 //-----------------------------------------------------------------------------
124 //
125 ///////////////////////////////////////////////////////////////////////////////
126 void rmBurstWriteBytes(WORD wIndex, BYTE *pBuf, WORD ucBufLen)
127 {
128 1 BYTE ucWriteCount; // write counter
129 1 BYTE ucRemainLen; // i2c word address
130 1
131 1 while(1)
132 1 {
133 2 // check page write roll over
134 2 if (ucBufLen > RM_PAGE_WRITE_LEN)
135 2 ucWriteCount = RM_PAGE_WRITE_LEN;
136 2 else
137 2 ucWriteCount = ucBufLen;
138 2
139 2 // check word address higher than page write bits
140 2 ucRemainLen = LOBYTE(wIndex) % RM_PAGE_WRITE_LEN;
141 2 if (ucRemainLen) // check ramain
142 2 {
143 3 ucRemainLen = RM_PAGE_WRITE_LEN - ucRemainLen;
144 3 if (ucWriteCount > ucRemainLen) // check not roll over
145 3 ucWriteCount = ucRemainLen;
146 3 }
147 2
148 2 // EEPROM page write
149 2 #if (RM_EEPROM_TYPE == RM_TYPE_24C16)
150 2 i2cBurstWriteBytes(rmCalDeviceAdr(wIndex), LOBYTE(wIndex), pBuf, ucWriteCount);
151 2 #elif (RM_EEPROM_TYPE == RM_TYPE_24C32)
rmPageWrite(wIndex, pBuf, ucWriteCount);
#endif
154 2 // check end of buffer
155 2 ucBufLen -= ucWriteCount;
156 2 if (ucBufLen == 0)
157 2 break;
158 2
159 2 wIndex += ucWriteCount; // next word address
160 2 pBuf += ucWriteCount; // next buffer pointer
161 2
162 2 Delay1ms(1);
163 2 } // while
164 1
165 1 }
166
167 void NVRam_WriteByte(WORD addr, BYTE value)
168 {
169 1 rmBurstWriteBytes(addr, &value, 1);
170 1 }
171 void NVRam_ReadByte(WORD addr, BYTE *value)
172 {
173 1 rmBurstReadBytes(addr, value, 1);
174 1 }
175 void NVRam_WriteTbl(WORD addr, BYTE *buffer, WORD count)
176 {
177 1 rmBurstWriteBytes(addr, buffer, count);
178 1 }
C51 COMPILER V8.01 NVRAM 11/28/2006 08:08:10 PAGE 4
179 void NVRam_ReadTbl(WORD addr, BYTE *buffer, WORD count)
180 {
181 1 rmBurstReadBytes(addr, buffer, count);
182 1 }
183
184 #else
void mstSaveDisplayDataBanked(WORD address)
{
BYTE i;
//printf("\r\nRW<%x>",address);
// get flash Manufacture ID
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -