📄 eeprom.lst
字号:
C51 COMPILER V7.50 EEPROM 11/07/2006 14:52:11 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN eeprom.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE eeprom.c ROM(COMPACT) OPTIMIZE(9,SPEED) REGFILE(.\fx2_ata.ORC) BROWSE ORDER
- INCDIR(c:\cypress\usb\target\inc) DEFINE(GPIF=0,FLASH=0,DEVICE_TYPE_IS_SCSI=1,DEVICE_TYPE_IS_IDE=1,VBUS_DETECT=1) DEBUG
- OBJECTEXTEND CODE
line level source
1 //-----------------------------------------------------------------------------
2 // File: eeprom.c
3 // Contents: EEPROM update firmware source. (Write only)
4 //
5 // indent 3. NO TABS!
6 //
7 // Copyright (c) 2002 Cypress Semiconductor
8 //
9 // $Archive: /USB/atapifx2/software/eeprom.c $
10 // $Date: 1/21/02 2:36p $
11 // $Revision: 3 $
12 //-----------------------------------------------------------------------------
13 #include "fx2.h"
14 #include "fx2regs.h"
15 #include "atapi.h"
16
17 #define EEPROM_ADDR 0x51
18 #define EEPROM_PAGE_SIZE 16
19
20 extern void EEWaitForStop();
21 static void EEStartAndAddr();
22 extern void WaitForEEPROMWrite();
23
24 ///////////////////////////////////////////////////////////////////////////////////////
25
26 // Write the entire EEPROM
27 void EEPROMWrite(WORD len)
28 {
29 1 WORD i;
30 1 WORD addr;
31 1
32 1 for (addr = 0; addr < len; addr += wPacketSize)
33 1 {
34 2 // Wait for host to send data
35 2 while(EP2CS & bmEPEMPTY)
36 2 ;
37 2
38 2 // Write the data from the USB buffer to the EEPROM
39 2 for (i = 0; i < wPacketSize; i+= EEPROM_PAGE_SIZE)
40 2 {
41 3 EEPROMWritePage(addr+i, EP2FIFOBUF+i);
42 3 }
43 2
44 2 // Give up the buffer
45 2 EP2BCL = 0x80;
46 2 }
47 1 }
48 // Write one page of data to the EEPROM.
49 void EEPROMWritePage(WORD addr, BYTE xdata * ptr)
50 {
51 1 BYTE i;
52 1 BYTE ee_str[EEPROM_PAGE_SIZE+2];
53 1
C51 COMPILER V7.50 EEPROM 11/07/2006 14:52:11 PAGE 2
54 1 ee_str[0] = MSB(addr);
55 1 ee_str[1] = LSB(addr);
56 1 for (i = 2; i < EEPROM_PAGE_SIZE+2; i++)
57 1 {
58 2 ee_str[i] = ptr[i-2];
59 2 }
60 1
61 1 // Make sure the i2c interface is idle
62 1 EEWaitForStop();
63 1
64 1 // Write the device address
65 1 EEStartAndAddr();
66 1 for (i = 0; i < EEPROM_PAGE_SIZE + 2; i++)
67 1 {
68 2 while (!(I2CS & 1)) // Poll the done bit
69 2 ;
70 2 I2DAT = ee_str[i];
71 2 }
72 1 while (!(I2CS & 1)) // Poll the done bit
73 1 ;
74 1 I2CS |= bmSTOP;
75 1 WaitForEEPROMWrite();
76 1 }
77
78 void EEStartAndAddr()
79 {
80 1 I2CS |= bmSTART;
81 1 I2DAT = EEPROM_ADDR << 1;
82 1 }
C51 COMPILER V7.50 EEPROM 11/07/2006 14:52:11 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _EEPROMWrite (BEGIN)
; SOURCE LINE # 27
0000 8E00 R MOV len,R6
0002 8F00 R MOV len+01H,R7
; SOURCE LINE # 28
; SOURCE LINE # 32
0004 E4 CLR A
0005 F500 R MOV addr,A
0007 F500 R MOV addr+01H,A
0009 ?C0001:
0009 C3 CLR C
000A E500 R MOV A,addr+01H
000C 9500 R SUBB A,len+01H
000E E500 R MOV A,addr
0010 9500 R SUBB A,len
0012 504E JNC ?C0009
; SOURCE LINE # 33
0014 ?C0004:
; SOURCE LINE # 35
0014 90E6A3 MOV DPTR,#0E6A3H
0017 E0 MOVX A,@DPTR
0018 20E2F9 JB ACC.2,?C0004
001B ?C0005:
; SOURCE LINE # 39
001B E4 CLR A
001C F500 R MOV i,A
001E F500 R MOV i+01H,A
0020 ?C0006:
0020 C3 CLR C
0021 E500 R MOV A,i+01H
0023 9500 E SUBB A,wPacketSize+01H
0025 E500 R MOV A,i
0027 9500 E SUBB A,wPacketSize
0029 5023 JNC ?C0007
; SOURCE LINE # 40
; SOURCE LINE # 41
002B E500 R MOV A,addr+01H
002D 2500 R ADD A,i+01H
002F FF MOV R7,A
0030 E500 R MOV A,addr
0032 3500 R ADDC A,i
0034 FE MOV R6,A
0035 E4 CLR A
0036 2500 R ADD A,i+01H
0038 FD MOV R5,A
0039 E500 R MOV A,i
003B 34F0 ADDC A,#0F0H
003D FC MOV R4,A
003E 120000 R LCALL _EEPROMWritePage
; SOURCE LINE # 42
0041 7410 MOV A,#010H
0043 2500 R ADD A,i+01H
0045 F500 R MOV i+01H,A
0047 E4 CLR A
0048 3500 R ADDC A,i
004A F500 R MOV i,A
004C 80D2 SJMP ?C0006
004E ?C0007:
; SOURCE LINE # 45
C51 COMPILER V7.50 EEPROM 11/07/2006 14:52:11 PAGE 4
004E 90E691 MOV DPTR,#0E691H
0051 7480 MOV A,#080H
0053 F0 MOVX @DPTR,A
; SOURCE LINE # 46
0054 E500 E MOV A,wPacketSize+01H
0056 2500 R ADD A,addr+01H
0058 F500 R MOV addr+01H,A
005A E500 E MOV A,wPacketSize
005C 3500 R ADDC A,addr
005E F500 R MOV addr,A
0060 80A7 SJMP ?C0001
; SOURCE LINE # 47
0062 ?C0009:
0062 22 RET
; FUNCTION _EEPROMWrite (END)
; FUNCTION _EEPROMWritePage (BEGIN)
; SOURCE LINE # 49
;---- Variable 'addr' assigned to Register 'R2/R3' ----
0000 AA06 MOV R2,AR6
;---- Variable 'ptr' assigned to Register 'R4/R5' ----
; SOURCE LINE # 50
; SOURCE LINE # 54
0002 EA MOV A,R2
0003 F500 R MOV ee_str,A
; SOURCE LINE # 55
0005 EF MOV A,R7
0006 F500 R MOV ee_str+01H,A
; SOURCE LINE # 56
;---- Variable 'i' assigned to Register 'R7' ----
0008 7F02 MOV R7,#02H
000A ?C0010:
; SOURCE LINE # 57
; SOURCE LINE # 58
000A EF MOV A,R7
000B 24FE ADD A,#0FEH
000D FB MOV R3,A
000E E4 CLR A
000F 34FF ADDC A,#0FFH
0011 FA MOV R2,A
0012 ED MOV A,R5
0013 2B ADD A,R3
0014 F582 MOV DPL,A
0016 EC MOV A,R4
0017 3A ADDC A,R2
0018 F583 MOV DPH,A
001A E0 MOVX A,@DPTR
001B FE MOV R6,A
001C 7400 R MOV A,#LOW ee_str
001E 2F ADD A,R7
001F F8 MOV R0,A
0020 A606 MOV @R0,AR6
; SOURCE LINE # 59
0022 0F INC R7
0023 BF12E4 CJNE R7,#012H,?C0010
0026 ?C0011:
; SOURCE LINE # 62
0026 120000 E LCALL EEWaitForStop
; SOURCE LINE # 65
0029 120000 R LCALL EEStartAndAddr
; SOURCE LINE # 66
002C E4 CLR A
C51 COMPILER V7.50 EEPROM 11/07/2006 14:52:11 PAGE 5
002D FF MOV R7,A
002E ?C0013:
; SOURCE LINE # 67
002E ?C0016:
; SOURCE LINE # 68
002E 90E678 MOV DPTR,#0E678H
0031 E0 MOVX A,@DPTR
0032 30E0F9 JNB ACC.0,?C0016
0035 ?C0017:
; SOURCE LINE # 70
0035 7400 R MOV A,#LOW ee_str
0037 2F ADD A,R7
0038 F8 MOV R0,A
0039 E6 MOV A,@R0
003A 90E679 MOV DPTR,#0E679H
003D F0 MOVX @DPTR,A
; SOURCE LINE # 71
003E 0F INC R7
003F BF12EC CJNE R7,#012H,?C0013
0042 ?C0018:
; SOURCE LINE # 72
0042 90E678 MOV DPTR,#0E678H
0045 E0 MOVX A,@DPTR
0046 30E0F9 JNB ACC.0,?C0018
0049 ?C0019:
; SOURCE LINE # 74
0049 90E678 MOV DPTR,#0E678H
004C E0 MOVX A,@DPTR
004D 4440 ORL A,#040H
004F F0 MOVX @DPTR,A
; SOURCE LINE # 75
0050 020000 E LJMP WaitForEEPROMWrite
; FUNCTION _EEPROMWritePage (END)
; FUNCTION EEStartAndAddr (BEGIN)
; SOURCE LINE # 78
; SOURCE LINE # 79
; SOURCE LINE # 80
0000 90E678 MOV DPTR,#0E678H
0003 E0 MOVX A,@DPTR
0004 4480 ORL A,#080H
0006 F0 MOVX @DPTR,A
; SOURCE LINE # 81
0007 A3 INC DPTR
0008 74A2 MOV A,#0A2H
000A F0 MOVX @DPTR,A
; SOURCE LINE # 82
000B 22 RET
; FUNCTION EEStartAndAddr (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 194 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 24
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 + -