📄 eeprom.lst
字号:
C51 COMPILER V7.50 EEPROM 02/05/2007 16:33:24 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN .\OBJ\EEPROM.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE EEPROM.C ROM(COMPACT) OPTIMIZE(9,SPEED) NOAREGS DEFINE(PROJECT=DMO04015800,
-MCU_CFG=BIT5101,VP_IF_CFG=VP_IF_BITEK) PRINT(.\LST\EEPROM.lst) OBJECT(.\OBJ\EEPROM.obj)
line level source
1 /* **********************************************************************
2
3 Copyright (c) 2002-2006 Beyond Innovation Technology Co., Ltd
4
5 All rights are reserved. Reproduction in whole or in parts is
6 prohibited without the prior written consent of the copyright owner.
7 ----------------------------------------------------------------------
8
9 Module: EEPROM.C
10
11 Purpose: Implementation of EEPROM module.
12
13 Version: 0.01 07:24PM 2005/05/13
14
15 Compiler: Keil 8051 C Compiler v8.01
16
17 Reference:
18 [1] AN709 System Level Design Considerations When Using I2C Serial EEPROM
19 Devices, 1999 Microchip Technology Inc.
20
21 ----------------------------------------------------------------------
22 Modification:
23
24 R0.01 07:24PM 2005/05/13 Jeffrey Chang
25 Reason:
26 1. Original.
27 Solution:
28
29 ********************************************************************** */
30
31 #define _EEPROM_C_
32
33 /* ------------------------------------
34 Header Files
35 ------------------------------------ */
36
37 #include "eeprom.h"
38 #include "i2c.h"
39 #include "platform.h"
40 #include "timer.h"
41
42
43 /* ------------------------------------
44 Macro Definitions
45 ------------------------------------ */
46
47
48 /* ------------------------------------
49 Type Definitions
50 ------------------------------------ */
51
52
53 /* ------------------------------------
54 Variables Definitions
C51 COMPILER V7.50 EEPROM 02/05/2007 16:33:24 PAGE 2
55 ------------------------------------ */
56
57 /* ------------------------------------
58 Function Prototypes
59 ------------------------------------ */
60
61
62 /* -------------------------------------------------------------------
63 Name: EEPROM_Default -
64 Purpose:
65 This function writes default values of data structures to
66 specific address of EEPROM block.
67 Passed: None.
68 Returns: None.
69 Notes:
70 ------------------------------------------------------------------- */
71 void EEPROM_Default (void)
72 {
73 1 EEPROM_TxBurst(EGD_ADDR,
74 1 sizeof(tsEGD_Default),
75 1 (UB8 *)&tsEGD_Default);
76 1
77 1 EEPROM_TxBurst(EYD_ADDR,
78 1 sizeof(tsEYD_Default),
79 1 (UB8 *)&tsEYD_Default);
80 1 } /* EEPROM_Default */
81
82
83 /* -------------------------------------------------------------------
84 Name: EEPROM_Init -
85 Purpose: To initialize the EEPROM module.
86 Passed: None.
87 Returns: None.
88 Notes:
89 ------------------------------------------------------------------- */
90 void EEPROM_Init (void)
91 {
92 1 // ++++++++++++++++++++++++++++++++
93 1 // [JC011] Added by JC 03:15PM 2006/04/26
94 1 // [1]2 Forcing EEPROM internal reset via software
95 1 I2C_Start();
96 1
97 1 I2C_TxData(0xFF);
98 1 I2C_SetNAK();
99 1
100 1 I2C_Start();
101 1 I2C_Stop();
102 1 // ++++++++++++++++++++++++++++++++
103 1 } /* EEPROM_Init */
104
105
106 #if (EEPROM_RX_BURST)
107 /* -------------------------------------------------------------------
108 Name: EEPROM_RxBurst -
109 Purpose: To receive bulk data from I2C EEPROM.
110 Passed:
111 UW16 wAddr = EEPROM address.
112 UB8 bCnt = The number of data which will be received
113 excluding EEPROM address (bCnt: 1..255).
114 UB8 *pbData = The pointer which points to the first data item.
115 Returns: None.
116 Notes:
C51 COMPILER V7.50 EEPROM 02/05/2007 16:33:24 PAGE 3
117 The EEPROM_MAD should be the slave device's 'WRITE' module addres,
118 not 'READ' one.
119 ------------------------------------------------------------------- */
120 void EEPROM_RxBurst (
121 UW16 wAddr, /* EEPROM address */
122 UB8 bCnt, /* The number of data which will be transmitted */
123 UB8 *pbData /* Point to the first DATA item */
124 )
125 {
126 1 UB8 bIdx;
127 1
128 1
129 1
130 1 I2C_Start();
131 1
132 1 /* --------------------------------
133 1 Write
134 1 -------------------------------- */
135 1 I2C_TxData(EEPROM_MAD | ((wAddr >> 8) << 1));
136 1 I2C_GetACK();
137 1
138 1 I2C_TxData(wAddr & 0x00FF);
139 1 I2C_GetACK();
140 1
141 1 /* --------------------------------
142 1 Read
143 1 -------------------------------- */
144 1 I2C_Start();
145 1 I2C_TxData(EEPROM_MAD | ((wAddr >> 8) << 1) | 0x01);
146 1 I2C_GetACK();
147 1
148 1
149 1 for (bIdx = 0; bIdx < (bCnt - 1); bIdx++)
150 1 {
151 2 *pbData++ = I2C_RxData();
152 2
153 2 I2C_SetACK();
154 2 } /* for */
155 1
156 1
157 1 /* --------------------------------
158 1 Last Read
159 1 -------------------------------- */
160 1 *pbData = I2C_RxData();
161 1 I2C_SetNAK();
162 1
163 1 I2C_Stop();
164 1
165 1 } /* EEPROM_RxBurst */
166 #endif
167
168
169 #if (EEPROM_RX_BYTE)
/* -------------------------------------------------------------------
Name: EEPROM_RxByte -
Purpose:
To receive one byte data from I2C slave device.
Passed:
wAddr = EEPROM address.
Returns:
C51 COMPILER V7.50 EEPROM 02/05/2007 16:33:24 PAGE 4
The one byte data.
Notes:
The bSLA should be the slave device's 'WRITE' module addres,
not 'READ' one.
------------------------------------------------------------------- */
UB8 EEPROM_RxByte (UW16 wAddr)
{
UB8 bData;
I2C_Start();
/* --------------------------------
Write
-------------------------------- */
/* 'WRITE' MAD and High byte of address */
I2C_TxData(EEPROM_MAD | ((wAddr >> 8) << 1));
I2C_GetACK();
/* Low byte of address */
I2C_TxData(wAddr & 0x00FF);
I2C_GetACK();
/* --------------------------------
Read
-------------------------------- */
I2C_Start();
I2C_TxData(EEPROM_MAD | ((wAddr >> 8) << 1) | 0x01);
I2C_GetACK();
/* --------------------------------
Last Read
-------------------------------- */
bData = I2C_RxData();
I2C_SetNAK();
I2C_Stop();
return( bData );
} /* EEPROM_RxByte */
#endif
222
223
224 #if (EEPROM_TX_BURST)
225 /* -------------------------------------------------------------------
226 Name: EEPROM_TxBurst -
227 Purpose:
228 To transmit bulk data to I2C EEPROM.
229
230 Passed:
231 UW16 wAddr = EEPROM address.
232 UB8 bCnt = The number of data which will be transmitted
233 excluding EEPROM address (bCnt: 1..255).
234 UB8 *pbData = The pointer which points to the first data item.
235
236 Returns: None.
237 Notes:
238 ------------------------------------------------------------------- */
239 void EEPROM_TxBurst (
240 UW16 wAddr, /* EEPROM address */
C51 COMPILER V7.50 EEPROM 02/05/2007 16:33:24 PAGE 5
241 UB8 bCnt, /* The number of data which will be transmitted */
242 UB8 *pbData /* Point to the first DATA item */
243 )
244 {
245 1 for ( ; bCnt; bCnt--)
246 1 {
247 2 I2C_TxByte(EEPROM_MAD | ((wAddr >> 8) << 1), wAddr++, *pbData++);
248 2
249 2 TIMER_DelayMS(EEPROM_WRITE_CYCLE_TIME);
250 2 } // for
251 1 } /* EEPROM_TxBurst */
252 #endif
253
254
255 #if (EEPROM_TX_BYTE)
/* -------------------------------------------------------------------
Name: EEPROM_TxByte -
Purpose:
To transmit one byte data to I2C slave device.
Passed:
Returns: None.
Notes:
The bSLA should be the slave device's 'WRITE' module addres,
not 'READ' one.
------------------------------------------------------------------- */
void EEPROM_TxByte (
UW16 wAddr, /* I2C sub-address */
UB8 bData /* Data item */
)
{
I2C_Start();
I2C_TxData(EEPROM_MAD | ((wAddr >> 8) << 1));
I2C_GetACK();
I2C_TxData(wAddr & 0x00FF);
I2C_GetACK();
I2C_TxData(bData);
I2C_GetACK();
I2C_Stop();
TIMER_DelayMS(EEPROM_WRITE_CYCLE_TIME);
} /* EEPROM_TxByte */
#endif
288
289
290
291 /* -------------------------------------------------------------------
292 Name: -
293 Purpose: .
294 Passed: None.
295 Returns: None.
296 Notes:
297 ------------------------------------------------------------------- */
298
299
300 /* **********************************************************************
301
302 Description:
C51 COMPILER V7.50 EEPROM 02/05/2007 16:33:24 PAGE 6
303
304
305 ********************************************************************** */
306
307 /* %% End Of File %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 226 ----
CONSTANT SIZE = 28 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 28 13
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 + -