📄 hal24c02.lst
字号:
C51 COMPILER V8.01 HAL24C02 04/17/2008 09:54:28 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE HAL24C02
OBJECT MODULE PLACED IN .\Debug\hal24c02.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE e2prom\hal24c02.c LARGE OPTIMIZE(9,SIZE) REGFILE(.\Debug\VA4010_SDK_V2.ORC)
- BROWSE NOINTPROMOTE INCDIR(.\common;.\e2prom;.\file;.\fmtx;.\ir;.\keyboard;.\lcm;.\led;.\main;.\matrixkey;.\mp3ctrl;.\s
-d;.\usbhost;.\include;.\lib) DEBUG OBJECTEXTEND PRINT(.\Debug\hal24c02.lst) OBJECT(.\Debug\hal24c02.obj)
line level source
1 /****************************************************************
2 * Viaon Technology (Suzhou) Co.,Ltd
3 *
4 * Copyright 2007, Viaon Technology (Suzhou) Co.,Ltd,Suzhou,China
5 * All rights reserved.
6 *
7 *
8 * Filename: hal24c02.c
9 *
10 * Programmer: Greg
11 *
12 * Created: 1/2/2008
13 *
14 * Description: public functions
15 *
16 *
17 * Change History (most recent first): 2008.1.2
18 ****************************************************************/
19 #include "utiltypedef.h"
20 #include "va4010reg.h"
21 #include "common.h"
22
23 #include "hali2c.h"
24
25
26 #if ((E2PROM_TYPE == E2PROM_24C02))
27 /**********以下为读写24c02的函数**********/
28 /*not change SDA's out_put and in_put */
29 void Write_One_Byte(BYTE addr,BYTE thedata)
30 {
31 1 // bit acktemp=1;
32 1 /*write a byte to mem*/
33 1 I2C_Start();
34 1 WriteI2CByte(DEVICE_WRITE);
35 1 Check_Acknowledge();
36 1 WriteI2CByte(addr);/*address*/
37 1 Check_Acknowledge();
38 1 WriteI2CByte(thedata);/*thedata*/
39 1 Check_Acknowledge();
40 1 I2C_Stop();
41 1
42 1 }
43
44 // A page write for 24C02 will consume 10ms at most.
45 void Write_A_Page(BYTE *buffer,BYTE addr)
46 {
47 1 // bit acktemp;
48 1 BYTE data i;
49 1
50 1 I2C_Start();
51 1 WriteI2CByte(DEVICE_WRITE);
52 1 Check_Acknowledge();
53 1
C51 COMPILER V8.01 HAL24C02 04/17/2008 09:54:28 PAGE 2
54 1 WriteI2CByte(addr);/*address*/
55 1 Check_Acknowledge();
56 1
57 1 for(i=0;i<E2PROM_PAGE_SIZE;i++)
58 1 {
59 2 WriteI2CByte(buffer[i]);
60 2 Check_Acknowledge();
61 2 }
62 1
63 1 I2C_Stop();
64 1 /*
65 1 //Write cycle polling using ACK
66 1 do{
67 1 I2C_Start();
68 1 WriteI2CByte(DEVICE_WRITE);
69 1 acktemp=Check_Acknowledge();
70 1 }while(acktemp == I2C_NAK);
71 1
72 1 I2C_Start();
73 1 I2C_Stop();
74 1 */
75 1 return;
76 1 }
77
78 #if 0
void Write_2_Page(BYTE *buffer,BYTE addr)
{
BYTE acktemp;
BYTE i;
I2C_Start();
WriteI2CByte(DEVICE_WRITE);
Check_Acknowledge();
WriteI2CByte(addr);/*address*/
Check_Acknowledge();
for(i=0;i<E2PROM_PAGE_SIZE;i++)
{
WriteI2CByte(buffer[i]);
Check_Acknowledge();
}
I2C_Stop();
//Write cycle polling using ACK
do{
I2C_Start();
WriteI2CByte(DEVICE_WRITE);
acktemp=Check_Acknowledge();
}while(acktemp == I2C_NAK);
//I2C_Start();
//I2C_Stop();
WriteI2CByte(addr+E2PROM_PAGE_SIZE);/*address*/
Check_Acknowledge();
for(i=0;i<E2PROM_PAGE_SIZE;i++)
{
WriteI2CByte(buffer[i+E2PROM_PAGE_SIZE]);
Check_Acknowledge();
}
C51 COMPILER V8.01 HAL24C02 04/17/2008 09:54:28 PAGE 3
I2C_Stop();
return;
}
BYTE Read_One_Byte(BYTE addr)
{
bit acktemp=1;
BYTE mydata;
/*read a byte from mem*/
I2C_Start();
WriteI2CByte(DEVICE_READ);
acktemp=Check_Acknowledge();
WriteI2CByte(addr);/*address*/
acktemp=Check_Acknowledge();
I2C_Start();
WriteI2CByte(0xa1);
acktemp=Check_Acknowledge();
mydata=ReadI2CByte();
acktemp=Check_Acknowledge();
I2C_Stop();
return mydata;
}
BYTE Read_random(BYTE addr){
bit acktemp=1;
char mydata;
/*read a byte from mem*/
I2C_Start();
WriteI2CByte(DEVICE_READ);
acktemp=Check_Acknowledge();
WriteI2CByte(addr);/*address*/
acktemp=Check_Acknowledge();
I2C_Start();
WriteI2CByte(0xa1);
acktemp=Check_Acknowledge();
mydata=ReadI2CByte();
return mydata;
I2C_Stop();
}
#endif
160 void Read_N_Bytes(BYTE *buffer,BYTE n, BYTE addr)
161 {
162 1 BYTE data i=0;
163 1 //BYTE addr=0;
164 1
165 1 I2C_Start();
166 1 WriteI2CByte(DEVICE_WRITE);
167 1 Check_Acknowledge();
168 1 WriteI2CByte(addr);/*address*/
169 1 Check_Acknowledge();
170 1
171 1 I2C_Start();
172 1 WriteI2CByte(DEVICE_READ);
173 1 Check_Acknowledge();
174 1
175 1 for(i=0;i<n;i++)
176 1 {
177 2 buffer[i]=ReadI2CByte();
C51 COMPILER V8.01 HAL24C02 04/17/2008 09:54:28 PAGE 4
178 2 if(i!=n-1)
179 2 SEND_0(); /*发送应答*/
180 2 else
181 2 SEND_1(); /*发送非应答*/
182 2 }
183 1 I2C_Stop();
184 1
185 1 return;
186 1 }
187
188 #if 0
void WriteE2PRom(BYTE *buf, BYTE len)
{
BYTE i, cnt, residue;
WORD addr = 0;
cnt = len>>E2PROM_PAGE_SIZEEXP;
residue = len&((1<<E2PROM_PAGE_SIZEEXP)-1);
if(residue != 0)
cnt ++;
for(i=0; i<cnt; i++){
Write_A_Page(buf, addr);
buf += E2PROM_PAGE_SIZE;
addr += E2PROM_PAGE_SIZE;
DelayMs(WRITE_DELAY_MS);
}
return;
}
void ReadE2PRom(BYTE* buf, BYTE len)
{
Read_N_Bytes(buf, len);//,0);
return;
}
#endif
217
218 #endif
219
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 204 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 8
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
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 + -